Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 921443003: Fix RenderFrameCreated and RenderFrameDeleted WebContentsObserver methods (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for autofill test. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 28 matching lines...) Expand all
660 // frame and it is delivered after this host is swapped out. 669 // frame and it is delivered after this host is swapped out.
661 // Ignore such messages, as we know this RenderFrameHost is going away. 670 // Ignore such messages, as we know this RenderFrameHost is going away.
662 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) 671 if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT)
663 return; 672 return;
664 673
665 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( 674 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame(
666 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); 675 frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name);
667 if (!new_frame) 676 if (!new_frame)
668 return; 677 return;
669 678
679 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags);
680
670 // We know that the RenderFrame has been created in this case, immediately 681 // We know that the RenderFrame has been created in this case, immediately
671 // after the CreateChildFrame IPC was sent. 682 // after the CreateChildFrame IPC was sent.
672 new_frame->SetRenderFrameCreated(true); 683 new_frame->SetRenderFrameCreated(true);
673
674 new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags);
675
676 if (delegate_)
677 delegate_->RenderFrameCreated(new_frame);
678 } 684 }
679 685
680 void RenderFrameHostImpl::OnDetach() { 686 void RenderFrameHostImpl::OnDetach() {
681 frame_tree_->RemoveFrame(frame_tree_node_); 687 frame_tree_->RemoveFrame(frame_tree_node_);
682 } 688 }
683 689
684 void RenderFrameHostImpl::OnFrameFocused() { 690 void RenderFrameHostImpl::OnFrameFocused() {
685 frame_tree_->SetFocusedFrame(frame_tree_node_); 691 frame_tree_->SetFocusedFrame(frame_tree_node_);
686 } 692 }
687 693
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 } 1046 }
1041 1047
1042 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { 1048 void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) {
1043 if (frame_tree_node_->IsMainFrame()) { 1049 if (frame_tree_node_->IsMainFrame()) {
1044 // Keep the termination status so we can get at it later when we 1050 // Keep the termination status so we can get at it later when we
1045 // need to know why it died. 1051 // need to know why it died.
1046 render_view_host_->render_view_termination_status_ = 1052 render_view_host_->render_view_termination_status_ =
1047 static_cast<base::TerminationStatus>(status); 1053 static_cast<base::TerminationStatus>(status);
1048 } 1054 }
1049 1055
1050 SetRenderFrameCreated(false);
1051 InvalidateMojoConnection();
1052
1053 // Reset frame tree state associated with this process. This must happen 1056 // Reset frame tree state associated with this process. This must happen
1054 // before RenderViewTerminated because observers expect the subframes of any 1057 // before RenderViewTerminated because observers expect the subframes of any
1055 // affected frames to be cleared first. 1058 // affected frames to be cleared first.
1056 // Note: When a RenderFrameHost is swapped out there is a different one 1059 // Note: When a RenderFrameHost is swapped out there is a different one
1057 // which is the current host. In this case, the FrameTreeNode state must 1060 // which is the current host. In this case, the FrameTreeNode state must
1058 // not be reset. 1061 // not be reset.
1059 if (!is_swapped_out()) 1062 if (!is_swapped_out())
1060 frame_tree_node_->ResetForNewProcess(); 1063 frame_tree_node_->ResetForNewProcess();
1061 1064
1065 // Reset state for the current RenderFrameHost once the FrameTreeNode has been
1066 // reset.
1067 SetRenderFrameCreated(false);
1068 InvalidateMojoConnection();
1069
1062 if (frame_tree_node_->IsMainFrame()) { 1070 if (frame_tree_node_->IsMainFrame()) {
1063 // RenderViewHost/RenderWidgetHost needs to reset some stuff. 1071 // RenderViewHost/RenderWidgetHost needs to reset some stuff.
1064 render_view_host_->RendererExited( 1072 render_view_host_->RendererExited(
1065 render_view_host_->render_view_termination_status_, exit_code); 1073 render_view_host_->render_view_termination_status_, exit_code);
1066 1074
1067 render_view_host_->delegate_->RenderViewTerminated( 1075 render_view_host_->delegate_->RenderViewTerminated(
1068 render_view_host_, static_cast<base::TerminationStatus>(status), 1076 render_view_host_, static_cast<base::TerminationStatus>(status),
1069 exit_code); 1077 exit_code);
1070 } 1078 }
1071 } 1079 }
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1884 void RenderFrameHostImpl::DidUseGeolocationPermission() { 1892 void RenderFrameHostImpl::DidUseGeolocationPermission() {
1885 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); 1893 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame();
1886 GetContentClient()->browser()->RegisterPermissionUsage( 1894 GetContentClient()->browser()->RegisterPermissionUsage(
1887 PERMISSION_GEOLOCATION, 1895 PERMISSION_GEOLOCATION,
1888 delegate_->GetAsWebContents(), 1896 delegate_->GetAsWebContents(),
1889 GetLastCommittedURL().GetOrigin(), 1897 GetLastCommittedURL().GetOrigin(),
1890 top_frame->GetLastCommittedURL().GetOrigin()); 1898 top_frame->GetLastCommittedURL().GetOrigin());
1891 } 1899 }
1892 1900
1893 } // namespace content 1901 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698