summaryrefslogtreecommitdiffstats
path: root/content/browser/frame_host/interstitial_page_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/frame_host/interstitial_page_impl.cc')
-rw-r--r--content/browser/frame_host/interstitial_page_impl.cc34
1 files changed, 15 insertions, 19 deletions
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index 7e56e4f..8d33a46 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -162,7 +162,7 @@ InterstitialPageImpl::InterstitialPageImpl(
// TODO(creis): We will also need to pass delegates for the RVHM as we
// start to use it.
frame_tree_(new InterstitialPageNavigatorImpl(this, controller_),
- NULL, NULL, NULL, NULL),
+ this, this, this, NULL),
original_child_id_(web_contents->GetRenderProcessHost()->GetID()),
original_rvh_id_(web_contents->GetRenderViewHost()->GetRoutingID()),
should_revert_web_contents_title_(false),
@@ -284,15 +284,15 @@ void InterstitialPageImpl::Hide() {
controller_->delegate()->GetRenderViewHost()->GetView())->Focus();
}
- // Shutdown the RVH asynchronously, as we may have been called from a RVH
- // delegate method, and we can't delete the RVH out from under itself.
+ // Delete this and call Shutdown on the RVH asynchronously, as we may have
+ // been called from a RVH delegate method, and we can't delete the RVH out
+ // from under itself.
base::MessageLoop::current()->PostNonNestableTask(
FROM_HERE,
base::Bind(&InterstitialPageImpl::Shutdown,
- weak_ptr_factory_.GetWeakPtr(),
- render_view_host_));
+ weak_ptr_factory_.GetWeakPtr()));
render_view_host_ = NULL;
- frame_tree_.SwapMainFrame(NULL);
+ frame_tree_.ResetForMainFrameSwap();
controller_->delegate()->DetachInterstitialPage();
// Let's revert to the original title if necessary.
NavigationEntry* entry = controller_->GetVisibleEntry();
@@ -487,7 +487,8 @@ WebPreferences InterstitialPageImpl::GetWebkitPrefs() {
void InterstitialPageImpl::RenderWidgetDeleted(
RenderWidgetHostImpl* render_widget_host) {
- delete this;
+ // TODO(creis): Remove this method once we verify the shutdown path is sane.
+ CHECK(!web_contents_);
}
bool InterstitialPageImpl::PreHandleKeyboardEvent(
@@ -532,14 +533,10 @@ RenderViewHost* InterstitialPageImpl::CreateRenderViewHost() {
session_storage_namespace_ =
new SessionStorageNamespaceImpl(dom_storage_context);
- return RenderViewHostFactory::Create(site_instance.get(),
- this,
- this,
- this,
- MSG_ROUTING_NONE,
- MSG_ROUTING_NONE,
- false,
- false);
+ // Use the RenderViewHost from our FrameTree.
+ frame_tree_.root()->render_manager()->Init(
+ browser_context, site_instance.get(), MSG_ROUTING_NONE, MSG_ROUTING_NONE);
+ return frame_tree_.root()->current_frame_host()->render_view_host();
}
WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
@@ -559,7 +556,7 @@ WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
MSG_ROUTING_NONE,
max_page_id);
controller_->delegate()->RenderFrameForInterstitialPageCreated(
- frame_tree_.root()->render_frame_host());
+ frame_tree_.root()->current_frame_host());
view->SetSize(web_contents_view->GetContainerSize());
// Don't show the interstitial until we have navigated to it.
view->Hide();
@@ -757,9 +754,8 @@ void InterstitialPageImpl::Disable() {
enabled_ = false;
}
-void InterstitialPageImpl::Shutdown(RenderViewHostImpl* render_view_host) {
- render_view_host->Shutdown();
- // We are deleted now.
+void InterstitialPageImpl::Shutdown() {
+ delete this;
}
void InterstitialPageImpl::OnNavigatingAwayOrTabClosing() {