Adding instrumentation to locate the source of jankiness
[chromium-blink-merge.git] / chrome / browser / ui / webui / signin / inline_login_handler.cc
blob6a16e1e4ae1d9303a69a2bd0799e7d197b7d1516
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/webui/signin/inline_login_handler.h"
7 #include "base/bind.h"
8 #include "base/prefs/pref_service.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/values.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/signin/signin_promo.h"
14 #include "chrome/browser/ui/browser_navigator.h"
15 #include "chrome/common/pref_names.h"
16 #include "content/public/browser/web_contents.h"
17 #include "content/public/browser/web_ui.h"
18 #include "google_apis/gaia/gaia_urls.h"
19 #include "net/base/url_util.h"
21 InlineLoginHandler::InlineLoginHandler() {}
23 InlineLoginHandler::~InlineLoginHandler() {}
25 void InlineLoginHandler::RegisterMessages() {
26 web_ui()->RegisterMessageCallback("initialize",
27 base::Bind(&InlineLoginHandler::HandleInitializeMessage,
28 base::Unretained(this)));
29 web_ui()->RegisterMessageCallback("completeLogin",
30 base::Bind(&InlineLoginHandler::HandleCompleteLoginMessage,
31 base::Unretained(this)));
32 web_ui()->RegisterMessageCallback(
33 "switchToFullTab",
34 base::Bind(&InlineLoginHandler::HandleSwitchToFullTabMessage,
35 base::Unretained(this)));
38 void InlineLoginHandler::HandleInitializeMessage(const base::ListValue* args) {
39 base::DictionaryValue params;
41 const std::string& app_locale = g_browser_process->GetApplicationLocale();
42 params.SetString("hl", app_locale);
43 GaiaUrls* gaiaUrls = GaiaUrls::GetInstance();
44 params.SetString("gaiaUrl", gaiaUrls->gaia_url().spec());
45 params.SetInteger("authMode", InlineLoginHandler::kDesktopAuthMode);
47 const GURL& current_url = web_ui()->GetWebContents()->GetURL();
48 signin::Source source = signin::GetSourceForPromoURL(current_url);
49 if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT ||
50 source == signin::SOURCE_AVATAR_BUBBLE_SIGN_IN ||
51 source == signin::SOURCE_REAUTH) {
52 // Drop the leading slash in the path.
53 params.SetString(
54 "gaiaPath",
55 GaiaUrls::GetInstance()->embedded_signin_url().path().substr(1));
58 params.SetString(
59 "continueUrl",
60 signin::GetLandingURL(signin::kSignInPromoQueryKeySource,
61 static_cast<int>(source)).spec());
63 std::string default_email;
64 if (source != signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT &&
65 source != signin::SOURCE_REAUTH) {
66 default_email = Profile::FromWebUI(web_ui())->GetPrefs()->GetString(
67 prefs::kGoogleServicesLastUsername);
68 } else {
69 if (!net::GetValueForKeyInQuery(current_url, "email", &default_email))
70 default_email.clear();
72 if (!default_email.empty())
73 params.SetString("email", default_email);
75 std::string frame_url;
76 net::GetValueForKeyInQuery(current_url, "frameUrl", &frame_url);
77 if (!frame_url.empty())
78 params.SetString("frameUrl", frame_url);
80 std::string is_constrained;
81 net::GetValueForKeyInQuery(
82 current_url, signin::kSignInPromoQueryKeyConstrained, &is_constrained);
83 if (!is_constrained.empty())
84 params.SetString(signin::kSignInPromoQueryKeyConstrained, is_constrained);
86 // TODO(rogerta): this needs to be passed on to gaia somehow.
87 std::string read_only_email;
88 net::GetValueForKeyInQuery(current_url, "readOnlyEmail", &read_only_email);
89 if (!read_only_email.empty())
90 params.SetString("readOnlyEmail", read_only_email);
92 SetExtraInitParams(params);
94 web_ui()->CallJavascriptFunction("inline.login.loadAuthExtension", params);
97 void InlineLoginHandler::HandleCompleteLoginMessage(
98 const base::ListValue* args) {
99 CompleteLogin(args);
102 void InlineLoginHandler::HandleSwitchToFullTabMessage(
103 const base::ListValue* args) {
104 base::string16 url_str;
105 CHECK(args->GetString(0, &url_str));
107 content::WebContents* web_contents = web_ui()->GetWebContents();
108 GURL main_frame_url(web_contents->GetURL());
109 main_frame_url = net::AppendOrReplaceQueryParameter(
110 main_frame_url, "frameUrl", base::UTF16ToASCII(url_str));
112 // Adds extra parameters to the signin URL so that Chrome will close the tab
113 // and show the account management view of the avatar menu upon completion.
114 main_frame_url = net::AppendOrReplaceQueryParameter(
115 main_frame_url, signin::kSignInPromoQueryKeyAutoClose, "1");
116 main_frame_url = net::AppendOrReplaceQueryParameter(
117 main_frame_url, signin::kSignInPromoQueryKeyShowAccountManagement, "1");
119 chrome::NavigateParams params(
120 Profile::FromWebUI(web_ui()),
121 net::AppendOrReplaceQueryParameter(
122 main_frame_url, signin::kSignInPromoQueryKeyConstrained, "0"),
123 ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
124 chrome::Navigate(&params);
126 web_ui()->CallJavascriptFunction("inline.login.closeDialog");