Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Side by Side Diff: chrome/browser/policy/user_policy_token_cache.cc

Issue 7298012: Consolidate data storage and notifications in the cloud policy subsystem (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments + tweaks Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "chrome/browser/policy/proto/device_management_local.pb.h"
8 #include "content/browser/browser_thread.h" 9 #include "content/browser/browser_thread.h"
9 10
10 namespace policy { 11 namespace policy {
11 12
12 namespace em = enterprise_management; 13 namespace em = enterprise_management;
13 14
14 UserPolicyTokenCache::Delegate::~Delegate() {}
15
16 UserPolicyTokenCache::UserPolicyTokenCache( 15 UserPolicyTokenCache::UserPolicyTokenCache(
17 const base::WeakPtr<Delegate>& delegate, 16 const base::WeakPtr<CloudPolicyDataStore>& data_store,
18 const FilePath& cache_file) 17 const FilePath& cache_file)
19 : delegate_(delegate), 18 : data_store_(data_store),
20 cache_file_(cache_file) {} 19 cache_file_(cache_file) {
20 data_store_->AddObserver(this);
21 }
21 22
22 void UserPolicyTokenCache::Load() { 23 void UserPolicyTokenCache::Load() {
23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
24 BrowserThread::PostTask( 25 BrowserThread::PostTask(
25 BrowserThread::FILE, FROM_HERE, 26 BrowserThread::FILE, FROM_HERE,
26 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread)); 27 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread));
27 } 28 }
28 29
29 void UserPolicyTokenCache::Store(const std::string& token, 30 void UserPolicyTokenCache::Store(const std::string& token,
30 const std::string& device_id) { 31 const std::string& device_id) {
31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
32 BrowserThread::PostTask( 33 BrowserThread::PostTask(
33 BrowserThread::FILE, FROM_HERE, 34 BrowserThread::FILE, FROM_HERE,
34 NewRunnableMethod(this, 35 NewRunnableMethod(this,
35 &UserPolicyTokenCache::StoreOnFileThread, 36 &UserPolicyTokenCache::StoreOnFileThread,
36 token, 37 token,
37 device_id)); 38 device_id));
38 } 39 }
39 40
40 UserPolicyTokenCache::~UserPolicyTokenCache() { 41 UserPolicyTokenCache::~UserPolicyTokenCache() {
42 if (data_store_)
43 data_store_->RemoveObserver(this);
41 } 44 }
42 45
43 void UserPolicyTokenCache::LoadOnFileThread() { 46 void UserPolicyTokenCache::LoadOnFileThread() {
44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 47 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
45 std::string device_token; 48 std::string device_token;
46 std::string device_id; 49 std::string device_id;
47 50
48 if (file_util::PathExists(cache_file_)) { 51 if (file_util::PathExists(cache_file_)) {
49 std::string data; 52 std::string data;
50 em::DeviceCredentials device_credentials; 53 em::DeviceCredentials device_credentials;
51 if (file_util::ReadFileToString(cache_file_, &data) && 54 if (file_util::ReadFileToString(cache_file_, &data) &&
52 device_credentials.ParseFromArray(data.c_str(), data.size())) { 55 device_credentials.ParseFromArray(data.c_str(), data.size())) {
53 device_token = device_credentials.device_token(); 56 device_token = device_credentials.device_token();
54 device_id = device_credentials.device_id(); 57 device_id = device_credentials.device_id();
55 } 58 }
56 } 59 }
57 60
58 BrowserThread::PostTask( 61 BrowserThread::PostTask(
59 BrowserThread::UI, FROM_HERE, 62 BrowserThread::UI, FROM_HERE,
60 NewRunnableMethod(this, 63 NewRunnableMethod(this,
61 &UserPolicyTokenCache::NotifyOnUIThread, 64 &UserPolicyTokenCache::NotifyOnUIThread,
62 device_token, 65 device_token,
63 device_id)); 66 device_id));
64 } 67 }
65 68
66 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token, 69 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token,
67 const std::string& device_id) { 70 const std::string& device_id) {
68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
69 if (delegate_.get()) 72 if (data_store_) {
70 delegate_->OnTokenCacheLoaded(token, device_id); 73 data_store_->set_device_id(device_id);
74 data_store_->SetDeviceToken(token, true);
75 data_store_->NotifyDeviceTokenChanged();
76 }
71 } 77 }
72 78
73 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, 79 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token,
74 const std::string& device_id) { 80 const std::string& device_id) {
75 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
76 em::DeviceCredentials device_credentials; 82 em::DeviceCredentials device_credentials;
77 device_credentials.set_device_token(token); 83 device_credentials.set_device_token(token);
78 device_credentials.set_device_id(device_id); 84 device_credentials.set_device_id(device_id);
79 std::string data; 85 std::string data;
80 bool success = device_credentials.SerializeToString(&data); 86 bool success = device_credentials.SerializeToString(&data);
81 if (!success) { 87 if (!success) {
82 LOG(WARNING) << "Failed serialize device token data, will not write " 88 LOG(WARNING) << "Failed serialize device token data, will not write "
83 << cache_file_.value(); 89 << cache_file_.value();
84 return; 90 return;
85 } 91 }
86 92
87 if (!file_util::CreateDirectory(cache_file_.DirName())) { 93 if (!file_util::CreateDirectory(cache_file_.DirName())) {
88 LOG(WARNING) << "Failed to create directory " 94 LOG(WARNING) << "Failed to create directory "
89 << cache_file_.DirName().value(); 95 << cache_file_.DirName().value();
90 return; 96 return;
91 } 97 }
92 98
93 file_util::WriteFile(cache_file_, data.c_str(), data.length()); 99 file_util::WriteFile(cache_file_, data.c_str(), data.length());
94 } 100 }
95 101
102 void UserPolicyTokenCache::OnDeviceTokenChanged() {
103 if (!data_store_->device_token().empty() &&
104 !data_store_->device_id().empty()) {
105 // This will also happen after loading the cache.
106 Store(data_store_->device_token(), data_store_->device_id());
107 }
108 }
109
110 void UserPolicyTokenCache::OnCredentialsChanged() {
111 }
112
113 void UserPolicyTokenCache::OnDataStoreGoingAway() {
114 data_store_->RemoveObserver(this);
115 }
116
96 } // namespace policy 117 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698