diff options
author | guohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-14 19:38:22 +0000 |
---|---|---|
committer | guohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-14 19:38:22 +0000 |
commit | 011b84581e26d63f891bc0fcc9f9c91d7a3d51fd (patch) | |
tree | 73a7f4b82ce96fc1ac91a534025a2a8e554b632d | |
parent | edc0de329de9d0a1fe3d2a4c07db9eee17666150 (diff) | |
download | chromium_src-011b84581e26d63f891bc0fcc9f9c91d7a3d51fd.zip chromium_src-011b84581e26d63f891bc0fcc9f9c91d7a3d51fd.tar.gz chromium_src-011b84581e26d63f891bc0fcc9f9c91d7a3d51fd.tar.bz2 |
Close tab after adding a saml account
BUG=367232
Review URL: https://codereview.chromium.org/335883004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277248 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/signin/signin_promo.cc | 16 | ||||
-rw-r--r-- | chrome/browser/signin/signin_promo.h | 11 | ||||
-rw-r--r-- | chrome/browser/ui/webui/signin/inline_login_handler.cc | 19 | ||||
-rw-r--r-- | chrome/browser/ui/webui/signin/inline_login_handler_impl.cc | 15 | ||||
-rw-r--r-- | chrome/browser/ui/webui/signin/inline_login_handler_impl.h | 4 |
5 files changed, 52 insertions, 13 deletions
diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc index d35a5d1..830b34a 100644 --- a/chrome/browser/signin/signin_promo.cc +++ b/chrome/browser/signin/signin_promo.cc @@ -44,11 +44,6 @@ using net::GetValueForKeyInQuery; namespace { -const char kSignInPromoQueryKeyAutoClose[] = "auto_close"; -const char kSignInPromoQueryKeyContinue[] = "continue"; -const char kSignInPromoQueryKeySource[] = "source"; -const char kSignInPromoQueryKeyConstrained[] = "constrained"; - // Gaia cannot support about:blank as a continue URL, so using a hosted blank // page instead. const char kSignInLandingUrlPrefix[] = @@ -292,6 +287,17 @@ bool IsAutoCloseEnabledInURL(const GURL& url) { return false; } +bool ShouldShowAccountManagement(const GURL& url) { + std::string value; + if (GetValueForKeyInQuery( + url, kSignInPromoQueryKeyShowAccountManagement, &value)) { + int enabled = 0; + if (base::StringToInt(value, &enabled) && enabled == 1) + return true; + } + return false; +} + bool IsContinueUrlForWebBasedSigninFlow(const GURL& url) { GURL::Replacements replacements; replacements.ClearQuery(); diff --git a/chrome/browser/signin/signin_promo.h b/chrome/browser/signin/signin_promo.h index 496bfc4..61fc9aa 100644 --- a/chrome/browser/signin/signin_promo.h +++ b/chrome/browser/signin/signin_promo.h @@ -19,6 +19,13 @@ class PrefRegistrySyncable; // Utility functions for sign in promos. namespace signin { +const char kSignInPromoQueryKeyAutoClose[] = "auto_close"; +const char kSignInPromoQueryKeyContinue[] = "continue"; +const char kSignInPromoQueryKeySource[] = "source"; +const char kSignInPromoQueryKeyConstrained[] = "constrained"; +const char kSignInPromoQueryKeyShowAccountManagement[] = + "showAccountManagement"; + enum Source { SOURCE_START_PAGE = 0, // This must be first. SOURCE_NTP_LINK, @@ -82,6 +89,10 @@ Source GetSourceForPromoURL(const GURL& url); // Returns true if the auto_close parameter in the given URL is set to true. bool IsAutoCloseEnabledInURL(const GURL& url); +// Returns true if the showAccountManagement parameter in the given url is set +// to true. +bool ShouldShowAccountManagement(const GURL& url); + // Returns true if the given URL is the standard continue URL used with the // sync promo when the web-based flow is enabled. The query parameters // of the URL are ignored for this comparison. diff --git a/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chrome/browser/ui/webui/signin/inline_login_handler.cc index bbf94ad..67bc079 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler.cc @@ -57,7 +57,8 @@ void InlineLoginHandler::HandleInitializeMessage(const base::ListValue* args) { params.SetString( "continueUrl", - signin::GetLandingURL("source", static_cast<int>(source)).spec()); + signin::GetLandingURL(signin::kSignInPromoQueryKeySource, + static_cast<int>(source)).spec()); std::string default_email; if (source != signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT && @@ -77,9 +78,10 @@ void InlineLoginHandler::HandleInitializeMessage(const base::ListValue* args) { params.SetString("frameUrl", frame_url); std::string is_constrained; - net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained); + net::GetValueForKeyInQuery( + current_url, signin::kSignInPromoQueryKeyConstrained, &is_constrained); if (!is_constrained.empty()) - params.SetString("constrained", is_constrained); + params.SetString(signin::kSignInPromoQueryKeyConstrained, is_constrained); // TODO(rogerta): this needs to be passed on to gaia somehow. std::string read_only_email; @@ -106,9 +108,18 @@ void InlineLoginHandler::HandleSwitchToFullTabMessage( GURL main_frame_url(web_contents->GetURL()); main_frame_url = net::AppendOrReplaceQueryParameter( main_frame_url, "frameUrl", base::UTF16ToASCII(url_str)); + + // Adds extra parameters to the signin URL so that Chrome will close the tab + // and show the account management view of the avatar menu upon completion. + main_frame_url = net::AppendOrReplaceQueryParameter( + main_frame_url, signin::kSignInPromoQueryKeyAutoClose, "1"); + main_frame_url = net::AppendOrReplaceQueryParameter( + main_frame_url, signin::kSignInPromoQueryKeyShowAccountManagement, "1"); + chrome::NavigateParams params( Profile::FromWebUI(web_ui()), - net::AppendOrReplaceQueryParameter(main_frame_url, "constrained", "0"), + net::AppendOrReplaceQueryParameter( + main_frame_url, signin::kSignInPromoQueryKeyConstrained, "0"), content::PAGE_TRANSITION_AUTO_TOPLEVEL); chrome::Navigate(¶ms); diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index e7b3dc3..b43f239 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc @@ -18,6 +18,7 @@ #include "chrome/browser/sync/profile_sync_service.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/sync/one_click_signin_helper.h" #include "chrome/browser/ui/sync/one_click_signin_histogram.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -118,7 +119,8 @@ void InlineSigninHelper::OnSigninOAuthInformationAvailable( base::MessageLoop::current()->PostTask( FROM_HERE, base::Bind(&InlineLoginHandlerImpl::CloseTab, - handler_)); + handler_, + signin::ShouldShowAccountManagement(current_url_))); } } else { ProfileSyncService* sync_service = @@ -360,13 +362,14 @@ void InlineLoginHandlerImpl::SyncStarterCallback( base::MessageLoop::current()->PostTask( FROM_HERE, base::Bind(&InlineLoginHandlerImpl::CloseTab, - weak_factory_.GetWeakPtr())); + weak_factory_.GetWeakPtr(), + signin::ShouldShowAccountManagement(current_url))); } else { OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(contents, source); } } -void InlineLoginHandlerImpl::CloseTab() { +void InlineLoginHandlerImpl::CloseTab(bool show_account_management) { content::WebContents* tab = web_ui()->GetWebContents(); Browser* browser = chrome::FindBrowserWithWebContents(tab); if (browser) { @@ -378,5 +381,11 @@ void InlineLoginHandlerImpl::CloseTab() { index, TabStripModel::CommandCloseTab); } } + + if (show_account_management) { + browser->window()->ShowAvatarBubbleFromAvatarButton( + BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, + signin::GAIA_SERVICE_TYPE_NONE); + } } } diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h index 68ba86e..9273b04 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h @@ -32,7 +32,9 @@ class InlineLoginHandlerImpl : public InlineLoginHandler, Browser* GetDesktopBrowser(); void SyncStarterCallback(OneClickSigninSyncStarter::SyncSetupResult result); - void CloseTab(); + // Closes the current tab and shows the account management view of the avatar + // bubble if |show_account_management| is true. + void CloseTab(bool show_account_management); void HandleLoginError(const std::string& error_msg); private: |