summaryrefslogtreecommitdiffstats
path: root/chrome/browser/policy/device_token_fetcher.cc
diff options
context:
space:
mode:
authorjkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-17 14:13:14 +0000
committerjkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-17 14:13:14 +0000
commit9e8e320c692518f804d9c29754029c41889244fa (patch)
tree9b12e170ab5630dbe4ff782c612fb455a37170dd /chrome/browser/policy/device_token_fetcher.cc
parentfa1aa90a61f30450b6dd453ea03174a3fe0fa64d (diff)
downloadchromium_src-9e8e320c692518f804d9c29754029c41889244fa.zip
chromium_src-9e8e320c692518f804d9c29754029c41889244fa.tar.gz
chromium_src-9e8e320c692518f804d9c29754029c41889244fa.tar.bz2
CrOS policies: Store device ID with device token
BUG=62798 TEST=unit tests: DeviceTokenFetcherTest.StoreAndLoad Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=66415 Review URL: http://codereview.chromium.org/4949003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66435 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/policy/device_token_fetcher.cc')
-rw-r--r--chrome/browser/policy/device_token_fetcher.cc56
1 files changed, 39 insertions, 17 deletions
diff --git a/chrome/browser/policy/device_token_fetcher.cc b/chrome/browser/policy/device_token_fetcher.cc
index a1ba00e..e7f2acc 100644
--- a/chrome/browser/policy/device_token_fetcher.cc
+++ b/chrome/browser/policy/device_token_fetcher.cc
@@ -9,6 +9,7 @@
#include "base/singleton.h"
#include "chrome/browser/guid.h"
#include "chrome/browser/net/gaia/token_service.h"
+#include "chrome/browser/policy/proto/device_management_local.pb.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/net/gaia/gaia_constants.h"
#include "chrome/common/notification_details.h"
@@ -18,6 +19,8 @@
namespace policy {
+namespace em = enterprise_management;
+
DeviceTokenFetcher::DeviceTokenFetcher(
DeviceManagementBackend* backend,
const FilePath& token_path)
@@ -64,7 +67,8 @@ void DeviceTokenFetcher::HandleRegisterResponse(
FROM_HERE,
NewRunnableFunction(&WriteDeviceTokenToDisk,
token_path_,
- device_token_));
+ device_token_,
+ device_id_));
SetState(kStateHasDeviceToken);
} else {
NOTREACHED();
@@ -93,19 +97,23 @@ void DeviceTokenFetcher::StartFetching() {
void DeviceTokenFetcher::AttemptTokenLoadFromDisk() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- FetcherState new_state = kStateFailure;
if (file_util::PathExists(token_path_)) {
- std::string device_token;
- if (file_util::ReadFileToString(token_path_, &device_token_)) {
- new_state = kStateHasDeviceToken;
+ std::string data;
+ em::DeviceCredentials device_credentials;
+ if (file_util::ReadFileToString(token_path_, &data) &&
+ device_credentials.ParseFromArray(data.c_str(), data.size())) {
+ device_token_ = device_credentials.device_token();
+ device_id_ = device_credentials.device_id();
+ if (!device_token_.empty() && !device_id_.empty()) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ NewRunnableMethod(this,
+ &DeviceTokenFetcher::SetState,
+ kStateHasDeviceToken));
+ return;
+ }
}
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- NewRunnableMethod(this,
- &DeviceTokenFetcher::SetState,
- new_state));
- return;
}
BrowserThread::PostTask(
@@ -128,7 +136,7 @@ void DeviceTokenFetcher::SendServerRequestIfPossible() {
em::DeviceRegisterRequest register_request;
SetState(kStateRequestingDeviceTokenFromServer);
backend_->ProcessRegisterRequest(auth_token_,
- GenerateNewDeviceID(),
+ GetDeviceID(),
register_request,
this);
}
@@ -145,6 +153,15 @@ std::string DeviceTokenFetcher::GetDeviceToken() {
return device_token_;
}
+std::string DeviceTokenFetcher::GetDeviceID() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ // As long as access to this is only allowed from the UI thread, no explicit
+ // locking is necessary to prevent the ID from being generated twice.
+ if (device_id_.empty())
+ device_id_ = GenerateNewDeviceID();
+ return device_id_;
+}
+
void DeviceTokenFetcher::SetState(FetcherState state) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (state_ == state)
@@ -174,10 +191,15 @@ bool DeviceTokenFetcher::IsTokenValid() const {
// static
void DeviceTokenFetcher::WriteDeviceTokenToDisk(
const FilePath& path,
- const std::string& device_token) {
- file_util::WriteFile(path,
- device_token.c_str(),
- device_token.length());
+ const std::string& device_token,
+ const std::string& device_id) {
+ em::DeviceCredentials device_credentials;
+ device_credentials.set_device_token(device_token);
+ device_credentials.set_device_id(device_id);
+ std::string data;
+ bool no_error = device_credentials.SerializeToString(&data);
+ DCHECK(no_error);
+ file_util::WriteFile(path, data.c_str(), data.length());
}
// static