Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/policy/user_policy_token_cache.h" | 5 #include "chrome/browser/policy/user_policy_token_cache.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "content/browser/browser_thread.h" | 8 #include "content/browser/browser_thread.h" |
| 9 | 9 |
| 10 namespace policy { | 10 namespace policy { |
| 11 | 11 |
| 12 namespace em = enterprise_management; | 12 namespace em = enterprise_management; |
| 13 | 13 |
| 14 UserPolicyTokenCache::Delegate::~Delegate() {} | |
| 15 | |
| 16 UserPolicyTokenCache::UserPolicyTokenCache( | 14 UserPolicyTokenCache::UserPolicyTokenCache( |
| 17 const base::WeakPtr<Delegate>& delegate, | 15 CloudPolicyData* data, |
| 18 const FilePath& cache_file) | 16 const FilePath& cache_file) |
| 19 : delegate_(delegate), | 17 : data_(data), |
| 20 cache_file_(cache_file) {} | 18 cache_file_(cache_file) { |
| 19 data_->AddObserver(this); | |
| 20 } | |
| 21 | 21 |
| 22 void UserPolicyTokenCache::Load() { | 22 void UserPolicyTokenCache::Load() { |
| 23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 24 BrowserThread::PostTask( | 24 BrowserThread::PostTask( |
| 25 BrowserThread::FILE, FROM_HERE, | 25 BrowserThread::FILE, FROM_HERE, |
| 26 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread)); | 26 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread)); |
| 27 } | 27 } |
| 28 | 28 |
| 29 void UserPolicyTokenCache::Store(const std::string& token, | 29 void UserPolicyTokenCache::Store(const std::string& token, |
| 30 const std::string& device_id) { | 30 const std::string& device_id) { |
| 31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 32 BrowserThread::PostTask( | 32 BrowserThread::PostTask( |
| 33 BrowserThread::FILE, FROM_HERE, | 33 BrowserThread::FILE, FROM_HERE, |
| 34 NewRunnableMethod(this, | 34 NewRunnableMethod(this, |
| 35 &UserPolicyTokenCache::StoreOnFileThread, | 35 &UserPolicyTokenCache::StoreOnFileThread, |
| 36 token, | 36 token, |
| 37 device_id)); | 37 device_id)); |
| 38 } | 38 } |
| 39 | 39 |
| 40 UserPolicyTokenCache::~UserPolicyTokenCache() { | 40 UserPolicyTokenCache::~UserPolicyTokenCache() { |
| 41 if (data_ != NULL) | |
| 42 data_->RemoveObserver(this); | |
| 41 } | 43 } |
| 42 | 44 |
| 43 void UserPolicyTokenCache::LoadOnFileThread() { | 45 void UserPolicyTokenCache::LoadOnFileThread() { |
| 44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 46 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 45 std::string device_token; | 47 std::string device_token; |
| 46 std::string device_id; | 48 std::string device_id; |
| 47 | 49 |
| 48 if (file_util::PathExists(cache_file_)) { | 50 if (file_util::PathExists(cache_file_)) { |
| 49 std::string data; | 51 std::string data; |
| 50 em::DeviceCredentials device_credentials; | 52 em::DeviceCredentials device_credentials; |
| 51 if (file_util::ReadFileToString(cache_file_, &data) && | 53 if (file_util::ReadFileToString(cache_file_, &data) && |
| 52 device_credentials.ParseFromArray(data.c_str(), data.size())) { | 54 device_credentials.ParseFromArray(data.c_str(), data.size())) { |
| 53 device_token = device_credentials.device_token(); | 55 device_token = device_credentials.device_token(); |
| 54 device_id = device_credentials.device_id(); | 56 device_id = device_credentials.device_id(); |
| 55 } | 57 } |
| 56 } | 58 } |
| 57 | 59 |
| 58 BrowserThread::PostTask( | 60 BrowserThread::PostTask( |
| 59 BrowserThread::UI, FROM_HERE, | 61 BrowserThread::UI, FROM_HERE, |
| 60 NewRunnableMethod(this, | 62 NewRunnableMethod(this, |
| 61 &UserPolicyTokenCache::NotifyOnUIThread, | 63 &UserPolicyTokenCache::NotifyOnUIThread, |
| 62 device_token, | 64 device_token, |
| 63 device_id)); | 65 device_id)); |
| 64 } | 66 } |
| 65 | 67 |
| 66 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token, | 68 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token, |
| 67 const std::string& device_id) { | 69 const std::string& device_id) { |
| 68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 69 if (delegate_.get()) | 71 data_->set_device_id(device_id); |
|
pastarmovj
2011/07/06 12:11:57
Is it secure to assume data_ is not NULL here alwa
gfeher
2011/07/06 15:14:20
Good point. Done.
| |
| 70 delegate_->OnTokenCacheLoaded(token, device_id); | 72 data_->SetDeviceToken(token, true); |
| 73 data_->NotifyDeviceTokenChanged(); | |
| 71 } | 74 } |
| 72 | 75 |
| 73 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, | 76 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, |
| 74 const std::string& device_id) { | 77 const std::string& device_id) { |
| 75 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 78 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 76 em::DeviceCredentials device_credentials; | 79 em::DeviceCredentials device_credentials; |
| 77 device_credentials.set_device_token(token); | 80 device_credentials.set_device_token(token); |
| 78 device_credentials.set_device_id(device_id); | 81 device_credentials.set_device_id(device_id); |
| 79 std::string data; | 82 std::string data; |
| 80 bool success = device_credentials.SerializeToString(&data); | 83 bool success = device_credentials.SerializeToString(&data); |
| 81 if (!success) { | 84 if (!success) { |
| 82 LOG(WARNING) << "Failed serialize device token data, will not write " | 85 LOG(WARNING) << "Failed serialize device token data, will not write " |
| 83 << cache_file_.value(); | 86 << cache_file_.value(); |
| 84 return; | 87 return; |
| 85 } | 88 } |
| 86 | 89 |
| 87 if (!file_util::CreateDirectory(cache_file_.DirName())) { | 90 if (!file_util::CreateDirectory(cache_file_.DirName())) { |
| 88 LOG(WARNING) << "Failed to create directory " | 91 LOG(WARNING) << "Failed to create directory " |
| 89 << cache_file_.DirName().value(); | 92 << cache_file_.DirName().value(); |
| 90 return; | 93 return; |
| 91 } | 94 } |
| 92 | 95 |
| 93 file_util::WriteFile(cache_file_, data.c_str(), data.length()); | 96 file_util::WriteFile(cache_file_, data.c_str(), data.length()); |
| 94 } | 97 } |
| 95 | 98 |
| 99 void UserPolicyTokenCache::OnDeviceTokenChanged() { | |
| 100 if (!data_->device_token().empty() && | |
| 101 !data_->device_id().empty()) { | |
| 102 // This will also happen after loading the cache. | |
| 103 Store(data_->device_token(), data_->device_id()); | |
| 104 } | |
| 105 } | |
| 106 | |
| 107 void UserPolicyTokenCache::OnCredentialsChanged() { | |
| 108 } | |
| 109 | |
| 110 void UserPolicyTokenCache::OnPolicyDataGoingAway() { | |
| 111 data_->RemoveObserver(this); | |
| 112 data_ = NULL; | |
| 113 } | |
| 114 | |
| 96 } // namespace policy | 115 } // namespace policy |
| OLD | NEW |