| Index: chrome/common/json_value_serializer.cc
|
| diff --git a/chrome/common/json_value_serializer.cc b/chrome/common/json_value_serializer.cc
|
| index 1e739e6bde24e31c612bb7b00859f6710d1734d0..df92afda457d54056e501086bfb2ec575eec32c4 100644
|
| --- a/chrome/common/json_value_serializer.cc
|
| +++ b/chrome/common/json_value_serializer.cc
|
| @@ -9,6 +9,11 @@
|
| #include "base/json/json_writer.h"
|
| #include "base/string_util.h"
|
|
|
| +const char* JSONFileValueSerializer::kAccessDenied = "Access denied.";
|
| +const char* JSONFileValueSerializer::kCannotReadFile = "Can't read file.";
|
| +const char* JSONFileValueSerializer::kFileLocked = "File locked.";
|
| +const char* JSONFileValueSerializer::kNoSuchFile = "File doesn't exist.";
|
| +
|
| JSONStringValueSerializer::~JSONStringValueSerializer() {}
|
|
|
| bool JSONStringValueSerializer::Serialize(const Value& root) {
|
| @@ -19,13 +24,15 @@ bool JSONStringValueSerializer::Serialize(const Value& root) {
|
| return true;
|
| }
|
|
|
| -Value* JSONStringValueSerializer::Deserialize(std::string* error_message) {
|
| +Value* JSONStringValueSerializer::Deserialize(int* error_code,
|
| + std::string* error_str) {
|
| if (!json_string_)
|
| return NULL;
|
|
|
| return base::JSONReader::ReadAndReturnError(*json_string_,
|
| allow_trailing_comma_,
|
| - error_message);
|
| + error_code,
|
| + error_str);
|
| }
|
|
|
| /******* File Serializer *******/
|
| @@ -47,11 +54,55 @@ bool JSONFileValueSerializer::Serialize(const Value& root) {
|
| return true;
|
| }
|
|
|
| -Value* JSONFileValueSerializer::Deserialize(std::string* error_message) {
|
| +int JSONFileValueSerializer::ReadFileToString(std::string* json_string) {
|
| + DCHECK(json_string);
|
| + if (!file_util::ReadFileToString(json_file_path_, json_string)) {
|
| +#if defined(OS_WIN)
|
| + int error = ::GetLastError();
|
| + if (error == ERROR_SHARING_VIOLATION || error == ERROR_LOCK_VIOLATION) {
|
| + return JSON_FILE_LOCKED;
|
| + } else if (error == ERROR_ACCESS_DENIED) {
|
| + return JSON_ACCESS_DENIED;
|
| + }
|
| +#endif
|
| + if (!file_util::PathExists(json_file_path_))
|
| + return JSON_NO_SUCH_FILE;
|
| + else
|
| + return JSON_CANNOT_READ_FILE;
|
| + }
|
| + return JSON_NO_ERROR;
|
| +}
|
| +
|
| +const char* JSONFileValueSerializer::GetErrorMessageForCode(int error_code) {
|
| + switch (error_code) {
|
| + case JSON_NO_ERROR:
|
| + return "";
|
| + case JSON_ACCESS_DENIED:
|
| + return kAccessDenied;
|
| + case JSON_CANNOT_READ_FILE:
|
| + return kCannotReadFile;
|
| + case JSON_FILE_LOCKED:
|
| + return kFileLocked;
|
| + case JSON_NO_SUCH_FILE:
|
| + return kNoSuchFile;
|
| + default:
|
| + NOTREACHED();
|
| + return "";
|
| + }
|
| +}
|
| +
|
| +Value* JSONFileValueSerializer::Deserialize(int* error_code,
|
| + std::string* error_str) {
|
| std::string json_string;
|
| - if (!file_util::ReadFileToString(json_file_path_, &json_string)) {
|
| + int error = ReadFileToString(&json_string);
|
| + if (error != JSON_NO_ERROR) {
|
| + if (error_code)
|
| + *error_code = error;
|
| + if (error_str)
|
| + *error_str = GetErrorMessageForCode(error);
|
| return NULL;
|
| }
|
| +
|
| JSONStringValueSerializer serializer(json_string);
|
| - return serializer.Deserialize(error_message);
|
| + return serializer.Deserialize(error_code, error_str);
|
| }
|
|
|