| 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 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 |
| 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 // Reset state for the current RenderFrameHost once the FrameTreeNode has been |
| 1062 // reset. |
| 1063 SetRenderFrameCreated(false); |
| 1064 InvalidateMojoConnection(); |
| 1065 |
| 1058 if (frame_tree_node_->IsMainFrame()) { | 1066 if (frame_tree_node_->IsMainFrame()) { |
| 1059 // RenderViewHost/RenderWidgetHost needs to reset some stuff. | 1067 // RenderViewHost/RenderWidgetHost needs to reset some stuff. |
| 1060 render_view_host_->RendererExited( | 1068 render_view_host_->RendererExited( |
| 1061 render_view_host_->render_view_termination_status_, exit_code); | 1069 render_view_host_->render_view_termination_status_, exit_code); |
| 1062 | 1070 |
| 1063 render_view_host_->delegate_->RenderViewTerminated( | 1071 render_view_host_->delegate_->RenderViewTerminated( |
| 1064 render_view_host_, static_cast<base::TerminationStatus>(status), | 1072 render_view_host_, static_cast<base::TerminationStatus>(status), |
| 1065 exit_code); | 1073 exit_code); |
| 1066 } | 1074 } |
| 1067 } | 1075 } |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1879 void RenderFrameHostImpl::DidUseGeolocationPermission() { | 1887 void RenderFrameHostImpl::DidUseGeolocationPermission() { |
| 1880 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); | 1888 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); |
| 1881 GetContentClient()->browser()->RegisterPermissionUsage( | 1889 GetContentClient()->browser()->RegisterPermissionUsage( |
| 1882 PERMISSION_GEOLOCATION, | 1890 PERMISSION_GEOLOCATION, |
| 1883 delegate_->GetAsWebContents(), | 1891 delegate_->GetAsWebContents(), |
| 1884 GetLastCommittedURL().GetOrigin(), | 1892 GetLastCommittedURL().GetOrigin(), |
| 1885 top_frame->GetLastCommittedURL().GetOrigin()); | 1893 top_frame->GetLastCommittedURL().GetOrigin()); |
| 1886 } | 1894 } |
| 1887 | 1895 |
| 1888 } // namespace content | 1896 } // namespace content |
| OLD | NEW |