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

Unified Diff: chrome/browser/renderer_host/render_view_host_manager.cc

Issue 150122: Fix to allow browser close after download initiated from chrome:// url (Closed)
Patch Set: Created 11 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/render_view_host_manager.cc
diff --git a/chrome/browser/renderer_host/render_view_host_manager.cc b/chrome/browser/renderer_host/render_view_host_manager.cc
index c0be053bf1f7055f0f57587104fdc85f8907a680..04fc9ce956a02d8458c55db3a096bfec129a8931 100644
--- a/chrome/browser/renderer_host/render_view_host_manager.cc
+++ b/chrome/browser/renderer_host/render_view_host_manager.cc
@@ -32,6 +32,7 @@ RenderViewHostManager::RenderViewHostManager(
render_view_delegate_(render_view_delegate),
render_view_host_(NULL),
pending_render_view_host_(NULL),
+ pending_renderer_aborted_(false),
interstitial_page_(NULL) {
registrar_.Add(this, NotificationType::RENDER_VIEW_HOST_DELETED,
NotificationService::AllSources());
@@ -214,11 +215,21 @@ void RenderViewHostManager::RendererAbortedProvisionalLoad(
// navigation events. (That's necessary to support onunload anyway.) Once
// we've made that change, we won't create a pending renderer until we know
// the response is not a download.
+
+ // There is one instance where we must be able to pre-emptively clean up a
+ // pending renderer: If a cross-site download is initiated from a chrome://
+ // url, and the browser then wants to close.
+ if (pending_render_view_host_) {
brettw 2009/07/01 15:25:22 Don't add {} here since you didn't below (and the
+ pending_renderer_aborted_ = true;
+ }
}
void RenderViewHostManager::ShouldClosePage(bool proceed) {
// Should only see this while we have a pending renderer. Otherwise, we
// should ignore.
+ if (pending_render_view_host_ && pending_renderer_aborted_)
+ CancelPending();
+
if (!pending_render_view_host_) {
bool proceed_to_fire_unload;
delegate_->BeforeUnloadFiredFromRenderManager(proceed,
@@ -580,7 +591,7 @@ void RenderViewHostManager::CancelPending() {
RenderViewHost* pending_render_view_host = pending_render_view_host_;
pending_render_view_host_ = NULL;
pending_render_view_host->Shutdown();
-
+ pending_renderer_aborted_ = false;
pending_dom_ui_.reset();
}

Powered by Google App Engine
This is Rietveld 408576698