Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: components/filesystem/public/cpp/prefs/filesystem_json_pref_store.cc

Issue 1646673002: mojo filesystem: Simplify full file reading/writing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Take 2 at trying to fix compile. The release version is complaining about duplicate -1s and this is… Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 if (err != FileError::OK) { 341 if (err != FileError::OK) {
342 // Do real error checking. 342 // Do real error checking.
343 NOTIMPLEMENTED(); 343 NOTIMPLEMENTED();
344 return; 344 return;
345 } 345 }
346 346
347 callback.Run(); 347 callback.Run();
348 } 348 }
349 349
350 void FilesystemJsonPrefStore::OnTempFileWriteStart() { 350 void FilesystemJsonPrefStore::OnTempFileWriteStart() {
351 // Open up a temporary file and truncate it.
352 directory_->OpenFile(
353 "tmp", GetProxy(&temporary_file_), kFlagWrite | kFlagCreate,
354 Bind(&FilesystemJsonPrefStore::OnTempFileOpened, AsWeakPtr()));
355 }
356
357 void FilesystemJsonPrefStore::OnTempFileOpened(FileError err) {
358 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the
359 // file can never fail.
360 CHECK_EQ(FileError::OK, err);
361
362 // Calculate what we want to write, and then write to the temporary file. 351 // Calculate what we want to write, and then write to the temporary file.
363 pending_lossy_write_ = false; 352 pending_lossy_write_ = false;
364 353
365 if (pref_filter_) 354 if (pref_filter_)
366 pref_filter_->FilterSerializeData(prefs_.get()); 355 pref_filter_->FilterSerializeData(prefs_.get());
367 356
368 std::string output; 357 std::string output;
369 JSONStringValueSerializer serializer(&output); 358 JSONStringValueSerializer serializer(&output);
370 serializer.set_pretty_print(false); 359 serializer.set_pretty_print(false);
371 serializer.Serialize(*prefs_); 360 serializer.Serialize(*prefs_);
372 361
373 temporary_file_->Write( 362 directory_->WriteFile(
374 mojo::Array<uint8_t>::From(output), 0, Whence::FROM_CURRENT, 363 "tmp",
364 mojo::Array<uint8_t>::From(output),
375 Bind(&FilesystemJsonPrefStore::OnTempFileWrite, AsWeakPtr())); 365 Bind(&FilesystemJsonPrefStore::OnTempFileWrite, AsWeakPtr()));
376 } 366 }
377 367
378 void FilesystemJsonPrefStore::OnTempFileWrite(FileError err, 368 void FilesystemJsonPrefStore::OnTempFileWrite(FileError err) {
379 uint32_t num_bytes_written) {
380 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the 369 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the
381 // file can never fail. 370 // file can never fail.
382 CHECK_EQ(FileError::OK, err); 371 CHECK_EQ(FileError::OK, err);
383 372
384 // Now that we've written the file, close it.
385 temporary_file_->Close(
386 Bind(&FilesystemJsonPrefStore::OnTempFileClosed, AsWeakPtr()));
387 }
388
389 void FilesystemJsonPrefStore::OnTempFileClosed(FileError err) {
390 // TODO(erg): Error handling. The JsonPrefStore code assumes that writing the
391 // file can never fail.
392 CHECK_EQ(FileError::OK, err);
393
394 temporary_file_.reset();
395 directory_->Rename( 373 directory_->Rename(
396 "tmp", path_, 374 "tmp", path_,
397 Bind(&FilesystemJsonPrefStore::OnTempFileRenamed, AsWeakPtr())); 375 Bind(&FilesystemJsonPrefStore::OnTempFileRenamed, AsWeakPtr()));
398 } 376 }
399 377
400 void FilesystemJsonPrefStore::OnTempFileRenamed(FileError err) {} 378 void FilesystemJsonPrefStore::OnTempFileRenamed(FileError err) {
379 }
401 380
402 void FilesystemJsonPrefStore::OnPreferencesReadStart() { 381 void FilesystemJsonPrefStore::OnPreferencesReadStart() {
403 // TODO(erg): implement me. 382 directory_->ReadEntireFile(
404 directory_->OpenFile( 383 path_,
405 path_, GetProxy(&preferences_file_), kFlagRead | kFlagOpen, 384 Bind(&FilesystemJsonPrefStore::OnPreferencesFileRead, AsWeakPtr()));
406 Bind(&FilesystemJsonPrefStore::OnPreferencesFileOpened, AsWeakPtr()));
407 }
408
409 void FilesystemJsonPrefStore::OnPreferencesFileOpened(FileError err) {
410 // TODO(erg): Error handling.
411 if (err == FileError::OK) {
412 preferences_file_->ReadEntireFile(
413 Bind(&FilesystemJsonPrefStore::OnPreferencesFileRead, AsWeakPtr()));
414 } else {
415 OnPreferencesFileRead(err, mojo::Array<uint8_t>());
416 }
417 } 385 }
418 386
419 void FilesystemJsonPrefStore::OnPreferencesFileRead( 387 void FilesystemJsonPrefStore::OnPreferencesFileRead(
420 FileError err, 388 FileError err,
421 mojo::Array<uint8_t> contents) { 389 mojo::Array<uint8_t> contents) {
422 scoped_ptr<FilesystemJsonPrefStore::ReadResult> read_result( 390 scoped_ptr<FilesystemJsonPrefStore::ReadResult> read_result(
423 new FilesystemJsonPrefStore::ReadResult); 391 new FilesystemJsonPrefStore::ReadResult);
424 // TODO(erg): Needs even better error handling. 392 // TODO(erg): Needs even better error handling.
425 switch (err) { 393 switch (err) {
426 case FileError::IN_USE: 394 case FileError::IN_USE:
427 case FileError::ACCESS_DENIED: { 395 case FileError::ACCESS_DENIED:
396 case FileError::NOT_A_FILE: {
428 read_only_ = true; 397 read_only_ = true;
429 break; 398 break;
430 } 399 }
431 case FileError::FAILED: 400 case FileError::FAILED:
432 case FileError::NOT_FOUND: { 401 case FileError::NOT_FOUND: {
433 // If the file just doesn't exist, maybe this is the first run. Just 402 // If the file just doesn't exist, maybe this is the first run. Just
434 // don't pass a value. 403 // don't pass a value.
435 read_result->error = PREF_READ_ERROR_NO_FILE; 404 read_result->error = PREF_READ_ERROR_NO_FILE;
436 break; 405 break;
437 } 406 }
438 default: { 407 default: {
439 int error_code; 408 int error_code;
440 std::string error_msg; 409 std::string error_msg;
441 JSONStringValueDeserializer deserializer(base::StringPiece( 410 JSONStringValueDeserializer deserializer(base::StringPiece(
442 reinterpret_cast<char*>(&contents.front()), contents.size())); 411 reinterpret_cast<char*>(&contents.front()), contents.size()));
443 read_result->value = deserializer.Deserialize(&error_code, &error_msg); 412 read_result->value = deserializer.Deserialize(&error_code, &error_msg);
444 read_result->error = HandleReadErrors(read_result->value.get()); 413 read_result->error = HandleReadErrors(read_result->value.get());
445 } 414 }
446 } 415 }
447 416
448 preferences_file_.reset();
449
450 OnFileRead(std::move(read_result)); 417 OnFileRead(std::move(read_result));
451 } 418 }
452 419
453 } // namespace filesystem 420 } // namespace filesystem
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698