| Index: chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc
|
| diff --git a/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc b/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc
|
| index 16a4e12aa76fb6b9504299b726f97dff9b5acff5..54c2922ce1442852b843a5838cf78b1839a66474 100644
|
| --- a/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc
|
| +++ b/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/signin/chrome_signin_client_factory.h"
|
| #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| #include "chrome/browser/signin/signin_manager_factory.h"
|
| #include "components/signin/core/browser/profile_oauth2_token_service.h"
|
| @@ -44,6 +45,10 @@ GaiaWebAuthFlow::GaiaWebAuthFlow(Delegate* delegate,
|
| "origin=chrome-extension://%s/&"
|
| "redirect_uri=%s:/%s&"
|
| "hl=%s";
|
| + // Additional parameters to pass if device_id is enabled.
|
| + const char kOAuth2AuthorizeFormatDeviceIdAddendum[] =
|
| + "&device_id=%s&"
|
| + "device_type=chrome";
|
|
|
| std::vector<std::string> scopes(token_key->scopes.begin(),
|
| token_key->scopes.end());
|
| @@ -51,19 +56,31 @@ GaiaWebAuthFlow::GaiaWebAuthFlow(Delegate* delegate,
|
| base::SplitString(oauth2_client_id, '.', &client_id_parts);
|
| std::reverse(client_id_parts.begin(), client_id_parts.end());
|
| redirect_scheme_ = JoinString(client_id_parts, '.');
|
| + std::string signin_scoped_device_id;
|
| + // profile_ can be nullptr in unittests.
|
| + SigninClient* signin_client =
|
| + profile_ ? ChromeSigninClientFactory::GetForProfile(profile_) : nullptr;
|
| + if (signin_client)
|
| + signin_scoped_device_id = signin_client->GetSigninScopedDeviceId();
|
|
|
| redirect_path_prefix_ = base::StringPrintf(kOAuth2RedirectPathFormat,
|
| token_key->extension_id.c_str());
|
|
|
| - auth_url_ =
|
| - GaiaUrls::GetInstance()->oauth2_auth_url().Resolve(base::StringPrintf(
|
| - kOAuth2AuthorizeFormat,
|
| - oauth2_client_id.c_str(),
|
| - net::EscapeUrlEncodedData(JoinString(scopes, ' '), true).c_str(),
|
| - token_key->extension_id.c_str(),
|
| - redirect_scheme_.c_str(),
|
| - token_key->extension_id.c_str(),
|
| - locale.c_str()));
|
| + std::string oauth2_authorize_params = base::StringPrintf(
|
| + kOAuth2AuthorizeFormat,
|
| + oauth2_client_id.c_str(),
|
| + net::EscapeUrlEncodedData(JoinString(scopes, ' '), true).c_str(),
|
| + token_key->extension_id.c_str(),
|
| + redirect_scheme_.c_str(),
|
| + token_key->extension_id.c_str(),
|
| + locale.c_str());
|
| + if (!signin_scoped_device_id.empty()) {
|
| + oauth2_authorize_params += base::StringPrintf(
|
| + kOAuth2AuthorizeFormatDeviceIdAddendum,
|
| + net::EscapeUrlEncodedData(signin_scoped_device_id, true).c_str());
|
| + }
|
| + auth_url_ = GaiaUrls::GetInstance()->oauth2_auth_url().Resolve(
|
| + oauth2_authorize_params);
|
| }
|
|
|
| GaiaWebAuthFlow::~GaiaWebAuthFlow() {
|
|
|