summaryrefslogtreecommitdiffstats
path: root/chromeos/dbus
diff options
context:
space:
mode:
authordavidyu@chromium.org <davidyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-04 11:12:15 +0000
committerdavidyu@chromium.org <davidyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-04 11:12:15 +0000
commit028ee6f09c6d27d4b9ce5a5b1743b68c4ee51936 (patch)
tree7eb4492f3ff20b0eac402bb4338e081b7a2b5577 /chromeos/dbus
parent2fd98ed93133bd17c131ff3ac52f7f109e727878 (diff)
downloadchromium_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.cc48
-rw-r--r--chromeos/dbus/cryptohome_client.h29
-rw-r--r--chromeos/dbus/fake_cryptohome_client.cc49
-rw-r--r--chromeos/dbus/fake_cryptohome_client.h16
-rw-r--r--chromeos/dbus/mock_cryptohome_client.h10
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