Chromium Code Reviews| Index: content/browser/frame_host/interstitial_page_impl.cc |
| diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc |
| index 31a488641f1fc3905f7ea22f9a93a26f310fa074..afdfe91ac640456fefb370b6b355fe7dfae310d6 100644 |
| --- a/content/browser/frame_host/interstitial_page_impl.cc |
| +++ b/content/browser/frame_host/interstitial_page_impl.cc |
| @@ -163,11 +163,12 @@ InterstitialPageImpl::InterstitialPageImpl( |
| // While we get the code to a point to do this, pass NULL for it. |
| // TODO(creis): We will also need to pass delegates for the RVHM as we |
| // start to use it. |
| - frame_tree_(new InterstitialPageNavigatorImpl(this, controller_), |
| - this, |
| - this, |
| - this, |
| - static_cast<WebContentsImpl*>(web_contents)), |
| + frame_tree_(new FrameTree(new InterstitialPageNavigatorImpl(this, |
|
Avi (use Gerrit)
2017/05/23 22:44:15
base::MakeUnique<>
|
| + controller_), |
| + this, |
| + this, |
| + this, |
| + static_cast<WebContentsImpl*>(web_contents))), |
| original_child_id_(web_contents->GetRenderProcessHost()->GetID()), |
| original_rvh_id_(web_contents->GetRenderViewHost()->GetRoutingID()), |
| should_revert_web_contents_title_(false), |
| @@ -181,6 +182,11 @@ InterstitialPageImpl::InterstitialPageImpl( |
| } |
| InterstitialPageImpl::~InterstitialPageImpl() { |
| + // RenderViewHostImpl::RenderWidgetLostFocus() will be eventually executed in |
| + // the destructor of FrameTree. It uses InterstitialPageRVHDelegate, which |
| + // will be deleted because std::unique_ptr<InterstitialPageRVHDelegateView> is |
| + // placed after frame_tree_. See bug http://crbug.com/725594. |
| + frame_tree_.reset(); |
| } |
| void InterstitialPageImpl::Show() { |
| @@ -247,8 +253,8 @@ void InterstitialPageImpl::Show() { |
| GURL data_url = GURL("data:text/html;charset=utf-8," + |
| net::EscapePath(delegate_->GetHTMLContents())); |
| - frame_tree_.root()->current_frame_host()->NavigateToInterstitialURL(data_url); |
| - frame_tree_.root()->current_frame_host()->UpdateAccessibilityMode(); |
| + frame_tree_->root()->current_frame_host()->NavigateToInterstitialURL(data_url); |
| + frame_tree_->root()->current_frame_host()->UpdateAccessibilityMode(); |
| notification_registrar_.Add(this, NOTIFICATION_NAV_ENTRY_PENDING, |
| Source<NavigationController>(controller_)); |
| @@ -296,7 +302,7 @@ void InterstitialPageImpl::Hide() { |
| FROM_HERE, base::Bind(&InterstitialPageImpl::Shutdown, |
| weak_ptr_factory_.GetWeakPtr())); |
| render_view_host_ = NULL; |
| - frame_tree_.root()->ResetForNewProcess(); |
| + frame_tree_->root()->ResetForNewProcess(); |
| controller_->delegate()->DetachInterstitialPage(); |
| // Let's revert to the original title if necessary. |
| NavigationEntry* entry = controller_->GetVisibleEntry(); |
| @@ -427,7 +433,7 @@ AccessibilityMode InterstitialPageImpl::GetAccessibilityMode() const { |
| } |
| void InterstitialPageImpl::Cut() { |
| - FrameTreeNode* focused_node = frame_tree_.GetFocusedFrame(); |
| + FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame(); |
| if (!focused_node) |
| return; |
| @@ -437,7 +443,7 @@ void InterstitialPageImpl::Cut() { |
| } |
| void InterstitialPageImpl::Copy() { |
| - FrameTreeNode* focused_node = frame_tree_.GetFocusedFrame(); |
| + FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame(); |
| if (!focused_node) |
| return; |
| @@ -447,7 +453,7 @@ void InterstitialPageImpl::Copy() { |
| } |
| void InterstitialPageImpl::Paste() { |
| - FrameTreeNode* focused_node = frame_tree_.GetFocusedFrame(); |
| + FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame(); |
| if (!focused_node) |
| return; |
| @@ -457,7 +463,7 @@ void InterstitialPageImpl::Paste() { |
| } |
| void InterstitialPageImpl::SelectAll() { |
| - FrameTreeNode* focused_node = frame_tree_.GetFocusedFrame(); |
| + FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame(); |
| if (!focused_node) |
| return; |
| @@ -586,10 +592,10 @@ RenderViewHostImpl* InterstitialPageImpl::CreateRenderViewHost() { |
| // TODO(avi): The view routing ID can be restored to MSG_ROUTING_NONE once |
| // RenderViewHostImpl has-a RenderWidgetHostImpl. https://crbug.com/545684 |
| int32_t widget_routing_id = site_instance->GetProcess()->GetNextRoutingID(); |
| - frame_tree_.root()->render_manager()->Init( |
| + frame_tree_->root()->render_manager()->Init( |
| site_instance.get(), widget_routing_id, MSG_ROUTING_NONE, |
| widget_routing_id, false); |
| - return frame_tree_.root()->current_frame_host()->render_view_host(); |
| + return frame_tree_->root()->current_frame_host()->render_view_host(); |
| } |
| WebContentsView* InterstitialPageImpl::CreateWebContentsView() { |
| @@ -608,7 +614,7 @@ WebContentsView* InterstitialPageImpl::CreateWebContentsView() { |
| FrameReplicationState(), |
| false); |
| controller_->delegate()->RenderFrameForInterstitialPageCreated( |
| - frame_tree_.root()->current_frame_host()); |
| + frame_tree_->root()->current_frame_host()); |
| view->SetSize(web_contents()->GetContainerBounds().size()); |
| // Don't show the interstitial until we have navigated to it. |
| view->Hide(); |
| @@ -753,7 +759,7 @@ void InterstitialPageImpl::CreateNewWindow( |
| void InterstitialPageImpl::SetFocusedFrame(FrameTreeNode* node, |
| SiteInstance* source) { |
| - frame_tree_.SetFocusedFrame(node, source); |
| + frame_tree_->SetFocusedFrame(node, source); |
| if (web_contents_) { |
| static_cast<WebContentsImpl*>(web_contents_) |
| @@ -799,7 +805,7 @@ SessionStorageNamespace* InterstitialPageImpl::GetSessionStorageNamespace( |
| } |
| FrameTree* InterstitialPageImpl::GetFrameTree() { |
| - return &frame_tree_; |
| + return frame_tree_.get(); |
| } |
| void InterstitialPageImpl::Disable() { |