diff options
author | glotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 20:22:19 +0000 |
---|---|---|
committer | glotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 20:22:19 +0000 |
commit | 942ea0e0ef8891664562dd7da24278aa1d85f62d (patch) | |
tree | fb2177d06e76af42efbaa3dba367de60bdf30516 | |
parent | cbe89c9bfb51c1bf577584d32df5d8b7a3c83159 (diff) | |
download | chromium_src-942ea0e0ef8891664562dd7da24278aa1d85f62d.zip chromium_src-942ea0e0ef8891664562dd7da24278aa1d85f62d.tar.gz chromium_src-942ea0e0ef8891664562dd7da24278aa1d85f62d.tar.bz2 |
AsyncDoAutomaticFreeDiskSpaceControl API introduced
and invoked on the login view for the first time.
BUG=chromium-os:12713
TEST=manual
Review URL: http://codereview.chromium.org/6610016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76958 0039d316-1c4b-4281-b951-d872f2087c98
5 files changed, 41 insertions, 9 deletions
diff --git a/chrome/browser/chromeos/cros/cryptohome_library.cc b/chrome/browser/chromeos/cros/cryptohome_library.cc index f948095..ac2d701 100644 --- a/chrome/browser/chromeos/cros/cryptohome_library.cc +++ b/chrome/browser/chromeos/cros/cryptohome_library.cc @@ -71,7 +71,7 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { chromeos::CryptohomeAsyncMountSafe(user_email.c_str(), passhash.c_str(), create_if_missing, - "", + false, NULL), d, "Couldn't initiate async mount of cryptohome."); @@ -123,6 +123,13 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { return system_salt; } + bool AsyncDoAutomaticFreeDiskSpaceControl(Delegate* d) { + return CacheCallback( + chromeos::CryptohomeAsyncDoAutomaticFreeDiskSpaceControl(), + d, + "Couldn't do automatic free disk space control."); + } + bool TpmIsReady() { return chromeos::CryptohomeTpmIsReady(); } @@ -168,13 +175,14 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { } void Dispatch(const chromeos::CryptohomeAsyncCallStatus& event) { - if (!callback_map_[event.async_id]) { + const CallbackMap::iterator callback = callback_map_.find(event.async_id); + if (callback == callback_map_.end()) { LOG(ERROR) << "Received signal for unknown async_id " << event.async_id; return; } - callback_map_[event.async_id]->OnComplete(event.return_status, - event.return_code); - callback_map_[event.async_id] = NULL; + if (callback->second) + callback->second->OnComplete(event.return_status, event.return_code); + callback_map_.erase(callback); } bool CacheCallback(int async_id, Delegate* d, const char* error) { @@ -290,6 +298,13 @@ class CryptohomeLibraryStubImpl : public CryptohomeLibrary { return salt; } + bool AsyncDoAutomaticFreeDiskSpaceControl(Delegate* callback) { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + NewRunnableFunction(&DoStubCallback, callback)); + return true; + } + // Tpm begin ready after 20-th call. bool TpmIsReady() { static int counter = 0; @@ -319,7 +334,8 @@ class CryptohomeLibraryStubImpl : public CryptohomeLibrary { private: static void DoStubCallback(Delegate* callback) { - callback->OnComplete(true, kCryptohomeMountErrorNone); + if (callback) + callback->OnComplete(true, kCryptohomeMountErrorNone); } DISALLOW_COPY_AND_ASSIGN(CryptohomeLibraryStubImpl); }; diff --git a/chrome/browser/chromeos/cros/cryptohome_library.h b/chrome/browser/chromeos/cros/cryptohome_library.h index 2a1d066..1692078 100644 --- a/chrome/browser/chromeos/cros/cryptohome_library.h +++ b/chrome/browser/chromeos/cros/cryptohome_library.h @@ -103,6 +103,9 @@ class CryptohomeLibrary { // Asks cryptohomed for the system salt. virtual CryptohomeBlob GetSystemSalt() = 0; + // Checks free disk space and if it falls below some minimum + // (cryptohome::kMinFreeSpace), performs cleanup. + virtual bool AsyncDoAutomaticFreeDiskSpaceControl(Delegate* callback) = 0; // Wrappers of the functions for working with Tpm. diff --git a/chrome/browser/chromeos/cros/mock_cryptohome_library.h b/chrome/browser/chromeos/cros/mock_cryptohome_library.h index a35d6a0..bf709df 100644 --- a/chrome/browser/chromeos/cros/mock_cryptohome_library.h +++ b/chrome/browser/chromeos/cros/mock_cryptohome_library.h @@ -40,6 +40,9 @@ class MockCryptohomeLibrary : public CryptohomeLibrary { ON_CALL(*this, AsyncRemove(_, _)) .WillByDefault( WithArgs<1>(Invoke(this, &MockCryptohomeLibrary::DoCallback))); + ON_CALL(*this, AsyncDoAutomaticFreeDiskSpaceControl(_)) + .WillByDefault( + WithArgs<0>(Invoke(this, &MockCryptohomeLibrary::DoCallback))); } MOCK_METHOD2(CheckKey, bool(const std::string& user_email, const std::string& passhash)); @@ -67,6 +70,7 @@ class MockCryptohomeLibrary : public CryptohomeLibrary { MOCK_METHOD2(AsyncRemove, bool(const std::string& user_email, Delegate* d)); MOCK_METHOD0(IsMounted, bool(void)); MOCK_METHOD0(GetSystemSalt, CryptohomeBlob(void)); + MOCK_METHOD1(AsyncDoAutomaticFreeDiskSpaceControl, bool(Delegate* callback)); MOCK_METHOD0(TpmIsReady, bool(void)); MOCK_METHOD0(TpmIsEnabled, bool(void)); @@ -91,6 +95,7 @@ class MockCryptohomeLibrary : public CryptohomeLibrary { int code_; DISALLOW_COPY_AND_ASSIGN(MockCryptohomeLibrary); }; + } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_CROS_MOCK_CRYPTOHOME_LIBRARY_H_ diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index f0c3d41..c481073 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc @@ -11,6 +11,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/boot_times_loader.h" #include "chrome/browser/chromeos/cros/cros_library.h" +#include "chrome/browser/chromeos/cros/cryptohome_library.h" #include "chrome/browser/chromeos/cros/login_library.h" #include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/chromeos/login/background_view.h" @@ -132,8 +133,11 @@ void ExistingUserController::Init(const UserVector& users) { login_display_->Init(filtered_users, show_guest, show_new_user); LoginUtils::Get()->PrewarmAuthentication(); - if (CrosLibrary::Get()->EnsureLoaded()) + if (CrosLibrary::Get()->EnsureLoaded()) { CrosLibrary::Get()->GetLoginLibrary()->EmitLoginPromptReady(); + CrosLibrary::Get()->GetCryptohomeLibrary()-> + AsyncDoAutomaticFreeDiskSpaceControl(NULL); + } } void ExistingUserController::OwnBackground( diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc index f887c77..5636b3a 100644 --- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc +++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc @@ -86,14 +86,18 @@ class ExistingUserControllerTest : public WizardInProcessBrowserTest { .Times(1); EXPECT_CALL(*mock_login_library_, RetrieveProperty(_, _, _)) .Times(AnyNumber()) - .WillRepeatedly((Return(true))); + .WillRepeatedly(Return(true)); cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true); cros_mock_->InitMockCryptohomeLibrary(); mock_cryptohome_library_ = cros_mock_->mock_cryptohome_library(); EXPECT_CALL(*mock_cryptohome_library_, IsMounted()) .Times(AnyNumber()) - .WillRepeatedly((Return(true))); + .WillRepeatedly(Return(true)); + EXPECT_CALL(*mock_cryptohome_library_, + AsyncDoAutomaticFreeDiskSpaceControl(_)) + .Times(1) + .WillOnce(Return(true)); LoginUtils::Set(new MockLoginUtils(kUsername, kPassword)); } |