OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/extensions/chrome_content_browser_client_extensions_par
t.h" | 5 #include "chrome/browser/extensions/chrome_content_browser_client_extensions_par
t.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 // Hosted apps that have script access to their background page must use | 316 // Hosted apps that have script access to their background page must use |
317 // process per site, since all instances can make synchronous calls to the | 317 // process per site, since all instances can make synchronous calls to the |
318 // background window. Other extensions should use process per site as well. | 318 // background window. Other extensions should use process per site as well. |
319 return true; | 319 return true; |
320 } | 320 } |
321 | 321 |
322 // static | 322 // static |
323 bool ChromeContentBrowserClientExtensionsPart::DoesSiteRequireDedicatedProcess( | 323 bool ChromeContentBrowserClientExtensionsPart::DoesSiteRequireDedicatedProcess( |
324 content::BrowserContext* browser_context, | 324 content::BrowserContext* browser_context, |
325 const GURL& effective_site_url) { | 325 const GURL& effective_site_url) { |
326 if (IsIsolateExtensionsEnabled()) { | 326 const Extension* extension = ExtensionRegistry::Get(browser_context) |
327 const Extension* extension = | 327 ->enabled_extensions() |
328 ExtensionRegistry::Get(browser_context) | 328 .GetExtensionOrAppByURL(effective_site_url); |
329 ->enabled_extensions() | 329 if (!extension) |
330 .GetExtensionOrAppByURL(effective_site_url); | 330 return false; |
331 if (extension) { | |
332 // Always isolate Chrome Web Store. | |
333 if (extension->id() == kWebStoreAppId) | |
334 return true; | |
335 | 331 |
336 // --isolate-extensions should isolate extensions, except for hosted | 332 // Always isolate Chrome Web Store. |
337 // apps. Isolating hosted apps is a good idea, but ought to be a separate | 333 if (extension->id() == kWebStoreAppId) |
338 // knob. | 334 return true; |
339 if (extension->is_hosted_app()) | |
340 return false; | |
341 | 335 |
342 // Isolate all extensions. | 336 // Extensions should be isolated, except for hosted apps. Isolating hosted |
343 return true; | 337 // apps is a good idea, but ought to be a separate knob. |
344 } | 338 if (extension->is_hosted_app()) |
345 } | 339 return false; |
346 return false; | 340 |
| 341 // Isolate all extensions. |
| 342 return true; |
347 } | 343 } |
348 | 344 |
349 // static | 345 // static |
350 bool ChromeContentBrowserClientExtensionsPart::ShouldLockToOrigin( | 346 bool ChromeContentBrowserClientExtensionsPart::ShouldLockToOrigin( |
351 content::BrowserContext* browser_context, | 347 content::BrowserContext* browser_context, |
352 const GURL& effective_site_url) { | 348 const GURL& effective_site_url) { |
353 // https://crbug.com/160576 workaround: Origin lock to the chrome-extension:// | 349 // https://crbug.com/160576 workaround: Origin lock to the chrome-extension:// |
354 // scheme for a hosted app would kill processes on legitimate requests for the | 350 // scheme for a hosted app would kill processes on legitimate requests for the |
355 // app's cookies. | 351 // app's cookies. |
356 if (effective_site_url.SchemeIs(extensions::kExtensionScheme)) { | 352 if (effective_site_url.SchemeIs(extensions::kExtensionScheme)) { |
357 const Extension* extension = | 353 const Extension* extension = |
358 ExtensionRegistry::Get(browser_context) | 354 ExtensionRegistry::Get(browser_context) |
359 ->enabled_extensions() | 355 ->enabled_extensions() |
360 .GetExtensionOrAppByURL(effective_site_url); | 356 .GetExtensionOrAppByURL(effective_site_url); |
361 if (extension && extension->is_hosted_app()) | 357 if (extension && extension->is_hosted_app()) |
362 return false; | 358 return false; |
363 | 359 |
364 // http://crbug.com/600441 workaround: Extension process reuse, implemented | 360 // http://crbug.com/600441 workaround: Extension process reuse, implemented |
365 // in ShouldTryToUseExistingProcessHost(), means that extension processes | 361 // in ShouldTryToUseExistingProcessHost(), means that extension processes |
366 // aren't always actually dedicated to a single origin, even in | 362 // aren't always actually dedicated to a single origin. |
367 // --isolate-extensions. TODO(nick): Fix this. | 363 // TODO(nick): Fix this. |
368 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 364 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
369 ::switches::kSitePerProcess)) | 365 ::switches::kSitePerProcess)) |
370 return false; | 366 return false; |
371 } | 367 } |
372 return true; | 368 return true; |
373 } | 369 } |
374 | 370 |
375 // static | 371 // static |
376 bool ChromeContentBrowserClientExtensionsPart::CanCommitURL( | 372 bool ChromeContentBrowserClientExtensionsPart::CanCommitURL( |
377 content::RenderProcessHost* process_host, const GURL& url) { | 373 content::RenderProcessHost* process_host, const GURL& url) { |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 command_line->AppendSwitch(switches::kExtensionProcess); | 867 command_line->AppendSwitch(switches::kExtensionProcess); |
872 } | 868 } |
873 } | 869 } |
874 | 870 |
875 void ChromeContentBrowserClientExtensionsPart::ResourceDispatcherHostCreated() { | 871 void ChromeContentBrowserClientExtensionsPart::ResourceDispatcherHostCreated() { |
876 content::ResourceDispatcherHost::Get()->RegisterInterceptor( | 872 content::ResourceDispatcherHost::Get()->RegisterInterceptor( |
877 "Origin", kExtensionScheme, base::Bind(&OnHttpHeaderReceived)); | 873 "Origin", kExtensionScheme, base::Bind(&OnHttpHeaderReceived)); |
878 } | 874 } |
879 | 875 |
880 } // namespace extensions | 876 } // namespace extensions |
OLD | NEW |