In external extension json file, integer for version number fails with a poor warning message.

Now, an external_version with a non-string value will print out a better error message, disambiguating from the case that the key is missing altogether.

BUG=134182
TEST=manual


Review URL: https://chromiumcodereview.appspot.com/10701021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@145356 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/external_extension_provider_impl.cc b/chrome/browser/extensions/external_extension_provider_impl.cc
index ea245c3..09e34ea 100644
--- a/chrome/browser/extensions/external_extension_provider_impl.cc
+++ b/chrome/browser/extensions/external_extension_provider_impl.cc
@@ -113,12 +113,25 @@
     }
 
     FilePath::StringType external_crx;
+    Value* external_version_value;
     std::string external_version;
     std::string external_update_url;
 
     bool has_external_crx = extension->GetString(kExternalCrx, &external_crx);
-    bool has_external_version = extension->GetString(kExternalVersion,
-                                                     &external_version);
+
+    bool has_external_version = false;
+    if (extension->Get(kExternalVersion, &external_version_value)) {
+      if (external_version_value->IsType(Value::TYPE_STRING)) {
+        external_version_value->GetAsString(&external_version);
+        has_external_version = true;
+      } else {
+        LOG(WARNING) << "Malformed extension dictionary for extension: "
+                     << extension_id.c_str() << ". " << kExternalVersion
+                     << " value must be a string.";
+        continue;
+      }
+    }
+
     bool has_external_update_url = extension->GetString(kExternalUpdateUrl,
                                                         &external_update_url);
     if (has_external_crx != has_external_version) {