Extract UserPolicyTokenCache from UserPolicyCache.
BUG=none
TEST=Compiles and passes tests
Review URL: http://codereview.chromium.org/7205035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89889 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/policy/user_policy_token_cache.cc b/chrome/browser/policy/user_policy_token_cache.cc
new file mode 100644
index 0000000..adba4a4
--- /dev/null
+++ b/chrome/browser/policy/user_policy_token_cache.cc
@@ -0,0 +1,96 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/user_policy_token_cache.h"
+
+#include "base/file_util.h"
+#include "content/browser/browser_thread.h"
+
+namespace policy {
+
+namespace em = enterprise_management;
+
+UserPolicyTokenCache::Delegate::~Delegate() {}
+
+UserPolicyTokenCache::UserPolicyTokenCache(
+ const base::WeakPtr<Delegate>& delegate,
+ const FilePath& cache_file)
+ : delegate_(delegate),
+ cache_file_(cache_file) {}
+
+void UserPolicyTokenCache::Load() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread));
+}
+
+void UserPolicyTokenCache::Store(const std::string& token,
+ const std::string& device_id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ NewRunnableMethod(this,
+ &UserPolicyTokenCache::StoreOnFileThread,
+ token,
+ device_id));
+}
+
+UserPolicyTokenCache::~UserPolicyTokenCache() {
+}
+
+void UserPolicyTokenCache::LoadOnFileThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ std::string device_token;
+ std::string device_id;
+
+ if (file_util::PathExists(cache_file_)) {
+ std::string data;
+ em::DeviceCredentials device_credentials;
+ if (file_util::ReadFileToString(cache_file_, &data) &&
+ device_credentials.ParseFromArray(data.c_str(), data.size())) {
+ device_token = device_credentials.device_token();
+ device_id = device_credentials.device_id();
+ }
+ }
+
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ NewRunnableMethod(this,
+ &UserPolicyTokenCache::NotifyOnUIThread,
+ device_token,
+ device_id));
+}
+
+void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token,
+ const std::string& device_id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (delegate_.get())
+ delegate_->OnTokenCacheLoaded(token, device_id);
+}
+
+void UserPolicyTokenCache::StoreOnFileThread(const std::string& token,
+ const std::string& device_id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ em::DeviceCredentials device_credentials;
+ device_credentials.set_device_token(token);
+ device_credentials.set_device_id(device_id);
+ std::string data;
+ bool success = device_credentials.SerializeToString(&data);
+ if (!success) {
+ LOG(WARNING) << "Failed serialize device token data, will not write "
+ << cache_file_.value();
+ return;
+ }
+
+ if (!file_util::CreateDirectory(cache_file_.DirName())) {
+ LOG(WARNING) << "Failed to create directory "
+ << cache_file_.DirName().value();
+ return;
+ }
+
+ file_util::WriteFile(cache_file_, data.c_str(), data.length());
+}
+
+} // namespace policy