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 "chrome/browser/policy/enterprise_metrics.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 UserPolicyTokenCache::Delegate::~Delegate() {} |
15 | 16 |
16 UserPolicyTokenCache::UserPolicyTokenCache( | 17 UserPolicyTokenCache::UserPolicyTokenCache( |
17 const base::WeakPtr<Delegate>& delegate, | 18 const base::WeakPtr<Delegate>& delegate, |
18 const FilePath& cache_file) | 19 const FilePath& cache_file) |
19 : delegate_(delegate), | 20 : delegate_(delegate), |
20 cache_file_(cache_file) {} | 21 cache_file_(cache_file) {} |
21 | 22 |
22 void UserPolicyTokenCache::Load() { | 23 void UserPolicyTokenCache::Load() { |
23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 25 em::LogTokenOperation(em::kTokenLoadRequested); |
24 BrowserThread::PostTask( | 26 BrowserThread::PostTask( |
25 BrowserThread::FILE, FROM_HERE, | 27 BrowserThread::FILE, FROM_HERE, |
26 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread)); | 28 NewRunnableMethod(this, &UserPolicyTokenCache::LoadOnFileThread)); |
27 } | 29 } |
28 | 30 |
29 void UserPolicyTokenCache::Store(const std::string& token, | 31 void UserPolicyTokenCache::Store(const std::string& token, |
30 const std::string& device_id) { | 32 const std::string& device_id) { |
31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 33 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 34 em::LogTokenOperation(em::kTokenStoreRequested); |
32 BrowserThread::PostTask( | 35 BrowserThread::PostTask( |
33 BrowserThread::FILE, FROM_HERE, | 36 BrowserThread::FILE, FROM_HERE, |
34 NewRunnableMethod(this, | 37 NewRunnableMethod(this, |
35 &UserPolicyTokenCache::StoreOnFileThread, | 38 &UserPolicyTokenCache::StoreOnFileThread, |
36 token, | 39 token, |
37 device_id)); | 40 device_id)); |
38 } | 41 } |
39 | 42 |
40 UserPolicyTokenCache::~UserPolicyTokenCache() { | 43 UserPolicyTokenCache::~UserPolicyTokenCache() { |
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(); |
| 58 } else { |
| 59 em::LogTokenOperation(em::kTokenLoadFailed); |
55 } | 60 } |
56 } | 61 } |
57 | 62 |
58 BrowserThread::PostTask( | 63 BrowserThread::PostTask( |
59 BrowserThread::UI, FROM_HERE, | 64 BrowserThread::UI, FROM_HERE, |
60 NewRunnableMethod(this, | 65 NewRunnableMethod(this, |
61 &UserPolicyTokenCache::NotifyOnUIThread, | 66 &UserPolicyTokenCache::NotifyOnUIThread, |
62 device_token, | 67 device_token, |
63 device_id)); | 68 device_id)); |
64 } | 69 } |
65 | 70 |
66 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token, | 71 void UserPolicyTokenCache::NotifyOnUIThread(const std::string& token, |
67 const std::string& device_id) { | 72 const std::string& device_id) { |
68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 73 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
69 if (delegate_.get()) | 74 if (delegate_.get()) |
70 delegate_->OnTokenCacheLoaded(token, device_id); | 75 delegate_->OnTokenCacheLoaded(token, device_id); |
71 } | 76 } |
72 | 77 |
73 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, | 78 void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, |
74 const std::string& device_id) { | 79 const std::string& device_id) { |
75 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 80 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
76 em::DeviceCredentials device_credentials; | 81 em::DeviceCredentials device_credentials; |
77 device_credentials.set_device_token(token); | 82 device_credentials.set_device_token(token); |
78 device_credentials.set_device_id(device_id); | 83 device_credentials.set_device_id(device_id); |
79 std::string data; | 84 std::string data; |
80 bool success = device_credentials.SerializeToString(&data); | 85 bool success = device_credentials.SerializeToString(&data); |
81 if (!success) { | 86 if (!success) { |
82 LOG(WARNING) << "Failed serialize device token data, will not write " | 87 LOG(WARNING) << "Failed serialize device token data, will not write " |
83 << cache_file_.value(); | 88 << cache_file_.value(); |
| 89 em::LogTokenOperation(em::kTokenStoreFailed); |
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(); |
| 96 em::LogTokenOperation(em::kTokenStoreFailed); |
90 return; | 97 return; |
91 } | 98 } |
92 | 99 |
93 file_util::WriteFile(cache_file_, data.c_str(), data.length()); | 100 int size = data.size(); |
| 101 if (file_util::WriteFile(cache_file_, data.c_str(), size) != size) { |
| 102 LOG(WARNING) << "Failed to write " << cache_file_.value(); |
| 103 em::LogTokenOperation(em::kTokenStoreFailed); |
| 104 } |
94 } | 105 } |
95 | 106 |
96 } // namespace policy | 107 } // namespace policy |
OLD | NEW |