diff options
author | jkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-17 14:13:14 +0000 |
---|---|---|
committer | jkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-17 14:13:14 +0000 |
commit | 9e8e320c692518f804d9c29754029c41889244fa (patch) | |
tree | 9b12e170ab5630dbe4ff782c612fb455a37170dd /chrome/browser/policy/device_token_fetcher.cc | |
parent | fa1aa90a61f30450b6dd453ea03174a3fe0fa64d (diff) | |
download | chromium_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.cc | 56 |
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 |