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

Unified Diff: chrome/browser/extensions/extension_process_manager.cc

Issue 24177003: Fixed crash when chrome.runtime.reload() is called with app windows open (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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/extensions/extension_process_manager.cc
diff --git a/chrome/browser/extensions/extension_process_manager.cc b/chrome/browser/extensions/extension_process_manager.cc
index 1f8c9fb8e916a5a91aa6f6623354f9c3fbc8b8dc..87cc6077b443e8e22dfebb1c7bc60cd4a93b7dae 100644
--- a/chrome/browser/extensions/extension_process_manager.cc
+++ b/chrome/browser/extensions/extension_process_manager.cc
@@ -395,6 +395,18 @@ void ExtensionProcessManager::RegisterRenderViewHost(
IncrementLazyKeepaliveCountForView(render_view_host);
}
+void ExtensionProcessManager::ReregisterRenderViewHosts(
+ const std::string& extension_id) {
+ // Re-register all RenderViews for this extension. We do this to restore
+ // the lazy_keepalive_count (if any) to properly reflect the number of open
+ // views.
+ for (ExtensionRenderViews::const_iterator it = all_extension_views_.begin();
+ it != all_extension_views_.end(); ++it) {
+ if (GetExtensionID(it->first) == extension_id)
+ IncrementLazyKeepaliveCountForView(it->first);
+ }
+}
+
SiteInstance* ExtensionProcessManager::GetSiteInstanceForURL(const GURL& url) {
return site_instance_->GetRelatedSiteInstance(url);
}
@@ -591,6 +603,10 @@ void ExtensionProcessManager::Observe(
const Extension* extension =
content::Details<const Extension>(details).ptr();
CreateBackgroundHostForExtensionLoad(this, extension);
+
+ if (extension->is_platform_app() &&
+ service->IsBeingReloaded(extension->id()))
+ ReregisterRenderViewHosts(extension->id());
benwells 2013/09/20 07:35:31 This makes me uncomfortable. The render view hosts
tmdiep 2013/09/20 11:07:36 Incrementing the render view hosts actually preven
benwells 2013/09/20 11:22:47 That was the conclusion I came to today as well. L
}
break;
}
@@ -776,15 +792,7 @@ void ExtensionProcessManager::CloseBackgroundHosts() {
void ExtensionProcessManager::ClearBackgroundPageData(
const std::string& extension_id) {
background_page_data_.erase(extension_id);
-
- // Re-register all RenderViews for this extension. We do this to restore
- // the lazy_keepalive_count (if any) to properly reflect the number of open
- // views.
- for (ExtensionRenderViews::const_iterator it = all_extension_views_.begin();
- it != all_extension_views_.end(); ++it) {
- if (GetExtensionID(it->first) == extension_id)
- IncrementLazyKeepaliveCountForView(it->first);
- }
+ ReregisterRenderViewHosts(extension_id);
}
bool ExtensionProcessManager::DeferLoadingBackgroundHosts() const {

Powered by Google App Engine
This is Rietveld 408576698