diff options
-rw-r--r-- | chrome/browser/autocomplete/extension_app_provider.cc | 4 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_service.cc | 9 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_service.h | 3 |
3 files changed, 16 insertions, 0 deletions
diff --git a/chrome/browser/autocomplete/extension_app_provider.cc b/chrome/browser/autocomplete/extension_app_provider.cc index 614cb1f..0abe36b 100644 --- a/chrome/browser/autocomplete/extension_app_provider.cc +++ b/chrome/browser/autocomplete/extension_app_provider.cc @@ -95,6 +95,10 @@ void ExtensionAppProvider::RefreshAppList() { for (ExtensionList::const_iterator app = extensions->begin(); app != extensions->end(); ++app) { if ((*app)->is_app() && (*app)->GetFullLaunchURL().is_valid()) { + if (profile_->IsOffTheRecord() && + !extension_service->CanLoadInIncognito((*app))) + continue; + extension_apps_.push_back( std::make_pair((*app)->name(), (*app)->GetFullLaunchURL().spec())); diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index e9a0d3c..dc29954 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -1467,6 +1467,15 @@ bool ExtensionService::CanCrossIncognito(const Extension* extension) { !extension->incognito_split_mode(); } +bool ExtensionService::CanLoadInIncognito(const Extension* extension) const { + if (extension->is_hosted_app()) + return true; + // Packaged apps and regular extensions need to be enabled specifically for + // incognito (and split mode should be set). + return extension->incognito_split_mode() && + IsIncognitoEnabled(extension->id()); +} + bool ExtensionService::AllowFileAccess(const Extension* extension) { return (CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableExtensionsFileAccessCheck) || diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 95b3cf3..ff2c599 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -211,6 +211,9 @@ class ExtensionService // sub-profile (incognito to original profile, or vice versa). bool CanCrossIncognito(const Extension* extension); + // Returns true if the given extension can be loaded in incognito. + bool CanLoadInIncognito(const Extension* extension) const; + // Whether this extension can inject scripts into pages with file URLs. bool AllowFileAccess(const Extension* extension); // Will reload the extension since this permission is applied at loading time |