Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 7a283b58138b0caa20f76fe9d913e34e5135b120..46ddb77bd244b70ec9440edda53a4dffc945c18c 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -13,6 +13,8 @@ |
#include <utility> |
#include "base/command_line.h" |
+#include "base/debug/alias.h" |
+#include "base/debug/dump_without_crashing.h" |
#include "base/location.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/single_thread_task_runner.h" |
@@ -1481,6 +1483,26 @@ void ExtensionService::OnLoadedInstalledExtensions() { |
} |
void ExtensionService::AddExtension(const Extension* extension) { |
+ if (!Manifest::IsValidLocation(extension->location())) { |
+ // TODO(devlin): We should *never* add an extension with an invalid |
+ // location, but some bugs (e.g. crbug.com/692069) seem to indicate we do. |
+ // Track down the cases when this can happen, and remove this |
+ // DumpWithoutCrashing() (possibly replacing it with a CHECK). |
+ NOTREACHED(); |
+ char extension_id_copy[33]; |
+ base::strlcpy(extension_id_copy, extension->id().c_str(), |
+ arraysize(extension_id_copy)); |
+ Manifest::Location location = extension->location(); |
+ int creation_flags = extension->creation_flags(); |
+ Manifest::Type type = extension->manifest()->type(); |
+ base::debug::Alias(extension_id_copy); |
+ base::debug::Alias(&location); |
+ base::debug::Alias(&creation_flags); |
+ base::debug::Alias(&type); |
+ base::debug::DumpWithoutCrashing(); |
+ return; |
+ } |
+ |
// TODO(jstritar): We may be able to get rid of this branch by overriding the |
// default extension state to DISABLED when the --disable-extensions flag |
// is set (http://crbug.com/29067). |