Index: mojo/services/catalog/reader.cc |
diff --git a/mojo/services/catalog/reader.cc b/mojo/services/catalog/reader.cc |
index e26b778ed3414623b38ca28b7a4e359af66cd8e6..caebb0cfc37df3ec9b3047f9f7d40938a2ffceb2 100644 |
--- a/mojo/services/catalog/reader.cc |
+++ b/mojo/services/catalog/reader.cc |
@@ -5,6 +5,7 @@ |
#include "mojo/services/catalog/reader.h" |
#include "base/json/json_file_value_serializer.h" |
+#include "base/json/json_reader.h" |
#include "base/location.h" |
#include "base/task_runner_util.h" |
#include "mojo/services/catalog/entry.h" |
@@ -13,6 +14,15 @@ |
namespace catalog { |
namespace { |
+scoped_ptr<Entry> GetEntryFromManifest(scoped_ptr<base::Value> manifest) { |
+ if (manifest) { |
+ const base::DictionaryValue* dictionary = nullptr; |
+ CHECK(manifest->GetAsDictionary(&dictionary)); |
+ return Entry::Deserialize(*dictionary); |
+ } |
+ return nullptr; |
+} |
+ |
scoped_ptr<base::Value> ReadManifest(const base::FilePath& manifest_path) { |
JSONFileValueDeserializer deserializer(manifest_path); |
int error = 0; |
@@ -32,13 +42,7 @@ void OnReadManifest(base::WeakPtr<Reader> reader, |
callback.Run(nullptr); |
return; |
} |
- scoped_ptr<Entry> entry; |
- if (manifest) { |
- const base::DictionaryValue* dictionary = nullptr; |
- CHECK(manifest->GetAsDictionary(&dictionary)); |
- entry = Entry::Deserialize(*dictionary); |
- } |
- callback.Run(std::move(entry)); |
+ callback.Run(GetEntryFromManifest(std::move(manifest))); |
} |
} // namespace |
@@ -65,6 +69,10 @@ void Reader::Read(const std::string& name, |
base::Bind(&OnReadManifest, weak_factory_.GetWeakPtr(), name, callback)); |
} |
+scoped_ptr<Entry> Reader::Parse(const base::StringPiece& manifest_contents) { |
+ return GetEntryFromManifest(base::JSONReader::Read(manifest_contents)); |
+} |
+ |
base::FilePath Reader::GetManifestPath(const std::string& name) const { |
// TODO(beng): think more about how this should be done for exe targets. |
std::string type = mojo::GetNameType(name); |