1 // Copyright (c) 2014 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "xwalk/application/common/manifest_handlers/tizen_metadata_handler.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "base/values.h"
12 #include "xwalk/application/common/application_manifest_constants.h"
16 namespace keys = application_widget_keys;
18 typedef std::pair<std::string, std::string> MetaDataPair;
19 typedef std::map<std::string, std::string> MetaDataMap;
20 typedef std::map<std::string, std::string>::const_iterator MetaDataIter;
24 MetaDataPair ParseMetaDataItem(const base::DictionaryValue* dict,
25 base::string16* error) {
26 DCHECK(dict && dict->IsType(base::Value::TYPE_DICTIONARY));
28 if (!dict->GetString(keys::kTizenMetaDataNameKey, &result.first) ||
29 !dict->GetString(keys::kTizenMetaDataValueKey, &result.second)) {
30 *error = base::ASCIIToUTF16("Invalid key/value of tizen metaData.");
37 namespace application {
39 TizenMetaDataInfo::TizenMetaDataInfo() {}
41 TizenMetaDataInfo::~TizenMetaDataInfo() {}
43 bool TizenMetaDataInfo::HasKey(const std::string& key) const {
44 return metadata_.find(key) != metadata_.end();
47 std::string TizenMetaDataInfo::GetValue(const std::string& key) const {
48 MetaDataIter it = metadata_.find(key);
49 if (it != metadata_.end())
51 return std::string("");
54 void TizenMetaDataInfo::SetValue(const std::string& key,
55 const std::string& value) {
56 metadata_.insert(MetaDataPair(key, value));
59 TizenMetaDataHandler::TizenMetaDataHandler() {}
61 TizenMetaDataHandler::~TizenMetaDataHandler() {}
63 bool TizenMetaDataHandler::Parse(scoped_refptr<ApplicationData> application,
64 base::string16* error) {
65 scoped_ptr<TizenMetaDataInfo> metadata_info(new TizenMetaDataInfo);
66 const Manifest* manifest = application->GetManifest();
69 base::Value* metadata_value = NULL;
70 if (!manifest->Get(keys::kTizenMetaDataKey, &metadata_value)) {
71 *error = base::ASCIIToUTF16("Failed to get value of tizen metaData");
74 MetaDataPair metadata_item;
75 if (metadata_value && metadata_value->IsType(base::Value::TYPE_DICTIONARY)) {
76 base::DictionaryValue* dict;
77 metadata_value->GetAsDictionary(&dict);
78 metadata_item = ParseMetaDataItem(dict, error);
79 metadata_info->SetValue(metadata_item.first, metadata_item.second);
80 } else if (metadata_value && metadata_value->IsType(base::Value::TYPE_LIST)) {
81 base::ListValue* list;
82 metadata_value->GetAsList(&list);
84 for (base::ListValue::iterator it = list->begin();
85 it != list->end(); ++it) {
86 base::DictionaryValue* dict;
87 (*it)->GetAsDictionary(&dict);
88 metadata_item = ParseMetaDataItem(dict, error);
89 metadata_info->SetValue(metadata_item.first, metadata_item.second);
93 application->SetManifestData(keys::kTizenMetaDataKey,
94 metadata_info.release());
98 std::vector<std::string> TizenMetaDataHandler::Keys() const {
99 return std::vector<std::string>(1, keys::kTizenMetaDataKey);
102 } // namespace application