diff options
author | davidyu@chromium.org <davidyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-04 11:12:15 +0000 |
---|---|---|
committer | davidyu@chromium.org <davidyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-04 11:12:15 +0000 |
commit | 028ee6f09c6d27d4b9ce5a5b1743b68c4ee51936 (patch) | |
tree | 7eb4492f3ff20b0eac402bb4338e081b7a2b5577 /chromeos/dbus | |
parent | 2fd98ed93133bd17c131ff3ac52f7f109e727878 (diff) | |
download | chromium_src-028ee6f09c6d27d4b9ce5a5b1743b68c4ee51936.zip chromium_src-028ee6f09c6d27d4b9ce5a5b1743b68c4ee51936.tar.gz chromium_src-028ee6f09c6d27d4b9ce5a5b1743b68c4ee51936.tar.bz2 |
Add boot attributes methods in CryptohomeClient.
BUG=chromium:353050
TEST=manually ran affected unit_tests and browser_tests.
Review URL: https://codereview.chromium.org/352633009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos/dbus')
-rw-r--r-- | chromeos/dbus/cryptohome_client.cc | 48 | ||||
-rw-r--r-- | chromeos/dbus/cryptohome_client.h | 29 | ||||
-rw-r--r-- | chromeos/dbus/fake_cryptohome_client.cc | 49 | ||||
-rw-r--r-- | chromeos/dbus/fake_cryptohome_client.h | 16 | ||||
-rw-r--r-- | chromeos/dbus/mock_cryptohome_client.h | 10 |
5 files changed, 137 insertions, 15 deletions
diff --git a/chromeos/dbus/cryptohome_client.cc b/chromeos/dbus/cryptohome_client.cc index 4bf3c78..78660c7 100644 --- a/chromeos/dbus/cryptohome_client.cc +++ b/chromeos/dbus/cryptohome_client.cc @@ -800,6 +800,54 @@ class CryptohomeClientImpl : public CryptohomeClient { callback)); } + virtual void GetBootAttribute( + const cryptohome::GetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE { + const char* method_name = cryptohome::kCryptohomeGetBootAttribute; + dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name); + + dbus::MessageWriter writer(&method_call); + writer.AppendProtoAsArrayOfBytes(request); + + proxy_->CallMethod(&method_call, + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod, + weak_ptr_factory_.GetWeakPtr(), + callback)); + } + + virtual void SetBootAttribute( + const cryptohome::SetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE { + const char* method_name = cryptohome::kCryptohomeSetBootAttribute; + dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name); + + dbus::MessageWriter writer(&method_call); + writer.AppendProtoAsArrayOfBytes(request); + + proxy_->CallMethod(&method_call, + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod, + weak_ptr_factory_.GetWeakPtr(), + callback)); + } + + virtual void FlushAndSignBootAttributes( + const cryptohome::FlushAndSignBootAttributesRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE { + const char* method_name = cryptohome::kCryptohomeFlushAndSignBootAttributes; + dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name); + + dbus::MessageWriter writer(&method_call); + writer.AppendProtoAsArrayOfBytes(request); + + proxy_->CallMethod(&method_call, + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod, + weak_ptr_factory_.GetWeakPtr(), + callback)); + } + protected: virtual void Init(dbus::Bus* bus) OVERRIDE { proxy_ = bus->GetObjectProxy( diff --git a/chromeos/dbus/cryptohome_client.h b/chromeos/dbus/cryptohome_client.h index de9fd89..4beb1fd 100644 --- a/chromeos/dbus/cryptohome_client.h +++ b/chromeos/dbus/cryptohome_client.h @@ -22,9 +22,12 @@ class AddKeyRequest; class AuthorizationRequest; class BaseReply; class CheckKeyRequest; +class FlushAndSignBootAttributesRequest; +class GetBootAttributeRequest; class MountRequest; -class UpdateKeyRequest; class RemoveKeyRequest; +class SetBootAttributeRequest; +class UpdateKeyRequest; } // namespace cryptohome @@ -499,6 +502,30 @@ class CHROMEOS_EXPORT CryptohomeClient : public DBusClient { const cryptohome::RemoveKeyRequest& request, const ProtobufMethodCallback& callback) = 0; + // Asynchronously calls GetBootAttribute method. |callback| is called after + // method call, and with reply protobuf. + // GetBootAttribute gets the value of the specified boot attribute. + virtual void GetBootAttribute( + const cryptohome::GetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) = 0; + + // Asynchronously calls SetBootAttribute method. |callback| is called after + // method call, and with reply protobuf. + // SetBootAttribute sets the value of the specified boot attribute. The value + // won't be available unitl FlushAndSignBootAttributes() is called. + virtual void SetBootAttribute( + const cryptohome::SetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) = 0; + + // Asynchronously calls FlushAndSignBootAttributes method. |callback| is + // called after method call, and with reply protobuf. + // FlushAndSignBootAttributes makes all pending boot attribute settings + // available, and have them signed by a special TPM key. This method always + // fails after any user, publuc, or guest session starts. + virtual void FlushAndSignBootAttributes( + const cryptohome::FlushAndSignBootAttributesRequest& request, + const ProtobufMethodCallback& callback) = 0; + protected: // Create() should be used instead. CryptohomeClient(); diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc index 1796e04..d79a0f3 100644 --- a/chromeos/dbus/fake_cryptohome_client.cc +++ b/chromeos/dbus/fake_cryptohome_client.cc @@ -472,7 +472,8 @@ void FakeCryptohomeClient::CheckKeyEx( const cryptohome::AuthorizationRequest& auth, const cryptohome::CheckKeyRequest& request, const ProtobufMethodCallback& callback) { - ReturnProtobufMethodCallback(id.email(), callback); + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); } void FakeCryptohomeClient::MountEx( @@ -480,7 +481,11 @@ void FakeCryptohomeClient::MountEx( const cryptohome::AuthorizationRequest& auth, const cryptohome::MountRequest& request, const ProtobufMethodCallback& callback) { - ReturnProtobufMethodCallback(id.email(), callback); + cryptohome::BaseReply reply; + cryptohome::MountReply* mount = + reply.MutableExtension(cryptohome::MountReply::reply); + mount->set_sanitized_username(GetStubSanitizedUsername(id.email())); + ReturnProtobufMethodCallback(reply, callback); } void FakeCryptohomeClient::AddKeyEx( @@ -488,7 +493,8 @@ void FakeCryptohomeClient::AddKeyEx( const cryptohome::AuthorizationRequest& auth, const cryptohome::AddKeyRequest& request, const ProtobufMethodCallback& callback) { - ReturnProtobufMethodCallback(id.email(), callback); + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); } void FakeCryptohomeClient::RemoveKeyEx( @@ -496,7 +502,8 @@ void FakeCryptohomeClient::RemoveKeyEx( const cryptohome::AuthorizationRequest& auth, const cryptohome::RemoveKeyRequest& request, const ProtobufMethodCallback& callback) { - ReturnProtobufMethodCallback(id.email(), callback); + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); } void FakeCryptohomeClient::UpdateKeyEx( @@ -504,7 +511,32 @@ void FakeCryptohomeClient::UpdateKeyEx( const cryptohome::AuthorizationRequest& auth, const cryptohome::UpdateKeyRequest& request, const ProtobufMethodCallback& callback) { - ReturnProtobufMethodCallback(id.email(), callback); + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); +} + +void FakeCryptohomeClient::GetBootAttribute( + const cryptohome::GetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) { + cryptohome::BaseReply reply; + cryptohome::GetBootAttributeReply* attr_reply = + reply.MutableExtension(cryptohome::GetBootAttributeReply::reply); + attr_reply->set_value(""); + ReturnProtobufMethodCallback(reply, callback); +} + +void FakeCryptohomeClient::SetBootAttribute( + const cryptohome::SetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) { + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); +} + +void FakeCryptohomeClient::FlushAndSignBootAttributes( + const cryptohome::FlushAndSignBootAttributesRequest& request, + const ProtobufMethodCallback& callback) { + cryptohome::BaseReply reply; + ReturnProtobufMethodCallback(reply, callback); } void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { @@ -525,13 +557,8 @@ std::vector<uint8> FakeCryptohomeClient::GetStubSystemSalt() { } void FakeCryptohomeClient::ReturnProtobufMethodCallback( - const std::string& userid, + const cryptohome::BaseReply& reply, const ProtobufMethodCallback& callback) { - cryptohome::BaseReply reply; - reply.set_error(cryptohome::CRYPTOHOME_ERROR_NOT_SET); - cryptohome::MountReply* mount = - reply.MutableExtension(cryptohome::MountReply::reply); - mount->set_sanitized_username(GetStubSanitizedUsername(userid)); base::MessageLoop::current()->PostTask( FROM_HERE, base::Bind(callback, diff --git a/chromeos/dbus/fake_cryptohome_client.h b/chromeos/dbus/fake_cryptohome_client.h index 6c1ea8e..eac6f0a 100644 --- a/chromeos/dbus/fake_cryptohome_client.h +++ b/chromeos/dbus/fake_cryptohome_client.h @@ -184,6 +184,15 @@ class CHROMEOS_EXPORT FakeCryptohomeClient : public CryptohomeClient { const cryptohome::AuthorizationRequest& auth, const cryptohome::RemoveKeyRequest& request, const ProtobufMethodCallback& callback) OVERRIDE; + virtual void GetBootAttribute( + const cryptohome::GetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE; + virtual void SetBootAttribute( + const cryptohome::SetBootAttributeRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE; + virtual void FlushAndSignBootAttributes( + const cryptohome::FlushAndSignBootAttributesRequest& request, + const ProtobufMethodCallback& callback) OVERRIDE; // Changes the behavior of WaitForServiceToBeAvailable(). This method runs // pending callbacks if is_available is true. @@ -206,6 +215,10 @@ class CHROMEOS_EXPORT FakeCryptohomeClient : public CryptohomeClient { static std::vector<uint8> GetStubSystemSalt(); private: + void ReturnProtobufMethodCallback( + const cryptohome::BaseReply& reply, + const ProtobufMethodCallback& callback); + // Posts tasks which return fake results to the UI thread. void ReturnAsyncMethodResult(const AsyncMethodCallback& callback, bool returns_data); @@ -214,9 +227,6 @@ class CHROMEOS_EXPORT FakeCryptohomeClient : public CryptohomeClient { void ReturnAsyncMethodResultInternal(const AsyncMethodCallback& callback, bool returns_data); - void ReturnProtobufMethodCallback(const std::string& user_id, - const ProtobufMethodCallback& callback); - bool service_is_available_; int async_call_id_; AsyncCallStatusHandler async_call_status_handler_; diff --git a/chromeos/dbus/mock_cryptohome_client.h b/chromeos/dbus/mock_cryptohome_client.h index 5eb251d..c688eb6 100644 --- a/chromeos/dbus/mock_cryptohome_client.h +++ b/chromeos/dbus/mock_cryptohome_client.h @@ -190,6 +190,16 @@ class MockCryptohomeClient : public CryptohomeClient { const cryptohome::AuthorizationRequest& auth, const cryptohome::RemoveKeyRequest& request, const ProtobufMethodCallback& callback)); + MOCK_METHOD2(GetBootAttribute, + void(const cryptohome::GetBootAttributeRequest& request, + const ProtobufMethodCallback& callback)); + MOCK_METHOD2(SetBootAttribute, + void(const cryptohome::SetBootAttributeRequest& request, + const ProtobufMethodCallback& callback)); + MOCK_METHOD2( + FlushAndSignBootAttributes, + void(const cryptohome::FlushAndSignBootAttributesRequest& request, + const ProtobufMethodCallback& callback)); }; } // namespace chromeos |