| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "components/filesystem/public/cpp/prefs/filesystem_json_pref_store.h" | 5 #include "components/filesystem/public/cpp/prefs/filesystem_json_pref_store.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 PersistentPrefStore::PrefReadError HandleReadErrors(const base::Value* value) { | 50 PersistentPrefStore::PrefReadError HandleReadErrors(const base::Value* value) { |
| 51 if (!value->IsType(base::Value::TYPE_DICTIONARY)) | 51 if (!value->IsType(base::Value::TYPE_DICTIONARY)) |
| 52 return PersistentPrefStore::PREF_READ_ERROR_JSON_TYPE; | 52 return PersistentPrefStore::PREF_READ_ERROR_JSON_TYPE; |
| 53 return PersistentPrefStore::PREF_READ_ERROR_NONE; | 53 return PersistentPrefStore::PREF_READ_ERROR_NONE; |
| 54 } | 54 } |
| 55 | 55 |
| 56 } // namespace | 56 } // namespace |
| 57 | 57 |
| 58 FilesystemJsonPrefStore::FilesystemJsonPrefStore( | 58 FilesystemJsonPrefStore::FilesystemJsonPrefStore( |
| 59 const std::string& pref_filename, | 59 const std::string& pref_filename, |
| 60 filesystem::FileSystemPtr filesystem, | 60 filesystem::mojom::FileSystemPtr filesystem, |
| 61 std::unique_ptr<PrefFilter> pref_filter) | 61 std::unique_ptr<PrefFilter> pref_filter) |
| 62 : path_(pref_filename), | 62 : path_(pref_filename), |
| 63 binding_(this), | 63 binding_(this), |
| 64 filesystem_(std::move(filesystem)), | 64 filesystem_(std::move(filesystem)), |
| 65 prefs_(new base::DictionaryValue()), | 65 prefs_(new base::DictionaryValue()), |
| 66 read_only_(false), | 66 read_only_(false), |
| 67 pref_filter_(std::move(pref_filter)), | 67 pref_filter_(std::move(pref_filter)), |
| 68 initialized_(false), | 68 initialized_(false), |
| 69 filtering_in_progress_(false), | 69 filtering_in_progress_(false), |
| 70 pending_lossy_write_(false), | 70 pending_lossy_write_(false), |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 void FilesystemJsonPrefStore::PerformWrite() { | 327 void FilesystemJsonPrefStore::PerformWrite() { |
| 328 if (!directory_) { | 328 if (!directory_) { |
| 329 OpenFilesystem( | 329 OpenFilesystem( |
| 330 Bind(&FilesystemJsonPrefStore::OnTempFileWriteStart, AsWeakPtr())); | 330 Bind(&FilesystemJsonPrefStore::OnTempFileWriteStart, AsWeakPtr())); |
| 331 } else { | 331 } else { |
| 332 OnTempFileWriteStart(); | 332 OnTempFileWriteStart(); |
| 333 } | 333 } |
| 334 } | 334 } |
| 335 | 335 |
| 336 void FilesystemJsonPrefStore::OpenFilesystem(base::Closure callback) { | 336 void FilesystemJsonPrefStore::OpenFilesystem(base::Closure callback) { |
| 337 filesystem::FileSystemClientPtr client; | 337 filesystem::mojom::FileSystemClientPtr client; |
| 338 binding_.Bind(GetProxy(&client)); | 338 binding_.Bind(GetProxy(&client)); |
| 339 | 339 |
| 340 filesystem_->OpenFileSystem( | 340 filesystem_->OpenFileSystem( |
| 341 "origin", GetProxy(&directory_), std::move(client), | 341 "origin", GetProxy(&directory_), std::move(client), |
| 342 base::Bind(&FilesystemJsonPrefStore::OnOpenFilesystem, AsWeakPtr(), | 342 base::Bind(&FilesystemJsonPrefStore::OnOpenFilesystem, AsWeakPtr(), |
| 343 callback)); | 343 callback)); |
| 344 } | 344 } |
| 345 | 345 |
| 346 void FilesystemJsonPrefStore::OnOpenFilesystem(base::Closure callback, | 346 void FilesystemJsonPrefStore::OnOpenFilesystem(base::Closure callback, |
| 347 FileError err) { | 347 mojom::FileError err) { |
| 348 if (err != FileError::OK) { | 348 if (err != mojom::FileError::OK) { |
| 349 // Do real error checking. | 349 // Do real error checking. |
| 350 NOTIMPLEMENTED(); | 350 NOTIMPLEMENTED(); |
| 351 return; | 351 return; |
| 352 } | 352 } |
| 353 | 353 |
| 354 callback.Run(); | 354 callback.Run(); |
| 355 } | 355 } |
| 356 | 356 |
| 357 void FilesystemJsonPrefStore::OnTempFileWriteStart() { | 357 void FilesystemJsonPrefStore::OnTempFileWriteStart() { |
| 358 // Calculate what we want to write, and then write to the temporary file. | 358 // Calculate what we want to write, and then write to the temporary file. |
| 359 pending_lossy_write_ = false; | 359 pending_lossy_write_ = false; |
| 360 | 360 |
| 361 if (pref_filter_) | 361 if (pref_filter_) |
| 362 pref_filter_->FilterSerializeData(prefs_.get()); | 362 pref_filter_->FilterSerializeData(prefs_.get()); |
| 363 | 363 |
| 364 std::string output; | 364 std::string output; |
| 365 JSONStringValueSerializer serializer(&output); | 365 JSONStringValueSerializer serializer(&output); |
| 366 serializer.set_pretty_print(false); | 366 serializer.set_pretty_print(false); |
| 367 serializer.Serialize(*prefs_); | 367 serializer.Serialize(*prefs_); |
| 368 | 368 |
| 369 directory_->WriteFile( | 369 directory_->WriteFile( |
| 370 "tmp", | 370 "tmp", |
| 371 mojo::Array<uint8_t>::From(output), | 371 mojo::Array<uint8_t>::From(output), |
| 372 Bind(&FilesystemJsonPrefStore::OnTempFileWrite, AsWeakPtr())); | 372 Bind(&FilesystemJsonPrefStore::OnTempFileWrite, AsWeakPtr())); |
| 373 } | 373 } |
| 374 | 374 |
| 375 void FilesystemJsonPrefStore::OnTempFileWrite(FileError err) { | 375 void FilesystemJsonPrefStore::OnTempFileWrite(mojom::FileError err) { |
| 376 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the | 376 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the |
| 377 // file can never fail. | 377 // file can never fail. |
| 378 CHECK_EQ(FileError::OK, err); | 378 CHECK_EQ(mojom::FileError::OK, err); |
| 379 | 379 |
| 380 directory_->Rename( | 380 directory_->Rename( |
| 381 "tmp", path_, | 381 "tmp", path_, |
| 382 Bind(&FilesystemJsonPrefStore::OnTempFileRenamed, AsWeakPtr())); | 382 Bind(&FilesystemJsonPrefStore::OnTempFileRenamed, AsWeakPtr())); |
| 383 } | 383 } |
| 384 | 384 |
| 385 void FilesystemJsonPrefStore::OnTempFileRenamed(FileError err) { | 385 void FilesystemJsonPrefStore::OnTempFileRenamed(mojom::FileError err) {} |
| 386 } | |
| 387 | 386 |
| 388 void FilesystemJsonPrefStore::OnPreferencesReadStart() { | 387 void FilesystemJsonPrefStore::OnPreferencesReadStart() { |
| 389 directory_->ReadEntireFile( | 388 directory_->ReadEntireFile( |
| 390 path_, | 389 path_, |
| 391 Bind(&FilesystemJsonPrefStore::OnPreferencesFileRead, AsWeakPtr())); | 390 Bind(&FilesystemJsonPrefStore::OnPreferencesFileRead, AsWeakPtr())); |
| 392 } | 391 } |
| 393 | 392 |
| 394 void FilesystemJsonPrefStore::OnPreferencesFileRead( | 393 void FilesystemJsonPrefStore::OnPreferencesFileRead( |
| 395 FileError err, | 394 mojom::FileError err, |
| 396 mojo::Array<uint8_t> contents) { | 395 mojo::Array<uint8_t> contents) { |
| 397 std::unique_ptr<FilesystemJsonPrefStore::ReadResult> read_result( | 396 std::unique_ptr<FilesystemJsonPrefStore::ReadResult> read_result( |
| 398 new FilesystemJsonPrefStore::ReadResult); | 397 new FilesystemJsonPrefStore::ReadResult); |
| 399 // TODO(erg): Needs even better error handling. | 398 // TODO(erg): Needs even better error handling. |
| 400 switch (err) { | 399 switch (err) { |
| 401 case FileError::IN_USE: | 400 case mojom::FileError::IN_USE: |
| 402 case FileError::ACCESS_DENIED: | 401 case mojom::FileError::ACCESS_DENIED: |
| 403 case FileError::NOT_A_FILE: { | 402 case mojom::FileError::NOT_A_FILE: { |
| 404 read_only_ = true; | 403 read_only_ = true; |
| 405 break; | 404 break; |
| 406 } | 405 } |
| 407 case FileError::FAILED: | 406 case mojom::FileError::FAILED: |
| 408 case FileError::NOT_FOUND: { | 407 case mojom::FileError::NOT_FOUND: { |
| 409 // If the file just doesn't exist, maybe this is the first run. Just | 408 // If the file just doesn't exist, maybe this is the first run. Just |
| 410 // don't pass a value. | 409 // don't pass a value. |
| 411 read_result->error = PREF_READ_ERROR_NO_FILE; | 410 read_result->error = PREF_READ_ERROR_NO_FILE; |
| 412 break; | 411 break; |
| 413 } | 412 } |
| 414 default: { | 413 default: { |
| 415 int error_code; | 414 int error_code; |
| 416 std::string error_msg; | 415 std::string error_msg; |
| 417 JSONStringValueDeserializer deserializer(base::StringPiece( | 416 JSONStringValueDeserializer deserializer(base::StringPiece( |
| 418 reinterpret_cast<char*>(&contents.front()), contents.size())); | 417 reinterpret_cast<char*>(&contents.front()), contents.size())); |
| 419 read_result->value = deserializer.Deserialize(&error_code, &error_msg); | 418 read_result->value = deserializer.Deserialize(&error_code, &error_msg); |
| 420 read_result->error = HandleReadErrors(read_result->value.get()); | 419 read_result->error = HandleReadErrors(read_result->value.get()); |
| 421 } | 420 } |
| 422 } | 421 } |
| 423 | 422 |
| 424 OnFileRead(std::move(read_result)); | 423 OnFileRead(std::move(read_result)); |
| 425 } | 424 } |
| 426 | 425 |
| 427 } // namespace filesystem | 426 } // namespace filesystem |
| OLD | NEW |