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/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index e55a254..ce15b963 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -3894,6 +3894,7 @@
   // - One that contains a malformed version.
   // - One that has an invalid id.
   // - One that has a non-dictionary value.
+  // - One that has an integer 'external_version' instead of a string.
   // The final extension is valid, and we check that it is read to make sure
   // failures don't stop valid records from being read.
   json_data =
@@ -3924,6 +3925,10 @@
       "  },"
       "  \"This is not a valid id!\": {},"
       "  \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\": true,"
+      "  \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\": {"
+      "    \"external_crx\": \"RandomExtension4.crx\","
+      "    \"external_version\": 1.0"
+      "  },"
       "  \"pppppppppppppppppppppppppppppppp\": {"
       "    \"external_crx\": \"RandomValidExtension.crx\","
       "    \"external_version\": \"1.0\""
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) {