| 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_)) { |
| 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 30 matching lines...) Expand all Loading... |
| 662 // frame and it is delivered after this host is swapped out. | 671 // frame and it is delivered after this host is swapped out. |
| 663 // Ignore such messages, as we know this RenderFrameHost is going away. | 672 // Ignore such messages, as we know this RenderFrameHost is going away. |
| 664 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) | 673 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) |
| 665 return; | 674 return; |
| 666 | 675 |
| 667 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( | 676 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( |
| 668 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); | 677 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); |
| 669 if (!new_frame) | 678 if (!new_frame) |
| 670 return; | 679 return; |
| 671 | 680 |
| 681 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); |
| 682 |
| 672 // We know that the RenderFrame has been created in this case, immediately | 683 // We know that the RenderFrame has been created in this case, immediately |
| 673 // after the CreateChildFrame IPC was sent. | 684 // after the CreateChildFrame IPC was sent. |
| 674 new_frame->SetRenderFrameCreated(true); | 685 new_frame->SetRenderFrameCreated(true); |
| 675 | |
| 676 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); | |
| 677 | |
| 678 if (delegate_) | |
| 679 delegate_->RenderFrameCreated(new_frame); | |
| 680 } | 686 } |
| 681 | 687 |
| 682 void RenderFrameHostImpl::OnDetach() { | 688 void RenderFrameHostImpl::OnDetach() { |
| 683 frame_tree_->RemoveFrame(frame_tree_node_); | 689 frame_tree_->RemoveFrame(frame_tree_node_); |
| 684 } | 690 } |
| 685 | 691 |
| 686 void RenderFrameHostImpl::OnFrameFocused() { | 692 void RenderFrameHostImpl::OnFrameFocused() { |
| 687 frame_tree_->SetFocusedFrame(frame_tree_node_); | 693 frame_tree_->SetFocusedFrame(frame_tree_node_); |
| 688 } | 694 } |
| 689 | 695 |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 } | 1048 } |
| 1043 | 1049 |
| 1044 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { | 1050 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { |
| 1045 if (frame_tree_node_->IsMainFrame()) { | 1051 if (frame_tree_node_->IsMainFrame()) { |
| 1046 // Keep the termination status so we can get at it later when we | 1052 // Keep the termination status so we can get at it later when we |
| 1047 // need to know why it died. | 1053 // need to know why it died. |
| 1048 render_view_host_->render_view_termination_status_ = | 1054 render_view_host_->render_view_termination_status_ = |
| 1049 static_cast<base::TerminationStatus>(status); | 1055 static_cast<base::TerminationStatus>(status); |
| 1050 } | 1056 } |
| 1051 | 1057 |
| 1052 SetRenderFrameCreated(false); | |
| 1053 InvalidateMojoConnection(); | |
| 1054 | |
| 1055 // Reset frame tree state associated with this process. This must happen | 1058 // Reset frame tree state associated with this process. This must happen |
| 1056 // before RenderViewTerminated because observers expect the subframes of any | 1059 // before RenderViewTerminated because observers expect the subframes of any |
| 1057 // affected frames to be cleared first. | 1060 // affected frames to be cleared first. |
| 1058 // Note: When a RenderFrameHost is swapped out there is a different one | 1061 // Note: When a RenderFrameHost is swapped out there is a different one |
| 1059 // which is the current host. In this case, the FrameTreeNode state must | 1062 // which is the current host. In this case, the FrameTreeNode state must |
| 1060 // not be reset. | 1063 // not be reset. |
| 1061 if (!is_swapped_out()) | 1064 if (!is_swapped_out()) |
| 1062 frame_tree_node_->ResetForNewProcess(); | 1065 frame_tree_node_->ResetForNewProcess(); |
| 1063 | 1066 |
| 1067 // Reset state for the current RenderFrameHost once the FrameTreeNode has been |
| 1068 // reset. |
| 1069 SetRenderFrameCreated(false); |
| 1070 InvalidateMojoConnection(); |
| 1071 |
| 1064 if (frame_tree_node_->IsMainFrame()) { | 1072 if (frame_tree_node_->IsMainFrame()) { |
| 1065 // RenderViewHost/RenderWidgetHost needs to reset some stuff. | 1073 // RenderViewHost/RenderWidgetHost needs to reset some stuff. |
| 1066 render_view_host_->RendererExited( | 1074 render_view_host_->RendererExited( |
| 1067 render_view_host_->render_view_termination_status_, exit_code); | 1075 render_view_host_->render_view_termination_status_, exit_code); |
| 1068 | 1076 |
| 1069 render_view_host_->delegate_->RenderViewTerminated( | 1077 render_view_host_->delegate_->RenderViewTerminated( |
| 1070 render_view_host_, static_cast<base::TerminationStatus>(status), | 1078 render_view_host_, static_cast<base::TerminationStatus>(status), |
| 1071 exit_code); | 1079 exit_code); |
| 1072 } | 1080 } |
| 1073 } | 1081 } |
| (...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1886 void RenderFrameHostImpl::DidUseGeolocationPermission() { | 1894 void RenderFrameHostImpl::DidUseGeolocationPermission() { |
| 1887 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); | 1895 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); |
| 1888 GetContentClient()->browser()->RegisterPermissionUsage( | 1896 GetContentClient()->browser()->RegisterPermissionUsage( |
| 1889 PERMISSION_GEOLOCATION, | 1897 PERMISSION_GEOLOCATION, |
| 1890 delegate_->GetAsWebContents(), | 1898 delegate_->GetAsWebContents(), |
| 1891 GetLastCommittedURL().GetOrigin(), | 1899 GetLastCommittedURL().GetOrigin(), |
| 1892 top_frame->GetLastCommittedURL().GetOrigin()); | 1900 top_frame->GetLastCommittedURL().GetOrigin()); |
| 1893 } | 1901 } |
| 1894 | 1902 |
| 1895 } // namespace content | 1903 } // namespace content |
| OLD | NEW |