summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc31
-rw-r--r--chrome/browser/chromeos/app_mode/kiosk_app_launcher.h1
-rw-r--r--chromeos/cryptohome/async_method_caller.cc11
-rw-r--r--chromeos/cryptohome/async_method_caller.h8
-rw-r--r--chromeos/cryptohome/mock_async_method_caller.h3
-rw-r--r--chromeos/dbus/cryptohome_client.cc23
-rw-r--r--chromeos/dbus/cryptohome_client.h8
-rw-r--r--chromeos/dbus/fake_cryptohome_client.cc6
-rw-r--r--chromeos/dbus/fake_cryptohome_client.h3
-rw-r--r--chromeos/dbus/mock_cryptohome_client.h3
10 files changed, 86 insertions, 11 deletions
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc b/chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc
index 174cffd..a2cac72 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc
@@ -26,6 +26,12 @@ using content::BrowserThread;
namespace chromeos {
+namespace {
+
+void IgnoreResult(bool mount_success, cryptohome::MountError mount_error) {}
+
+} // namespace
+
// static
KioskAppLauncher* KioskAppLauncher::running_instance_ = NULL;
@@ -101,11 +107,9 @@ class KioskAppLauncher::ProfileLoader : public LoginUtils::Delegate {
public:
ProfileLoader(KioskAppManager* kiosk_app_manager,
KioskAppLauncher* kiosk_app_launcher)
- : kiosk_app_launcher_(kiosk_app_launcher) {
- KioskAppManager::App app;
- if (!kiosk_app_manager->GetApp(kiosk_app_launcher->app_id_, &app))
- NOTREACHED() << "Logging into nonexistent kiosk-app account.";
- user_id_ = app.user_id;
+ : kiosk_app_launcher_(kiosk_app_launcher),
+ user_id_(kiosk_app_launcher->user_id_) {
+ CHECK(!user_id_.empty());
}
virtual ~ProfileLoader() {
@@ -160,6 +164,9 @@ KioskAppLauncher::KioskAppLauncher(KioskAppManager* kiosk_app_manager,
: kiosk_app_manager_(kiosk_app_manager),
app_id_(app_id),
remove_attempted_(false) {
+ KioskAppManager::App app;
+ CHECK(kiosk_app_manager_->GetApp(app_id_, &app));
+ user_id_ = app.user_id;
}
KioskAppLauncher::~KioskAppLauncher() {}
@@ -200,12 +207,14 @@ void KioskAppLauncher::ReportLaunchResult(KioskAppLaunchError::Error error) {
}
void KioskAppLauncher::StartMount() {
- const std::string token =
- CryptohomeLibrary::Get()->EncryptWithSystemSalt(app_id_);
-
- cryptohome::AsyncMethodCaller::GetInstance()->AsyncMount(
+ // Nuke old home that uses |app_id_| as cryptohome user id.
+ // TODO(xiyuan): Remove this after all clients migrated to new home.
+ cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
app_id_,
- token,
+ base::Bind(&IgnoreResult));
+
+ cryptohome::AsyncMethodCaller::GetInstance()->AsyncMountPublic(
+ user_id_,
cryptohome::CREATE_IF_MISSING,
base::Bind(&KioskAppLauncher::MountCallback,
base::Unretained(this)));
@@ -234,7 +243,7 @@ void KioskAppLauncher::MountCallback(bool mount_success,
void KioskAppLauncher::AttemptRemove() {
cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
- app_id_,
+ user_id_,
base::Bind(&KioskAppLauncher::RemoveCallback,
base::Unretained(this)));
}
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_launcher.h b/chrome/browser/chromeos/app_mode/kiosk_app_launcher.h
index 44f9946..5b9908f 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_launcher.h
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_launcher.h
@@ -57,6 +57,7 @@ class KioskAppLauncher {
KioskAppManager* kiosk_app_manager_;
const std::string app_id_;
+ std::string user_id_;
scoped_ptr<CryptohomedChecker> crytohomed_checker;
scoped_ptr<ProfileLoader> profile_loader_;
diff --git a/chromeos/cryptohome/async_method_caller.cc b/chromeos/cryptohome/async_method_caller.cc
index 80c8878..92392d9 100644
--- a/chromeos/cryptohome/async_method_caller.cc
+++ b/chromeos/cryptohome/async_method_caller.cc
@@ -91,6 +91,17 @@ class AsyncMethodCallerImpl : public AsyncMethodCaller {
"Couldn't initiate async mount of cryptohome."));
}
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ Callback callback) OVERRIDE {
+ DBusThreadManager::Get()->GetCryptohomeClient()->
+ AsyncMountPublic(public_mount_id, flags, base::Bind(
+ &AsyncMethodCallerImpl::RegisterAsyncCallback,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback,
+ "Couldn't initiate async mount public of cryptohome."));
+ }
+
virtual void AsyncRemove(const std::string& user_email,
Callback callback) OVERRIDE {
DBusThreadManager::Get()->GetCryptohomeClient()->
diff --git a/chromeos/cryptohome/async_method_caller.h b/chromeos/cryptohome/async_method_caller.h
index 04f9fb6..7414284 100644
--- a/chromeos/cryptohome/async_method_caller.h
+++ b/chromeos/cryptohome/async_method_caller.h
@@ -87,6 +87,14 @@ class CHROMEOS_EXPORT AsyncMethodCaller {
// |callback| will be called with status info on completion.
virtual void AsyncMountGuest(Callback callback) = 0;
+ // Asks cryptohomed to asynchrounously try to find the cryptohome for
+ // |public_mount_id| and then mount it using a passhash derived from
+ // |public_mount_id| and a secret. See AsyncMount for possible values for
+ // |flags|.
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ Callback callback) = 0;
+
// Asks cryptohomed to asynchronously try to find the cryptohome for
// |user_email| and then nuke it.
virtual void AsyncRemove(const std::string& user_email,
diff --git a/chromeos/cryptohome/mock_async_method_caller.h b/chromeos/cryptohome/mock_async_method_caller.h
index 45be7f8..74567ca 100644
--- a/chromeos/cryptohome/mock_async_method_caller.h
+++ b/chromeos/cryptohome/mock_async_method_caller.h
@@ -43,6 +43,9 @@ class MockAsyncMethodCaller : public AsyncMethodCaller {
const std::string& new_key,
Callback callback));
MOCK_METHOD1(AsyncMountGuest, void(Callback callback));
+ MOCK_METHOD3(AsyncMountPublic, void(const std::string& public_mount_id,
+ int flags,
+ Callback callback));
MOCK_METHOD2(AsyncRemove, void(const std::string& user_email,
Callback callback));
MOCK_METHOD1(AsyncTpmAttestationCreateEnrollRequest,
diff --git a/chromeos/dbus/cryptohome_client.cc b/chromeos/dbus/cryptohome_client.cc
index 0a5a7fb..a766d09 100644
--- a/chromeos/dbus/cryptohome_client.cc
+++ b/chromeos/dbus/cryptohome_client.cc
@@ -219,6 +219,22 @@ class CryptohomeClientImpl : public CryptohomeClient {
}
// CryptohomeClient override.
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback) OVERRIDE {
+ dbus::MethodCall method_call(cryptohome::kCryptohomeInterface,
+ cryptohome::kCryptohomeAsyncMountPublic);
+ dbus::MessageWriter writer(&method_call);
+ writer.AppendString(public_mount_id);
+ writer.AppendBool(flags & cryptohome::CREATE_IF_MISSING);
+ writer.AppendBool(flags & cryptohome::ENSURE_EPHEMERAL);
+ proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&CryptohomeClientImpl::OnAsyncMethodCall,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback));
+ }
+
+ // CryptohomeClient override.
virtual void TpmIsReady(const BoolDBusMethodCallback& callback) OVERRIDE {
dbus::MethodCall method_call(cryptohome::kCryptohomeInterface,
cryptohome::kCryptohomeTpmIsReady);
@@ -929,6 +945,13 @@ class CryptohomeClientStubImpl : public CryptohomeClient {
}
// CryptohomeClient override.
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback) OVERRIDE {
+ ReturnAsyncMethodResult(callback, false);
+ }
+
+ // CryptohomeClient override.
virtual void TpmIsReady(const BoolDBusMethodCallback& callback) OVERRIDE {
base::MessageLoop::current()->PostTask(
FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
diff --git a/chromeos/dbus/cryptohome_client.h b/chromeos/dbus/cryptohome_client.h
index d17c0d7..0bfc978 100644
--- a/chromeos/dbus/cryptohome_client.h
+++ b/chromeos/dbus/cryptohome_client.h
@@ -134,6 +134,14 @@ class CHROMEOS_EXPORT CryptohomeClient {
// succeeds.
virtual void AsyncMountGuest(const AsyncMethodCallback& callback) = 0;
+ // Calls the AsyncMount method to asynchronously mount the cryptohome for
+ // |public_mount_id|. For supported |flags|, see the documentation of
+ // AsyncMethodCaller::AsyncMount(). |callback| is called after the method
+ // call succeeds.
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback) = 0;
+
// Calls TpmIsReady method.
virtual void TpmIsReady(const BoolDBusMethodCallback& callback) = 0;
diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc
index 19bdf36..d13c0f7 100644
--- a/chromeos/dbus/fake_cryptohome_client.cc
+++ b/chromeos/dbus/fake_cryptohome_client.cc
@@ -117,6 +117,12 @@ void FakeCryptohomeClient::AsyncMountGuest(
const AsyncMethodCallback& callback) {
}
+void FakeCryptohomeClient::AsyncMountPublic(
+ const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback) {
+}
+
bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) {
return false;
}
diff --git a/chromeos/dbus/fake_cryptohome_client.h b/chromeos/dbus/fake_cryptohome_client.h
index e840697..a4e5bfb 100644
--- a/chromeos/dbus/fake_cryptohome_client.h
+++ b/chromeos/dbus/fake_cryptohome_client.h
@@ -49,6 +49,9 @@ class FakeCryptohomeClient : public CryptohomeClient {
const std::string& new_key,
const AsyncMethodCallback& callback) OVERRIDE;
virtual void AsyncMountGuest(const AsyncMethodCallback& callback) OVERRIDE;
+ virtual void AsyncMountPublic(const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback) OVERRIDE;
virtual void TpmIsReady(const BoolDBusMethodCallback& callback) OVERRIDE;
virtual void TpmIsEnabled(const BoolDBusMethodCallback& callback) OVERRIDE;
virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE;
diff --git a/chromeos/dbus/mock_cryptohome_client.h b/chromeos/dbus/mock_cryptohome_client.h
index 0ba51c2..05ae2a7 100644
--- a/chromeos/dbus/mock_cryptohome_client.h
+++ b/chromeos/dbus/mock_cryptohome_client.h
@@ -50,6 +50,9 @@ class MockCryptohomeClient : public CryptohomeClient {
const AsyncMethodCallback& callback));
MOCK_METHOD1(AsyncMountGuest,
void(const AsyncMethodCallback& callback));
+ MOCK_METHOD3(AsyncMountPublic, void(const std::string& public_mount_id,
+ int flags,
+ const AsyncMethodCallback& callback));
MOCK_METHOD1(TpmIsReady, void(const BoolDBusMethodCallback& callback));
MOCK_METHOD1(TpmIsEnabled, void(const BoolDBusMethodCallback& callback));
MOCK_METHOD1(CallTpmIsEnabledAndBlock, bool(bool* enabled));