| Index: chrome/browser/signin/chrome_signin_helper.cc
|
| diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc
|
| index a0b599cb28aa166529a06e5ae147e18faf419f18..c7639a5191f9d1546a5121321ed057c5706e76fb 100644
|
| --- a/chrome/browser/signin/chrome_signin_helper.cc
|
| +++ b/chrome/browser/signin/chrome_signin_helper.cc
|
| @@ -11,6 +11,8 @@
|
| #include "chrome/browser/profiles/profile_io_data.h"
|
| #include "chrome/browser/signin/account_reconcilor_factory.h"
|
| #include "chrome/browser/signin/chrome_signin_client.h"
|
| +#include "chrome/browser/signin/chrome_signin_client_factory.h"
|
| +#include "chrome/browser/signin/dice_response_handler.h"
|
| #include "chrome/browser/tab_contents/tab_util.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/common/url_constants.h"
|
| @@ -105,6 +107,29 @@ void ProcessMirrorHeaderUIThread(
|
| #endif // !defined(OS_ANDROID)
|
| }
|
|
|
| +#if !defined(OS_ANDROID)
|
| +void ProcessDiceHeaderUIThread(
|
| + const DiceResponseParams& dice_params,
|
| + const content::ResourceRequestInfo::WebContentsGetter&
|
| + web_contents_getter) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| + DCHECK_EQ(switches::AccountConsistencyMethod::kDice,
|
| + switches::GetAccountConsistencyMethod());
|
| +
|
| + content::WebContents* web_contents = web_contents_getter.Run();
|
| + if (!web_contents)
|
| + return;
|
| +
|
| + Profile* profile =
|
| + Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| + DCHECK(!profile->IsOffTheRecord());
|
| +
|
| + DiceResponseHandler* dice_response_handler =
|
| + DiceResponseHandler::GetForProfile(profile);
|
| + dice_response_handler->ProcessDiceHeader(dice_params);
|
| +}
|
| +#endif // !defined(OS_ANDROID)
|
| +
|
| // Looks for the X-Chrome-Manage-Accounts response header, and if found,
|
| // tries to show the avatar bubble in the browser identified by the
|
| // child/route id. Must be called on IO thread.
|
| @@ -158,8 +183,11 @@ void ProcessMirrorResponseHeaderIfExists(
|
| }
|
|
|
| #if !defined(OS_ANDROID)
|
| -void ProcessDiceResponseHeaderIfExists(net::URLRequest* request,
|
| - ProfileIOData* io_data) {
|
| +void ProcessDiceResponseHeaderIfExists(
|
| + net::URLRequest* request,
|
| + ProfileIOData* io_data,
|
| + const content::ResourceRequestInfo::WebContentsGetter&
|
| + web_contents_getter) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
|
|
| if (io_data->IsOffTheRecord())
|
| @@ -194,9 +222,9 @@ void ProcessDiceResponseHeaderIfExists(net::URLRequest* request,
|
| if (params.user_intention == DiceAction::NONE)
|
| return;
|
|
|
| - // TODO(droger): Process the Dice header: on sign-in, exchange the
|
| - // authorization code for a refresh token, on sign-out just follow the
|
| - // sign-out URL.
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::UI, FROM_HERE,
|
| + base::Bind(ProcessDiceHeaderUIThread, params, web_contents_getter));
|
| }
|
| #endif // !defined(OS_ANDROID)
|
|
|
| @@ -252,15 +280,14 @@ void ProcessAccountConsistencyResponseHeaders(
|
| // See if the response contains the X-Chrome-Manage-Accounts header. If so
|
| // show the profile avatar bubble so that user can complete signin/out
|
| // action the native UI.
|
| - signin::ProcessMirrorResponseHeaderIfExists(request, io_data,
|
| - web_contents_getter);
|
| + ProcessMirrorResponseHeaderIfExists(request, io_data, web_contents_getter);
|
| } else {
|
| -// This is a redirect.
|
| + // This is a redirect.
|
|
|
| #if !defined(OS_ANDROID)
|
| // Process the Dice header: on sign-in, exchange the authorization code for
|
| // a refresh token, on sign-out just follow the sign-out URL.
|
| - signin::ProcessDiceResponseHeaderIfExists(request, io_data);
|
| + ProcessDiceResponseHeaderIfExists(request, io_data, web_contents_getter);
|
| #endif
|
| }
|
| }
|
|
|