summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 20:22:19 +0000
committerglotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 20:22:19 +0000
commit942ea0e0ef8891664562dd7da24278aa1d85f62d (patch)
treefb2177d06e76af42efbaa3dba367de60bdf30516
parentcbe89c9bfb51c1bf577584d32df5d8b7a3c83159 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/chromeos/cros/cryptohome_library.cc28
-rw-r--r--chrome/browser/chromeos/cros/cryptohome_library.h3
-rw-r--r--chrome/browser/chromeos/cros/mock_cryptohome_library.h5
-rw-r--r--chrome/browser/chromeos/login/existing_user_controller.cc6
-rw-r--r--chrome/browser/chromeos/login/existing_user_controller_browsertest.cc8
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));
}