| Index: chrome/browser/ui/auto_login_info_bar_delegate.cc
|
| diff --git a/chrome/browser/ui/auto_login_info_bar_delegate.cc b/chrome/browser/ui/auto_login_info_bar_delegate.cc
|
| index 5bd0552d8ffebe464bceb90d96e4810a38c109aa..0c5c26056e2004d4c5117c380f0ac56fbe0b6f48 100644
|
| --- a/chrome/browser/ui/auto_login_info_bar_delegate.cc
|
| +++ b/chrome/browser/ui/auto_login_info_bar_delegate.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "chrome/browser/ui/auto_login_info_bar_delegate.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "chrome/browser/browser_process.h"
|
| @@ -12,7 +14,7 @@
|
| #include "chrome/browser/infobars/infobar_tab_helper.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/signin/token_service.h"
|
| +#include "chrome/browser/signin/ubertoken_fetcher.h"
|
| #include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h"
|
| @@ -73,18 +75,16 @@ enum {
|
| // auto-login. It holds context information needed while re-issuing service
|
| // tokens using the TokenService, gets the browser cookies with the TokenAuth
|
| // API, and finally redirects the user to the correct page.
|
| -class AutoLoginRedirector : public content::NotificationObserver {
|
| +class AutoLoginRedirector : public UbertokenConsumer {
|
| public:
|
| - AutoLoginRedirector(TokenService* token_service,
|
| - NavigationController* navigation_controller,
|
| + AutoLoginRedirector(NavigationController* navigation_controller,
|
| const std::string& args);
|
| virtual ~AutoLoginRedirector();
|
|
|
| private:
|
| - // content::NotificationObserver override.
|
| - virtual void Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) OVERRIDE;
|
| + // Overriden from UbertokenConsumer:
|
| + virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
|
| + virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
|
|
|
| // Redirect tab to MergeSession URL, logging the user in and navigating
|
| // to the desired page.
|
| @@ -92,56 +92,34 @@ class AutoLoginRedirector : public content::NotificationObserver {
|
|
|
| NavigationController* navigation_controller_;
|
| const std::string args_;
|
| - content::NotificationRegistrar registrar_;
|
| + scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector);
|
| };
|
|
|
| AutoLoginRedirector::AutoLoginRedirector(
|
| - TokenService* token_service,
|
| NavigationController* navigation_controller,
|
| const std::string& args)
|
| : navigation_controller_(navigation_controller),
|
| args_(args) {
|
| - // Register to receive notification for new tokens and then force the tokens
|
| - // to be re-issued. The token service guarantees to fire either
|
| - // TOKEN_AVAILABLE or TOKEN_REQUEST_FAILED, so we will get at least one or
|
| - // the other, allow AutoLoginRedirector to delete itself correctly.
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_TOKEN_AVAILABLE,
|
| - content::Source<TokenService>(token_service));
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
|
| - content::Source<TokenService>(token_service));
|
| - token_service->StartFetchingTokens();
|
| + ubertoken_fetcher_.reset(new UbertokenFetcher(
|
| + Profile::FromBrowserContext(navigation_controller_->GetBrowserContext()),
|
| + this));
|
| + ubertoken_fetcher_->StartFetchingToken();
|
| }
|
|
|
| AutoLoginRedirector::~AutoLoginRedirector() {
|
| }
|
|
|
| -void AutoLoginRedirector::Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - DCHECK(type == chrome::NOTIFICATION_TOKEN_AVAILABLE ||
|
| - type == chrome::NOTIFICATION_TOKEN_REQUEST_FAILED);
|
| -
|
| - // We are only interested in GAIA tokens.
|
| - if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
|
| - TokenService::TokenAvailableDetails* tok_details =
|
| - content::Details<TokenService::TokenAvailableDetails>(details).ptr();
|
| - if (tok_details->service() == GaiaConstants::kGaiaService) {
|
| - RedirectToMergeSession(tok_details->token());
|
| - delete this;
|
| - }
|
| - } else {
|
| - TokenService::TokenRequestFailedDetails* tok_details =
|
| - content::Details<TokenService::TokenRequestFailedDetails>(details).
|
| - ptr();
|
| - if (tok_details->service() == GaiaConstants::kGaiaService) {
|
| - LOG(WARNING) << "AutoLoginRedirector: token request failed";
|
| - delete this;
|
| - }
|
| - }
|
| +void AutoLoginRedirector::OnUbertokenSuccess(const std::string& token) {
|
| + RedirectToMergeSession(token);
|
| + MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| +}
|
| +
|
| +void AutoLoginRedirector::OnUbertokenFailure(
|
| + const GoogleServiceAuthError& error) {
|
| + LOG(WARNING) << "AutoLoginRedirector: token request failed";
|
| + MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
|
|
| void AutoLoginRedirector::RedirectToMergeSession(const std::string& token) {
|
| @@ -203,12 +181,8 @@ string16 AutoLoginInfoBarDelegate::GetButtonLabel(
|
| }
|
|
|
| bool AutoLoginInfoBarDelegate::Accept() {
|
| - TokenService* token_service =
|
| - TabContentsWrapper::GetCurrentWrapperForContents(
|
| - owner()->web_contents())->profile()->GetTokenService();
|
| // AutoLoginRedirector deletes itself.
|
| - new AutoLoginRedirector(token_service,
|
| - &owner()->web_contents()->GetController(), args_);
|
| + new AutoLoginRedirector(&owner()->web_contents()->GetController(), args_);
|
| RecordHistogramAction(HISTOGRAM_ACCEPTED);
|
| button_pressed_ = true;
|
| return true;
|
|
|