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

Unified Diff: chrome/renderer/chrome_content_renderer_client.cc

Issue 8585016: Don't use process isolation for bookmark apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix bug with old_url. Created 9 years, 1 month 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/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 6d5817a8fdbfb482f8748e949cfcaeb8ae076176..c528de8a0b4b735d90ab547a10aa5121e4fe752c 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -734,8 +734,13 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(
const GURL& new_url,
bool is_initial_navigation) {
const ExtensionSet* extensions = extension_dispatcher_->extensions();
- bool is_extension_url = !!extensions->GetByURL(new_url);
+
+ // Determine if the new URL is an extension.
+ // Exclude bookmark apps, which do not use the app process model.
GURL old_url(frame->top()->document().url());
+ const Extension* new_url_extension = extensions->GetByURL(new_url);
Aaron Boodman 2011/11/18 18:19:52 Pull this into a helper, so that you don't have to
Charlie Reis 2011/11/18 19:45:42 Done.
+ if (new_url_extension && new_url_extension->from_bookmark())
+ new_url_extension = NULL;
// If old_url is still empty and this is an initial navigation, then this is
// a window.open operation. We should look at the opener URL.
@@ -746,7 +751,7 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(
GURL opener_url = frame->opener()->document().url();
bool opener_is_extension_url = !!extensions->GetByURL(opener_url);
WebSecurityOrigin opener = frame->opener()->document().securityOrigin();
- if (!is_extension_url &&
+ if (!new_url_extension &&
!opener_is_extension_url &&
extension_dispatcher_->is_extension_process() &&
opener.canRequest(WebURL(new_url)))
@@ -758,15 +763,22 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(
old_url = frame->top()->opener()->top()->document().url();
}
+ // Determine if the old URL is an extension (excluding bookmark apps).
+ const Extension* old_url_extension = extensions->GetByURL(old_url);
+ if (old_url_extension && old_url_extension->from_bookmark())
+ old_url_extension = NULL;
+
// TODO(creis): Temporary workaround for crbug.com/59285: Only return true if
// we would enter an extension app's extent from a non-app, or if we leave an
// extension with no web extent. We avoid swapping processes to exit a hosted
// app for now, since we do not yet support postMessage calls from outside the
// app back into it (e.g., as in Facebook OAuth 2.0).
- bool old_url_is_hosted_app = extensions->GetByURL(old_url) &&
- !extensions->GetByURL(old_url)->web_extent().is_empty();
- return !extensions->InSameExtent(old_url, new_url) &&
- !old_url_is_hosted_app;
+ bool old_url_is_hosted_app = old_url_extension &&
+ !old_url_extension->web_extent().is_empty();
+ if (old_url_is_hosted_app)
+ return false;
+
+ return old_url_extension != new_url_extension;
}
void ChromeContentRendererClient::OnPurgeMemory() {

Powered by Google App Engine
This is Rietveld 408576698