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

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 merge conflict. 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
« no previous file with comments | « chrome/renderer/chrome_content_renderer_client.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..ae11acf28a19df9344bcb344932c4936e8c5ec4f 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -729,14 +729,26 @@ void ChromeContentRendererClient::SetExtensionDispatcher(
extension_dispatcher_.reset(extension_dispatcher);
}
+const Extension* ChromeContentRendererClient::GetNonBookmarkAppExtension(
+ const ExtensionSet* extensions, const GURL& url) {
+ // Exclude bookmark apps, which do not use the app process model.
+ const Extension* extension = extensions->GetByURL(url);
+ if (extension && extension->from_bookmark())
+ extension = NULL;
+ return extension;
+}
+
bool ChromeContentRendererClient::CrossesExtensionExtents(
WebFrame* frame,
const GURL& new_url,
bool is_initial_navigation) {
const ExtensionSet* extensions = extension_dispatcher_->extensions();
- bool is_extension_url = !!extensions->GetByURL(new_url);
GURL old_url(frame->top()->document().url());
+ // Determine if the new URL is an extension (excluding bookmark apps).
+ const Extension* new_url_extension = GetNonBookmarkAppExtension(extensions,
+ new_url);
+
// 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.
if (is_initial_navigation && old_url.is_empty() && frame->opener()) {
@@ -746,7 +758,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 +770,21 @@ 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 = GetNonBookmarkAppExtension(extensions,
+ old_url);
+
// 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() {
« no previous file with comments | « chrome/renderer/chrome_content_renderer_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698