Index: chrome/renderer/chrome_content_renderer_client.cc |
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc |
index 05a62ac0c7b6bab3def9ee93b4e3ad75cc40be39..9e6a913245dab61d146fb6e654e8b20263a7b666 100644 |
--- a/chrome/renderer/chrome_content_renderer_client.cc |
+++ b/chrome/renderer/chrome_content_renderer_client.cc |
@@ -558,6 +558,16 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(WebFrame* frame, |
if (old_url.is_empty() && frame->opener()) |
old_url = frame->opener()->url(); |
+ // If this is a reload, check whether it has the wrong process type. We |
+ // should send it to the browser if it's an extension URL (e.g., hosted app) |
+ // in a normal process, or if it's a process for an extension that has been |
+ // uninstalled. |
+ if (old_url == new_url) { |
+ bool is_extension_url = !!extensions->GetByURL(new_url); |
+ if (is_extension_url != extension_dispatcher_->is_extension_process()) |
+ return true; |
+ } |
+ |
return !extensions->InSameExtent(old_url, new_url); |
} |