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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
177 rwh_delegate, GetProcess(), MSG_ROUTING_NONE, hidden)); | 177 rwh_delegate, GetProcess(), MSG_ROUTING_NONE, hidden)); |
178 render_widget_host_->set_owned_by_render_frame_host(true); | 178 render_widget_host_->set_owned_by_render_frame_host(true); |
179 } | 179 } |
180 } | 180 } |
181 | 181 |
182 RenderFrameHostImpl::~RenderFrameHostImpl() { | 182 RenderFrameHostImpl::~RenderFrameHostImpl() { |
183 GetProcess()->RemoveRoute(routing_id_); | 183 GetProcess()->RemoveRoute(routing_id_); |
184 g_routing_id_frame_map.Get().erase( | 184 g_routing_id_frame_map.Get().erase( |
185 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); | 185 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); |
186 | 186 |
187 if (delegate_) | 187 if (delegate_ && render_frame_created_) |
188 delegate_->RenderFrameDeleted(this); | 188 delegate_->RenderFrameDeleted(this); |
189 | 189 |
190 FrameAccessibility::GetInstance()->OnRenderFrameHostDestroyed(this); | 190 FrameAccessibility::GetInstance()->OnRenderFrameHostDestroyed(this); |
191 | 191 |
192 // If this was swapped out, it already decremented the active frame count of | 192 // If this was swapped out, it already decremented the active frame count of |
193 // the SiteInstance it belongs to. | 193 // the SiteInstance it belongs to. |
194 if (IsRFHStateActive(rfh_state_)) | 194 if (IsRFHStateActive(rfh_state_)) |
195 GetSiteInstance()->decrement_active_frame_count(); | 195 GetSiteInstance()->decrement_active_frame_count(); |
196 | 196 |
197 // Notify the FrameTree that this RFH is going away, allowing it to shut down | 197 // Notify the FrameTree that this RFH is going away, allowing it to shut down |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
612 render_view_host_->IsRenderViewLive() : | 612 render_view_host_->IsRenderViewLive() : |
613 GetProcess()->HasConnection() && render_frame_created_; | 613 GetProcess()->HasConnection() && render_frame_created_; |
614 | 614 |
615 // Sanity check: the RenderView should always be live if the RenderFrame is. | 615 // Sanity check: the RenderView should always be live if the RenderFrame is. |
616 DCHECK(!is_live || render_view_host_->IsRenderViewLive()); | 616 DCHECK(!is_live || render_view_host_->IsRenderViewLive()); |
617 | 617 |
618 return is_live; | 618 return is_live; |
619 } | 619 } |
620 | 620 |
621 void RenderFrameHostImpl::SetRenderFrameCreated(bool created) { | 621 void RenderFrameHostImpl::SetRenderFrameCreated(bool created) { |
622 // If the current status is different than the new status, the delegate | |
623 // needs to be notified. | |
624 if (delegate_ && (created ^ render_frame_created_)) { | |
Charlie Reis
2015/02/12 00:29:31
I feel like != would be clearer than ^.
nasko
2015/02/12 17:52:26
I think so too :)
| |
625 if (created) | |
626 delegate_->RenderFrameCreated(this); | |
627 else | |
628 delegate_->RenderFrameDeleted(this); | |
629 } | |
630 | |
622 render_frame_created_ = created; | 631 render_frame_created_ = created; |
623 if (created && render_widget_host_) | 632 if (created && render_widget_host_) |
624 render_widget_host_->InitForFrame(); | 633 render_widget_host_->InitForFrame(); |
625 } | 634 } |
626 | 635 |
627 void RenderFrameHostImpl::Init() { | 636 void RenderFrameHostImpl::Init() { |
628 GetProcess()->ResumeRequestsForView(routing_id_); | 637 GetProcess()->ResumeRequestsForView(routing_id_); |
629 } | 638 } |
630 | 639 |
631 void RenderFrameHostImpl::OnAddMessageToConsole( | 640 void RenderFrameHostImpl::OnAddMessageToConsole( |
(...skipping 24 matching lines...) Expand all Loading... | |
656 // frame and it is delivered after this host is swapped out. | 665 // frame and it is delivered after this host is swapped out. |
657 // Ignore such messages, as we know this RenderFrameHost is going away. | 666 // Ignore such messages, as we know this RenderFrameHost is going away. |
658 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) | 667 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) |
659 return; | 668 return; |
660 | 669 |
661 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( | 670 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( |
662 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); | 671 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); |
663 if (!new_frame) | 672 if (!new_frame) |
664 return; | 673 return; |
665 | 674 |
675 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); | |
676 | |
666 // We know that the RenderFrame has been created in this case, immediately | 677 // We know that the RenderFrame has been created in this case, immediately |
667 // after the CreateChildFrame IPC was sent. | 678 // after the CreateChildFrame IPC was sent. |
668 new_frame->SetRenderFrameCreated(true); | 679 new_frame->SetRenderFrameCreated(true); |
669 | |
670 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); | |
671 | |
672 if (delegate_) | |
673 delegate_->RenderFrameCreated(new_frame); | |
674 } | 680 } |
675 | 681 |
676 void RenderFrameHostImpl::OnDetach() { | 682 void RenderFrameHostImpl::OnDetach() { |
677 frame_tree_->RemoveFrame(frame_tree_node_); | 683 frame_tree_->RemoveFrame(frame_tree_node_); |
678 } | 684 } |
679 | 685 |
680 void RenderFrameHostImpl::OnFrameFocused() { | 686 void RenderFrameHostImpl::OnFrameFocused() { |
681 frame_tree_->SetFocusedFrame(frame_tree_node_); | 687 frame_tree_->SetFocusedFrame(frame_tree_node_); |
682 } | 688 } |
683 | 689 |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1036 } | 1042 } |
1037 | 1043 |
1038 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { | 1044 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { |
1039 if (frame_tree_node_->IsMainFrame()) { | 1045 if (frame_tree_node_->IsMainFrame()) { |
1040 // Keep the termination status so we can get at it later when we | 1046 // Keep the termination status so we can get at it later when we |
1041 // need to know why it died. | 1047 // need to know why it died. |
1042 render_view_host_->render_view_termination_status_ = | 1048 render_view_host_->render_view_termination_status_ = |
1043 static_cast<base::TerminationStatus>(status); | 1049 static_cast<base::TerminationStatus>(status); |
1044 } | 1050 } |
1045 | 1051 |
1046 SetRenderFrameCreated(false); | |
1047 InvalidateMojoConnection(); | |
1048 | |
1049 // Reset frame tree state associated with this process. This must happen | 1052 // Reset frame tree state associated with this process. This must happen |
1050 // before RenderViewTerminated because observers expect the subframes of any | 1053 // before RenderViewTerminated because observers expect the subframes of any |
Charlie Reis
2015/02/12 00:29:31
I'm not sure why these lines were moved lower. If
nasko
2015/02/12 17:52:26
The reason I moved them is that it doesn't make se
| |
1051 // affected frames to be cleared first. | 1054 // affected frames to be cleared first. |
1052 // Note: When a RenderFrameHost is swapped out there is a different one | 1055 // Note: When a RenderFrameHost is swapped out there is a different one |
1053 // which is the current host. In this case, the FrameTreeNode state must | 1056 // which is the current host. In this case, the FrameTreeNode state must |
1054 // not be reset. | 1057 // not be reset. |
1055 if (!is_swapped_out()) | 1058 if (!is_swapped_out()) |
1056 frame_tree_node_->ResetForNewProcess(); | 1059 frame_tree_node_->ResetForNewProcess(); |
1057 | 1060 |
1061 SetRenderFrameCreated(false); | |
1062 InvalidateMojoConnection(); | |
1063 | |
1058 if (frame_tree_node_->IsMainFrame()) { | 1064 if (frame_tree_node_->IsMainFrame()) { |
1059 // RenderViewHost/RenderWidgetHost needs to reset some stuff. | 1065 // RenderViewHost/RenderWidgetHost needs to reset some stuff. |
1060 render_view_host_->RendererExited( | 1066 render_view_host_->RendererExited( |
1061 render_view_host_->render_view_termination_status_, exit_code); | 1067 render_view_host_->render_view_termination_status_, exit_code); |
1062 | 1068 |
1063 render_view_host_->delegate_->RenderViewTerminated( | 1069 render_view_host_->delegate_->RenderViewTerminated( |
1064 render_view_host_, static_cast<base::TerminationStatus>(status), | 1070 render_view_host_, static_cast<base::TerminationStatus>(status), |
1065 exit_code); | 1071 exit_code); |
1066 } | 1072 } |
1067 } | 1073 } |
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1879 void RenderFrameHostImpl::DidUseGeolocationPermission() { | 1885 void RenderFrameHostImpl::DidUseGeolocationPermission() { |
1880 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); | 1886 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); |
1881 GetContentClient()->browser()->RegisterPermissionUsage( | 1887 GetContentClient()->browser()->RegisterPermissionUsage( |
1882 PERMISSION_GEOLOCATION, | 1888 PERMISSION_GEOLOCATION, |
1883 delegate_->GetAsWebContents(), | 1889 delegate_->GetAsWebContents(), |
1884 GetLastCommittedURL().GetOrigin(), | 1890 GetLastCommittedURL().GetOrigin(), |
1885 top_frame->GetLastCommittedURL().GetOrigin()); | 1891 top_frame->GetLastCommittedURL().GetOrigin()); |
1886 } | 1892 } |
1887 | 1893 |
1888 } // namespace content | 1894 } // namespace content |
OLD | NEW |