summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-14 19:38:22 +0000
committerguohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-14 19:38:22 +0000
commit011b84581e26d63f891bc0fcc9f9c91d7a3d51fd (patch)
tree73a7f4b82ce96fc1ac91a534025a2a8e554b632d
parentedc0de329de9d0a1fe3d2a4c07db9eee17666150 (diff)
downloadchromium_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.cc16
-rw-r--r--chrome/browser/signin/signin_promo.h11
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler.cc19
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler_impl.cc15
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler_impl.h4
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(&params);
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: