Chromium Code Reviews| Index: chrome/browser/policy/device_token_fetcher.cc |
| diff --git a/chrome/browser/policy/device_token_fetcher.cc b/chrome/browser/policy/device_token_fetcher.cc |
| index a1ba00e9a172e3103fe8ee52ebcbfba96fd05dc9..00a3f501b02bcef023710363c170e7677d55f714 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(); |
| @@ -95,8 +99,12 @@ 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_)) { |
| + std::string data; |
| + em::DeviceToken stored_device_token; |
| + if (file_util::ReadFileToString(token_path_, &data) && |
| + stored_device_token.ParseFromArray(data.c_str(), data.size())) { |
| + device_token_ = stored_device_token.device_token(); |
| + device_id_ = stored_device_token.device_id(); |
| new_state = kStateHasDeviceToken; |
| } |
| 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,10 +153,21 @@ 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(); |
| + } |
|
Mattias Nissler (ping if slow)
2010/11/15 18:02:51
no curlies needed here.
Jakob Kummerow (corp)
2010/11/16 09:37:02
Alright, alright, I give up.
Done.
Mattias Nissler (ping if slow)
2010/11/16 09:58:14
:)
|
| + return device_id_; |
| +} |
| + |
| void DeviceTokenFetcher::SetState(FetcherState state) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - if (state_ == state) |
| + if (state_ == state) { |
| return; |
| + } |
|
Mattias Nissler (ping if slow)
2010/11/15 18:02:51
Same here? Or do you have a reason for changing th
Jakob Kummerow (corp)
2010/11/16 09:37:02
Done.
|
| state_ = state; |
| if (state == kStateFailure) { |
| device_token_load_complete_event_.Signal(); |
| @@ -174,10 +193,16 @@ bool DeviceTokenFetcher::IsTokenValid() const { |
| // static |
| void DeviceTokenFetcher::WriteDeviceTokenToDisk( |
| const FilePath& path, |
| - const std::string& device_token) { |
| + const std::string& device_token, |
| + const std::string& device_id) { |
| + em::DeviceToken storable_device_token; |
| + storable_device_token.set_device_token(device_token); |
| + storable_device_token.set_device_id(device_id); |
| + std::string data; |
| + storable_device_token.SerializeToString(&data); |
|
Mattias Nissler (ping if slow)
2010/11/15 18:02:51
Should probably put a DCHECK() for the SerializeTo
Jakob Kummerow (corp)
2010/11/16 09:37:02
Done.
|
| file_util::WriteFile(path, |
| - device_token.c_str(), |
| - device_token.length()); |
| + data.c_str(), |
| + data.length()); |
|
Mattias Nissler (ping if slow)
2010/11/15 18:02:51
Hm, doesn't this fit on line 203?
Jakob Kummerow (corp)
2010/11/16 09:37:02
Done.
|
| } |
| // static |