Chromium Code Reviews| Index: chrome/browser/extensions/error_console/error_console.cc |
| diff --git a/chrome/browser/extensions/error_console/error_console.cc b/chrome/browser/extensions/error_console/error_console.cc |
| index 9fc50894cca3c21d190f7e69ac3749fe500e5408..889e456254c2bd7bad38f2baff1c4b2d35ea2e77 100644 |
| --- a/chrome/browser/extensions/error_console/error_console.cc |
| +++ b/chrome/browser/extensions/error_console/error_console.cc |
| @@ -16,10 +16,12 @@ |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/common/chrome_version_info.h" |
| #include "chrome/common/pref_names.h" |
| #include "content/public/browser/notification_details.h" |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/notification_source.h" |
| +#include "extensions/browser/extension_registry.h" |
| #include "extensions/browser/extension_system.h" |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension.h" |
| @@ -29,6 +31,7 @@ |
| namespace extensions { |
| namespace { |
| + |
| // The key into the Extension prefs for an Extension's specific reporting |
| // settings. |
| const char kStoreExtensionErrorsPref[] = "store_extension_errors"; |
| @@ -36,7 +39,11 @@ const char kStoreExtensionErrorsPref[] = "store_extension_errors"; |
| // The default mask (for the time being) is to report everything. |
| const int32 kDefaultMask = (1 << ExtensionError::MANIFEST_ERROR) | |
| (1 << ExtensionError::RUNTIME_ERROR); |
| -} |
| + |
| +const char kAppsDeveloperToolsExtensionId[] = |
| + "ohmmkhmmmpcnpikjeljgnaoabkaalbgc"; |
| + |
| +} // namespace |
| void ErrorConsole::Observer::OnErrorConsoleDestroyed() { |
| } |
| @@ -49,23 +56,19 @@ ErrorConsole::ErrorConsole(Profile* profile, |
| return; |
| #endif |
| - // If we don't have the necessary FeatureSwitch enabled, then return |
| - // immediately. Since we never register for any notifications, this ensures |
| - // the ErrorConsole will never be enabled. |
| - if (!FeatureSwitch::error_console()->IsEnabled()) |
| - return; |
| - |
| pref_registrar_.Init(profile_->GetPrefs()); |
| pref_registrar_.Add(prefs::kExtensionsUIDeveloperMode, |
| base::Bind(&ErrorConsole::OnPrefChanged, |
| base::Unretained(this))); |
| - if (profile_->GetPrefs()->GetBoolean(prefs::kExtensionsUIDeveloperMode)) |
| - Enable(extension_service); |
| + ExtensionRegistry::Get(profile_)->AddObserver(this); |
|
not at google - send to devlin
2014/03/31 18:52:43
use ScopedObserver so that you don't need to remov
Devlin
2014/03/31 21:18:24
Done.
|
| + |
| + CheckEnabled(); |
| } |
| ErrorConsole::~ErrorConsole() { |
| FOR_EACH_OBSERVER(Observer, observers_, OnErrorConsoleDestroyed()); |
| + ExtensionRegistry::Get(profile_)->RemoveObserver(this); |
| } |
| // static |
| @@ -143,13 +146,24 @@ void ErrorConsole::RemoveObserver(Observer* observer) { |
| observers_.RemoveObserver(observer); |
| } |
| -void ErrorConsole::OnPrefChanged() { |
| - bool developer_mode = |
| - profile_->GetPrefs()->GetBoolean(prefs::kExtensionsUIDeveloperMode); |
| +bool ErrorConsole::IsEnabledForChromeExtensionsPage() const { |
| + return profile_->GetPrefs()->GetBoolean(prefs::kExtensionsUIDeveloperMode) && |
| + (FeatureSwitch::error_console()->IsEnabled() || |
| + chrome::VersionInfo::GetChannel() <= |
|
not at google - send to devlin
2014/03/31 18:52:43
maybe use FeatureChannel::GetCurrentChannel() here
Devlin
2014/03/31 21:18:24
Done.
|
| + chrome::VersionInfo::CHANNEL_DEV); |
| +} |
| - if (developer_mode && !enabled_) |
| +bool ErrorConsole::IsEnabledForAppsDeveloperTools() const { |
| + return ExtensionRegistry::Get(profile_)->enabled_extensions() |
| + .Contains(kAppsDeveloperToolsExtensionId); |
| +} |
| + |
| +void ErrorConsole::CheckEnabled() { |
| + bool should_be_enabled = IsEnabledForChromeExtensionsPage() || |
| + IsEnabledForAppsDeveloperTools(); |
| + if (should_be_enabled && !enabled_) |
| Enable(ExtensionSystem::Get(profile_)->extension_service()); |
|
not at google - send to devlin
2014/03/31 18:52:43
just let Enable() fetch the ExtensionService from
Devlin
2014/03/31 21:18:24
Done.
|
| - else if (!developer_mode && enabled_) |
| + if (!should_be_enabled && enabled_) |
| Disable(); |
| } |
| @@ -191,6 +205,18 @@ void ErrorConsole::Disable() { |
| enabled_ = false; |
| } |
| +void ErrorConsole::OnPrefChanged() { |
| + CheckEnabled(); |
| +} |
| + |
| +void ErrorConsole::OnExtensionUnloaded(const Extension* extension) { |
| + CheckEnabled(); |
| +} |
| + |
| +void ErrorConsole::OnExtensionLoaded(const Extension* extension) { |
| + CheckEnabled(); |
| +} |
| + |
| void ErrorConsole::AddManifestErrorsForExtension(const Extension* extension) { |
| const std::vector<InstallWarning>& warnings = |
| extension->install_warnings(); |