- if (!manifest_->GetString(version_key, &version_str) &&
- package_type_ == Package::XPK) {
- *error = base::ASCIIToUTF16(errors::kInvalidVersion);
- return false;
+ version_.reset(new base::Version());
+
+ if (manifest_type() == Manifest::TYPE_WIDGET) {
+ bool ok = manifest_->GetString(widget_keys::kVersionKey, &version_str);
+ if (!ok) {
+ *error = base::ASCIIToUTF16(errors::kInvalidVersion);
+ return true;
+ }
+
+ version_.reset(new base::Version(version_str));
+ return true;
+ }
+
+ // W3C Manifest (XPK and hosted):
+
+ bool hasDeprecatedKey = manifest_->HasKey(keys::kDeprecatedVersionKey);
+ bool hasKey = manifest_->HasKey(keys::kXWalkVersionKey);
+
+ if (!hasKey && !hasDeprecatedKey) {
+ // xwalk_version is optional.
+ return true;
+ }
+
+ bool ok = false;
+ if (hasKey) {
+ if (hasDeprecatedKey) {
+ LOG(WARNING) << "Deprecated key '" << keys::kDeprecatedVersionKey
+ << "' found in addition to '" << keys::kXWalkVersionKey
+ << "'. Consider removing.";
+ }
+ ok = manifest_->GetString(keys::kXWalkVersionKey, &version_str);
+ }
+
+ if (!hasKey && hasDeprecatedKey) {
+ LOG(WARNING) << "Deprecated key '" << keys::kDeprecatedVersionKey
+ << "' found. Please migrate to using '" << keys::kXWalkVersionKey
+ << "' instead.";
+ ok = manifest_->GetString(keys::kDeprecatedVersionKey, &version_str);