Index: google_apis/gaia/fake_gaia.cc |
diff --git a/google_apis/gaia/fake_gaia.cc b/google_apis/gaia/fake_gaia.cc |
index 1bf87ca7fbb5018ed7d9113a807dd26d67604b84..d2478c2f8c635399c213a64db53c8bd764c0ecbf 100644 |
--- a/google_apis/gaia/fake_gaia.cc |
+++ b/google_apis/gaia/fake_gaia.cc |
@@ -136,6 +136,23 @@ FakeGaia::MergeSessionParams::MergeSessionParams() { |
FakeGaia::MergeSessionParams::~MergeSessionParams() { |
} |
+void FakeGaia::MergeSessionParams::Update(const MergeSessionParams& update) { |
+ auto maybe_update_field = |
+ [this, &update](std::string MergeSessionParams::*field) { |
+ if (!(update.*field).empty()) |
+ this->*field = update.*field; |
+ }; |
+ maybe_update_field(&MergeSessionParams::auth_sid_cookie); |
+ maybe_update_field(&MergeSessionParams::auth_lsid_cookie); |
+ maybe_update_field(&MergeSessionParams::auth_code); |
+ maybe_update_field(&MergeSessionParams::refresh_token); |
+ maybe_update_field(&MergeSessionParams::access_token); |
+ maybe_update_field(&MergeSessionParams::gaia_uber_token); |
+ maybe_update_field(&MergeSessionParams::session_sid_cookie); |
+ maybe_update_field(&MergeSessionParams::session_lsid_cookie); |
+ maybe_update_field(&MergeSessionParams::email); |
+} |
+ |
FakeGaia::FakeGaia() : issue_oauth_code_cookie_(false) { |
base::FilePath source_root_dir; |
PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir); |
@@ -171,6 +188,10 @@ void FakeGaia::SetMergeSessionParams( |
merge_session_params_ = params; |
} |
+void FakeGaia::UpdateMergeSessionParams(const MergeSessionParams& params) { |
+ merge_session_params_.Update(params); |
+} |
+ |
void FakeGaia::MapEmailToGaiaId(const std::string& email, |
const std::string& gaia_id) { |
DCHECK(!email.empty()); |
@@ -306,6 +327,18 @@ bool FakeGaia::GetQueryParameter(const std::string& query, |
return net::GetValueForKeyInQuery(query_url, key, value); |
} |
+std::string FakeGaia::GetDeviceIdByRefreshToken( |
+ const std::string& refresh_token) const { |
+ auto it = refresh_token_to_device_id_map_.find(refresh_token); |
achuithb
2015/05/26 06:28:21
const? Not sure if it works
dzhioev (left Google)
2015/05/26 21:18:15
Done.
|
+ return it != refresh_token_to_device_id_map_.end() ? it->second |
+ : std::string(); |
+} |
+ |
+void FakeGaia::SetRefreshTokenToDeviceIdMap( |
achuithb
2015/05/26 06:28:21
Shouldn't this be set_refresh_token_to_device_id_m
dzhioev (left Google)
2015/05/26 21:18:15
Inline setters are only allowed for trivial types.
|
+ const RefreshTokenToDeviceIdMap& refresh_token_to_device_id_map) { |
+ refresh_token_to_device_id_map_ = refresh_token_to_device_id_map; |
+} |
+ |
void FakeGaia::HandleMergeSession(const HttpRequest& request, |
BasicHttpResponse* http_response) { |
http_response->set_code(net::HTTP_UNAUTHORIZED); |
@@ -602,9 +635,27 @@ void FakeGaia::HandleAuthToken(const HttpRequest& request, |
return; |
} |
+ std::string device_id; |
+ if (GetQueryParameter(request.content, "device_id", &device_id)) { |
+ std::string device_type; |
+ if (!GetQueryParameter(request.content, "device_type", &device_type)) { |
+ http_response->set_code(net::HTTP_BAD_REQUEST); |
+ LOG(ERROR) << "'device_type' should be set if 'device_id' is set."; |
+ return; |
+ } |
+ if (device_type != "chrome") { |
+ http_response->set_code(net::HTTP_BAD_REQUEST); |
+ LOG(ERROR) << "'device_type' is not 'chrome'."; |
+ return; |
+ } |
+ } |
+ |
base::DictionaryValue response_dict; |
response_dict.SetString("refresh_token", |
merge_session_params_.refresh_token); |
+ if (!device_id.empty()) |
+ refresh_token_to_device_id_map_[merge_session_params_.refresh_token] = |
+ device_id; |
response_dict.SetString("access_token", |
merge_session_params_.access_token); |
response_dict.SetInteger("expires_in", 3600); |