OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chromeos/dbus/fake_cryptohome_client.h" | 5 #include "chromeos/dbus/fake_cryptohome_client.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 14 matching lines...) Expand all Loading... | |
25 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h" | 25 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h" |
26 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite .h" | 26 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite .h" |
27 | 27 |
28 namespace chromeos { | 28 namespace chromeos { |
29 | 29 |
30 namespace { | 30 namespace { |
31 // Signature nonces are twenty bytes. This matches the attestation code. | 31 // Signature nonces are twenty bytes. This matches the attestation code. |
32 constexpr char kTwentyBytesNonce[] = "+addtwentybytesnonce"; | 32 constexpr char kTwentyBytesNonce[] = "+addtwentybytesnonce"; |
33 // A symbolic signature. | 33 // A symbolic signature. |
34 constexpr char kSignature[] = "signed"; | 34 constexpr char kSignature[] = "signed"; |
35 // Interval to update the progress of MigrateToDircrypto in milliseconds. | |
36 constexpr int kDircryptoMigrationUpdateIntervalMs = 200; | |
37 // The number of updates the MigrateToDircrypto will send before it completes. | |
38 constexpr uint64_t kDircryptoMigrationMaxProgress = 15; | |
35 } // namespace | 39 } // namespace |
36 | 40 |
37 FakeCryptohomeClient::FakeCryptohomeClient() | 41 FakeCryptohomeClient::FakeCryptohomeClient() |
38 : service_is_available_(true), | 42 : service_is_available_(true), |
39 async_call_id_(1), | 43 async_call_id_(1), |
40 unmount_result_(true), | 44 unmount_result_(true), |
41 system_salt_(GetStubSystemSalt()), | 45 system_salt_(GetStubSystemSalt()), |
42 weak_ptr_factory_(this) { | 46 weak_ptr_factory_(this) { |
43 base::FilePath cache_path; | 47 base::FilePath cache_path; |
44 locked_ = PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, &cache_path) && | 48 locked_ = PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, &cache_path) && |
(...skipping 14 matching lines...) Expand all Loading... | |
59 | 63 |
60 void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() { | 64 void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() { |
61 async_call_status_handler_.Reset(); | 65 async_call_status_handler_.Reset(); |
62 async_call_status_data_handler_.Reset(); | 66 async_call_status_data_handler_.Reset(); |
63 } | 67 } |
64 | 68 |
65 void FakeCryptohomeClient::SetLowDiskSpaceHandler( | 69 void FakeCryptohomeClient::SetLowDiskSpaceHandler( |
66 const LowDiskSpaceHandler& handler) {} | 70 const LowDiskSpaceHandler& handler) {} |
67 | 71 |
68 void FakeCryptohomeClient::SetDircryptoMigrationProgressHandler( | 72 void FakeCryptohomeClient::SetDircryptoMigrationProgressHandler( |
69 const DircryptoMigrationProgessHandler& handler) {} | 73 const DircryptoMigrationProgessHandler& handler) { |
74 dircrypto_migration_progress_handler_ = handler; | |
75 } | |
70 | 76 |
71 void FakeCryptohomeClient::WaitForServiceToBeAvailable( | 77 void FakeCryptohomeClient::WaitForServiceToBeAvailable( |
72 const WaitForServiceToBeAvailableCallback& callback) { | 78 const WaitForServiceToBeAvailableCallback& callback) { |
73 if (service_is_available_) { | 79 if (service_is_available_) { |
74 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 80 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
75 base::Bind(callback, true)); | 81 base::Bind(callback, true)); |
76 } else { | 82 } else { |
77 pending_wait_for_service_to_be_available_callbacks_.push_back(callback); | 83 pending_wait_for_service_to_be_available_callbacks_.push_back(callback); |
78 } | 84 } |
79 } | 85 } |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
582 cryptohome::BaseReply reply; | 588 cryptohome::BaseReply reply; |
583 ReturnProtobufMethodCallback(reply, callback); | 589 ReturnProtobufMethodCallback(reply, callback); |
584 } | 590 } |
585 | 591 |
586 void FakeCryptohomeClient::MigrateToDircrypto( | 592 void FakeCryptohomeClient::MigrateToDircrypto( |
587 const cryptohome::Identification& cryptohome_id, | 593 const cryptohome::Identification& cryptohome_id, |
588 const cryptohome::AuthorizationRequest& auth, | 594 const cryptohome::AuthorizationRequest& auth, |
589 const VoidDBusMethodCallback& callback) { | 595 const VoidDBusMethodCallback& callback) { |
590 base::ThreadTaskRunnerHandle::Get()->PostTask( | 596 base::ThreadTaskRunnerHandle::Get()->PostTask( |
591 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); | 597 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); |
598 dircrypto_migration_progress_ = 0; | |
599 dircrypto_migration_progress_timer_.Start( | |
600 FROM_HERE, | |
601 base::TimeDelta::FromMilliseconds(kDircryptoMigrationUpdateIntervalMs), | |
602 this, &FakeCryptohomeClient::OnDircryptoMigrationProgressUpdated); | |
592 } | 603 } |
593 | 604 |
594 void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { | 605 void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { |
595 service_is_available_ = is_available; | 606 service_is_available_ = is_available; |
596 if (is_available) { | 607 if (is_available) { |
597 std::vector<WaitForServiceToBeAvailableCallback> callbacks; | 608 std::vector<WaitForServiceToBeAvailableCallback> callbacks; |
598 callbacks.swap(pending_wait_for_service_to_be_available_callbacks_); | 609 callbacks.swap(pending_wait_for_service_to_be_available_callbacks_); |
599 for (size_t i = 0; i < callbacks.size(); ++i) | 610 for (size_t i = 0; i < callbacks.size(); ++i) |
600 callbacks[i].Run(is_available); | 611 callbacks[i].Run(is_available); |
601 } | 612 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
648 const std::string& data) { | 659 const std::string& data) { |
649 callback.Run(async_call_id_); | 660 callback.Run(async_call_id_); |
650 if (!async_call_status_data_handler_.is_null()) { | 661 if (!async_call_status_data_handler_.is_null()) { |
651 base::ThreadTaskRunnerHandle::Get()->PostTask( | 662 base::ThreadTaskRunnerHandle::Get()->PostTask( |
652 FROM_HERE, base::Bind(async_call_status_data_handler_, async_call_id_, | 663 FROM_HERE, base::Bind(async_call_status_data_handler_, async_call_id_, |
653 true, data)); | 664 true, data)); |
654 } | 665 } |
655 ++async_call_id_; | 666 ++async_call_id_; |
656 } | 667 } |
657 | 668 |
669 void FakeCryptohomeClient::OnDircryptoMigrationProgressUpdated() { | |
670 dircrypto_migration_progress_++; | |
671 | |
672 if (dircrypto_migration_progress_handler_.is_null()) | |
673 return; | |
xiyuan
2017/03/30 17:55:40
Stop |dircrypto_migration_progress_timer_| before
fukino
2017/03/31 02:29:53
Since I'd like to cover the case when the progress
| |
674 | |
675 if (dircrypto_migration_progress_ >= kDircryptoMigrationMaxProgress) { | |
676 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
677 FROM_HERE, base::Bind(dircrypto_migration_progress_handler_, | |
678 cryptohome::DIRCRYPTO_MIGRATION_SUCCESS, | |
679 dircrypto_migration_progress_, | |
680 kDircryptoMigrationMaxProgress)); | |
681 dircrypto_migration_progress_timer_.Stop(); | |
682 return; | |
683 } | |
684 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
685 FROM_HERE, base::Bind(dircrypto_migration_progress_handler_, | |
686 cryptohome::DIRCRYPTO_MIGRATION_IN_PROGRESS, | |
687 dircrypto_migration_progress_, | |
688 kDircryptoMigrationMaxProgress)); | |
689 } | |
690 | |
658 } // namespace chromeos | 691 } // namespace chromeos |
OLD | NEW |