summaryrefslogtreecommitdiffstats
path: root/chrome/common/web_apps.cc
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-26 21:50:23 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-26 21:50:23 +0000
commitbb461530cb42d050c91bacc9ec1a6a48100c6be7 (patch)
tree8b88b90958fdd1d2dcdc666b4414a93ca833c97e /chrome/common/web_apps.cc
parent11740d25bd6ac9c9da9ceb99ba1ba59d3caabeeb (diff)
downloadchromium_src-bb461530cb42d050c91bacc9ec1a6a48100c6be7.zip
chromium_src-bb461530cb42d050c91bacc9ec1a6a48100c6be7.tar.gz
chromium_src-bb461530cb42d050c91bacc9ec1a6a48100c6be7.tar.bz2
Revert "Revert "Finish wiring up chrome.app.install().""
This reverts commit 89f4de523e9c916950f72c264cdefed662849124. TBR=aa@chromium.org git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67474 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/web_apps.cc')
-rw-r--r--chrome/common/web_apps.cc23
1 files changed, 14 insertions, 9 deletions
diff --git a/chrome/common/web_apps.cc b/chrome/common/web_apps.cc
index cde9690..b9c390c 100644
--- a/chrome/common/web_apps.cc
+++ b/chrome/common/web_apps.cc
@@ -205,7 +205,7 @@ bool ParseWebAppFromWebDocument(WebFrame* frame,
return true;
}
-bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
+bool ParseWebAppFromDefinitionFile(Value* definition_value,
WebApplicationInfo* web_app,
string16* error) {
CHECK(web_app->manifest_url.is_valid());
@@ -230,17 +230,22 @@ bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
// and for forward compat with ourselves.
validator.set_default_allow_additional_properties(true);
- if (!validator.Validate(const_cast<DictionaryValue*>(&definition))) {
+ if (!validator.Validate(definition_value)) {
*error = UTF8ToUTF16(
validator.errors()[0].path + ": " + validator.errors()[0].message);
return false;
}
+ // This must be true because the schema requires the root value to be a
+ // dictionary.
+ CHECK(definition_value->IsType(Value::TYPE_DICTIONARY));
+ DictionaryValue* definition = static_cast<DictionaryValue*>(definition_value);
+
// Parse launch URL. It must be a valid URL in the same origin as the
// manifest.
std::string app_url_string;
GURL app_url;
- CHECK(definition.GetString("launch_url", &app_url_string));
+ CHECK(definition->GetString("launch_url", &app_url_string));
if (!(app_url = web_app->manifest_url.Resolve(app_url_string)).is_valid() ||
app_url.GetOrigin() != web_app->manifest_url.GetOrigin()) {
*error = UTF8ToUTF16(WebApplicationInfo::kInvalidLaunchURL);
@@ -250,7 +255,7 @@ bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
// Parse out the permissions if present.
std::vector<std::string> permissions;
ListValue* permissions_value = NULL;
- if (definition.GetList("permissions", &permissions_value)) {
+ if (definition->GetList("permissions", &permissions_value)) {
for (size_t i = 0; i < permissions_value->GetSize(); ++i) {
std::string permission;
CHECK(permissions_value->GetString(i, &permission));
@@ -261,7 +266,7 @@ bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
// Parse out the URLs if present.
std::vector<GURL> urls;
ListValue* urls_value = NULL;
- if (definition.GetList("urls", &urls_value)) {
+ if (definition->GetList("urls", &urls_value)) {
for (size_t i = 0; i < urls_value->GetSize(); ++i) {
std::string url_string;
GURL url;
@@ -280,7 +285,7 @@ bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
// Parse out the icons if present.
std::vector<WebApplicationInfo::IconInfo> icons;
DictionaryValue* icons_value = NULL;
- if (definition.GetDictionary("icons", &icons_value)) {
+ if (definition->GetDictionary("icons", &icons_value)) {
for (DictionaryValue::key_iterator iter = icons_value->begin_keys();
iter != icons_value->end_keys(); ++iter) {
// Ignore unknown properties. Better for forward compat.
@@ -308,9 +313,9 @@ bool ParseWebAppFromDefinitionFile(const DictionaryValue& definition,
}
}
- CHECK(definition.GetString("name", &web_app->title));
- definition.GetString("description", &web_app->description);
- definition.GetString("launch_container", &web_app->launch_container);
+ CHECK(definition->GetString("name", &web_app->title));
+ definition->GetString("description", &web_app->description);
+ definition->GetString("launch_container", &web_app->launch_container);
web_app->app_url = app_url;
web_app->urls = urls;
web_app->permissions = permissions;