 Chromium Code Reviews
 Chromium Code Reviews Issue 2899743002:
  Remove raw base::DictionaryValue::Set in //extensions  (Closed)
    
  
    Issue 2899743002:
  Remove raw base::DictionaryValue::Set in //extensions  (Closed) 
  | OLD | NEW | 
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "extensions/browser/computed_hashes.h" | 5 #include "extensions/browser/computed_hashes.h" | 
| 6 | 6 | 
| 7 #include <memory> | 7 #include <memory> | 
| 8 #include <utility> | 8 #include <utility> | 
| 9 | 9 | 
| 10 #include "base/base64.h" | 10 #include "base/base64.h" | 
| 11 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" | 
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" | 
| 13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" | 
| 14 #include "base/json/json_writer.h" | 14 #include "base/json/json_writer.h" | 
| 15 #include "base/memory/ptr_util.h" | |
| 15 #include "base/stl_util.h" | 16 #include "base/stl_util.h" | 
| 16 #include "base/values.h" | 17 #include "base/values.h" | 
| 17 #include "crypto/secure_hash.h" | 18 #include "crypto/secure_hash.h" | 
| 18 #include "crypto/sha2.h" | 19 #include "crypto/sha2.h" | 
| 19 | 20 | 
| 20 namespace { | 21 namespace { | 
| 21 const char kBlockHashesKey[] = "block_hashes"; | 22 const char kBlockHashesKey[] = "block_hashes"; | 
| 22 const char kBlockSizeKey[] = "block_size"; | 23 const char kBlockSizeKey[] = "block_size"; | 
| 23 const char kFileHashesKey[] = "file_hashes"; | 24 const char kFileHashesKey[] = "file_hashes"; | 
| 24 const char kPathKey[] = "path"; | 25 const char kPathKey[] = "path"; | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 | 130 | 
| 130 ComputedHashes::Writer::Writer() : file_list_(new base::ListValue) { | 131 ComputedHashes::Writer::Writer() : file_list_(new base::ListValue) { | 
| 131 } | 132 } | 
| 132 | 133 | 
| 133 ComputedHashes::Writer::~Writer() { | 134 ComputedHashes::Writer::~Writer() { | 
| 134 } | 135 } | 
| 135 | 136 | 
| 136 void ComputedHashes::Writer::AddHashes(const base::FilePath& relative_path, | 137 void ComputedHashes::Writer::AddHashes(const base::FilePath& relative_path, | 
| 137 int block_size, | 138 int block_size, | 
| 138 const std::vector<std::string>& hashes) { | 139 const std::vector<std::string>& hashes) { | 
| 139 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 140 auto block_hashes = base::MakeUnique<base::ListValue>(); | 
| 
Devlin
2017/06/02 15:38:48
Since we're touching this code anyway, we should a
 
jdoerrie
2017/06/06 12:40:23
Done.
 | |
| 140 base::ListValue* block_hashes = new base::ListValue(); | 141 | 
| 142 for (const auto& hash : hashes) { | |
| 143 std::string encoded; | |
| 144 base::Base64Encode(hash, &encoded); | |
| 145 block_hashes->GetList().emplace_back(std::move(encoded)); | |
| 
Devlin
2017/06/02 15:38:48
Is this preferred over Append()/AppendString()?  (
 
jdoerrie
2017/06/06 12:40:23
Yes, Append* won't be part of the new API. To make
 | |
| 146 } | |
| 147 | |
| 148 auto dict = base::MakeUnique<base::DictionaryValue>(); | |
| 141 dict->SetString(kPathKey, | 149 dict->SetString(kPathKey, | 
| 142 relative_path.NormalizePathSeparatorsTo('/').AsUTF8Unsafe()); | 150 relative_path.NormalizePathSeparatorsTo('/').AsUTF8Unsafe()); | 
| 143 dict->SetInteger(kBlockSizeKey, block_size); | 151 dict->SetInteger(kBlockSizeKey, block_size); | 
| 144 dict->Set(kBlockHashesKey, block_hashes); | 152 dict->Set(kBlockHashesKey, std::move(block_hashes)); | 
| 145 file_list_->Append(std::move(dict)); | 153 file_list_->Append(std::move(dict)); | 
| 146 | |
| 147 for (std::vector<std::string>::const_iterator i = hashes.begin(); | |
| 148 i != hashes.end(); | |
| 149 ++i) { | |
| 150 std::string encoded; | |
| 151 base::Base64Encode(*i, &encoded); | |
| 152 block_hashes->AppendString(encoded); | |
| 153 } | |
| 154 } | 154 } | 
| 155 | 155 | 
| 156 bool ComputedHashes::Writer::WriteToFile(const base::FilePath& path) { | 156 bool ComputedHashes::Writer::WriteToFile(const base::FilePath& path) { | 
| 157 std::string json; | 157 std::string json; | 
| 158 base::DictionaryValue top_dictionary; | 158 base::DictionaryValue top_dictionary; | 
| 159 top_dictionary.SetInteger(kVersionKey, kVersion); | 159 top_dictionary.SetInteger(kVersionKey, kVersion); | 
| 160 top_dictionary.Set(kFileHashesKey, file_list_.release()); | 160 top_dictionary.Set(kFileHashesKey, std::move(file_list_)); | 
| 161 | 161 | 
| 162 if (!base::JSONWriter::Write(top_dictionary, &json)) | 162 if (!base::JSONWriter::Write(top_dictionary, &json)) | 
| 163 return false; | 163 return false; | 
| 164 int written = base::WriteFile(path, json.data(), json.size()); | 164 int written = base::WriteFile(path, json.data(), json.size()); | 
| 165 if (static_cast<unsigned>(written) != json.size()) { | 165 if (static_cast<unsigned>(written) != json.size()) { | 
| 166 LOG(ERROR) << "Error writing " << path.AsUTF8Unsafe() | 166 LOG(ERROR) << "Error writing " << path.AsUTF8Unsafe() | 
| 167 << " ; write result:" << written << " expected:" << json.size(); | 167 << " ; write result:" << written << " expected:" << json.size(); | 
| 168 return false; | 168 return false; | 
| 169 } | 169 } | 
| 170 return true; | 170 return true; | 
| (...skipping 20 matching lines...) Expand all Loading... | |
| 191 | 191 | 
| 192 // If |contents| is empty, then we want to just exit here. | 192 // If |contents| is empty, then we want to just exit here. | 
| 193 if (bytes_to_read == 0) | 193 if (bytes_to_read == 0) | 
| 194 break; | 194 break; | 
| 195 | 195 | 
| 196 offset += bytes_to_read; | 196 offset += bytes_to_read; | 
| 197 } while (offset < contents.size()); | 197 } while (offset < contents.size()); | 
| 198 } | 198 } | 
| 199 | 199 | 
| 200 } // namespace extensions | 200 } // namespace extensions | 
| OLD | NEW |