Chromium Code Reviews| 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() { |