diff options
-rw-r--r-- | chrome/browser/chromeos/app_mode/kiosk_app_launcher.cc | 31 | ||||
-rw-r--r-- | chrome/browser/chromeos/app_mode/kiosk_app_launcher.h | 1 | ||||
-rw-r--r-- | chromeos/cryptohome/async_method_caller.cc | 11 | ||||
-rw-r--r-- | chromeos/cryptohome/async_method_caller.h | 8 | ||||
-rw-r--r-- | chromeos/cryptohome/mock_async_method_caller.h | 3 | ||||
-rw-r--r-- | chromeos/dbus/cryptohome_client.cc | 23 | ||||
-rw-r--r-- | chromeos/dbus/cryptohome_client.h | 8 | ||||
-rw-r--r-- | chromeos/dbus/fake_cryptohome_client.cc | 6 | ||||
-rw-r--r-- | chromeos/dbus/fake_cryptohome_client.h | 3 | ||||
-rw-r--r-- | chromeos/dbus/mock_cryptohome_client.h | 3 |
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)); |