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(); |