Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/app/breakpad_mac.h" | 8 #include "chrome/app/breakpad_mac.h" |
| 9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/character_encoding.h" | 10 #include "chrome/browser/character_encoding.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 91 profile->GetExtensionProcessManager(); | 91 profile->GetExtensionProcessManager(); |
| 92 CHECK(process_manager); | 92 CHECK(process_manager); |
| 93 | 93 |
| 94 // This can happen if somebody typos a chrome-extension:// URL. | 94 // This can happen if somebody typos a chrome-extension:// URL. |
| 95 const Extension* extension = service->GetExtensionByURL(site); | 95 const Extension* extension = service->GetExtensionByURL(site); |
| 96 if (!extension) | 96 if (!extension) |
| 97 return; | 97 return; |
| 98 | 98 |
| 99 site_instance->GetProcess()->mark_is_extension_process(); | 99 site_instance->GetProcess()->mark_is_extension_process(); |
| 100 | 100 |
| 101 // Register the association between extension and process with | |
| 102 // ExtensionProcessManager. | |
| 103 process_manager->RegisterExtensionProcess(extension->id(), process->id()); | |
| 104 | |
| 105 if (extension->is_app()) { | 101 if (extension->is_app()) { |
| 106 render_view_host->Send( | 102 render_view_host->Send( |
| 107 new ExtensionMsg_ActivateApplication(extension->id())); | 103 new ExtensionMsg_ActivateApplication(extension->id())); |
| 108 // Record which, if any, installed app is associated with this process. | 104 // Record which, if any, installed app is associated with this process. |
| 109 // TODO(aa): Totally lame to store this state in a global map in extension | 105 // TODO(aa): Totally lame to store this state in a global map in extension |
| 110 // service. Can we get it from EPM instead? | 106 // service. Can we get it from EPM instead? |
| 111 service->SetInstalledAppForRenderer(process->id(), extension); | 107 service->SetInstalledAppForRenderer(process->id(), extension); |
| 112 } | 108 } |
| 113 | 109 |
| 114 // Some extensions use chrome:// URLs. | 110 // Some extensions use chrome:// URLs. |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 187 const Extension* extension = | 183 const Extension* extension = |
| 188 profile->GetExtensionService()->GetExtensionByWebExtent(url); | 184 profile->GetExtensionService()->GetExtensionByWebExtent(url); |
| 189 if (!extension) | 185 if (!extension) |
| 190 return url; | 186 return url; |
| 191 | 187 |
| 192 // If the URL is part of an extension's web extent, convert it to an | 188 // If the URL is part of an extension's web extent, convert it to an |
| 193 // extension URL. | 189 // extension URL. |
| 194 return extension->GetResourceURL(url.path()); | 190 return extension->GetResourceURL(url.path()); |
| 195 } | 191 } |
| 196 | 192 |
| 193 bool ChromeContentBrowserClient::ShouldUseProcessPerSite(Profile* profile, | |
| 194 const GURL& url) { | |
|
Matt Perry
2011/07/08 22:18:35
rename url to effective_url to clarify expectation
Charlie Reis
2011/07/08 22:49:50
Done.
| |
| 195 // Non-extension URLs should generally use process-per-site-instance. | |
| 196 // We expect url to be the effective URL, so hosted apps URLs should have | |
| 197 // an extension scheme by now. | |
| 198 if (!url.SchemeIs(chrome::kExtensionScheme)) | |
| 199 return false; | |
| 200 | |
| 201 if (!profile || !profile->GetExtensionService()) | |
| 202 return false; | |
| 203 | |
| 204 const Extension* extension = | |
| 205 profile->GetExtensionService()->GetExtensionByURL(url); | |
| 206 if (!extension) | |
| 207 return false; | |
| 208 | |
| 209 // If the URL is part of a hosted app that does not have the background | |
| 210 // permission, we want to give each instance its own process to improve | |
| 211 // responsiveness. | |
| 212 if (extension->GetType() == Extension::TYPE_HOSTED_APP && | |
| 213 !extension->HasAPIPermission(ExtensionAPIPermission::kBackground)) | |
| 214 return false; | |
| 215 | |
| 216 // Hosted apps that have the background permission must use process per site, | |
| 217 // since all instances can make synchronous calls to the background window. | |
| 218 // Other extensions should use process per site as well. | |
| 219 return true; | |
| 220 } | |
| 221 | |
| 197 bool ChromeContentBrowserClient::IsURLSameAsAnySiteInstance(const GURL& url) { | 222 bool ChromeContentBrowserClient::IsURLSameAsAnySiteInstance(const GURL& url) { |
| 198 return url == GURL(chrome::kChromeUICrashURL) || | 223 return url == GURL(chrome::kChromeUICrashURL) || |
| 199 url == GURL(chrome::kChromeUIKillURL) || | 224 url == GURL(chrome::kChromeUIKillURL) || |
| 200 url == GURL(chrome::kChromeUIHangURL) || | 225 url == GURL(chrome::kChromeUIHangURL) || |
| 201 url == GURL(chrome::kChromeUIShorthangURL); | 226 url == GURL(chrome::kChromeUIShorthangURL); |
| 202 } | 227 } |
| 203 | 228 |
| 204 std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( | 229 std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( |
| 205 const std::string& alias_name) { | 230 const std::string& alias_name) { |
| 206 return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); | 231 return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 630 #if defined(USE_NSS) | 655 #if defined(USE_NSS) |
| 631 crypto::CryptoModuleBlockingPasswordDelegate* | 656 crypto::CryptoModuleBlockingPasswordDelegate* |
| 632 ChromeContentBrowserClient::GetCryptoPasswordDelegate( | 657 ChromeContentBrowserClient::GetCryptoPasswordDelegate( |
| 633 const GURL& url) { | 658 const GURL& url) { |
| 634 return browser::NewCryptoModuleBlockingDialogDelegate( | 659 return browser::NewCryptoModuleBlockingDialogDelegate( |
| 635 browser::kCryptoModulePasswordKeygen, url.host()); | 660 browser::kCryptoModulePasswordKeygen, url.host()); |
| 636 } | 661 } |
| 637 #endif | 662 #endif |
| 638 | 663 |
| 639 } // namespace chrome | 664 } // namespace chrome |
| OLD | NEW |