Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc

Issue 7562008: Add new version of enrollment screen supporting OAuth. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fix nit. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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.
4
5 #include "chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_scr een_handler.h"
6
7 #include "base/callback.h"
8 #include "base/command_line.h"
9 #include "base/json/json_reader.h"
10 #include "base/json/json_writer.h"
11 #include "base/utf_string_conversions.h"
12 #include "base/values.h"
13 #include "chrome/browser/browsing_data_remover.h"
14 #include "chrome/browser/net/gaia/gaia_oauth_fetcher.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/net/gaia/gaia_constants.h"
18 #include "chrome/common/net/gaia/google_service_auth_error.h"
19 #include "chrome/common/url_constants.h"
20 #include "content/browser/renderer_host/render_view_host.h"
21 #include "content/browser/tab_contents/tab_contents.h"
22 #include "grit/chromium_strings.h"
23 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h"
25
26 namespace {
27
28 // Start page of GAIA authentication extension.
29 const char kGaiaExtStartPage[] =
30 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
31
32 // OAuth V2 service scope for device management.
33 const char kServiceScopeChromeOSDeviceManagement[] =
34 "https://www.googleapis.com/auth/chromeosdevicemanagement";
35
36 // Enrollment step names.
37 const char kEnrollmentStepSignin[] = "signin";
38 const char kEnrollmentStepWorking[] = "working";
39 const char kEnrollmentStepError[] = "error";
40 const char kEnrollmentStepSuccess[] = "success";
41
42 } // namespace
43
44 namespace chromeos {
45
46 // EnterpriseOAuthEnrollmentScreenHandler, public ------------------------------
47
48 EnterpriseOAuthEnrollmentScreenHandler::EnterpriseOAuthEnrollmentScreenHandler()
49 : controller_(NULL), editable_user_(true), show_on_init_(false) {
50 }
51
52 EnterpriseOAuthEnrollmentScreenHandler::
53 ~EnterpriseOAuthEnrollmentScreenHandler() {}
54
55 // EnterpriseOAuthEnrollmentScreenHandler, WebUIMessageHandler implementation --
56
57 void EnterpriseOAuthEnrollmentScreenHandler::RegisterMessages() {
58 web_ui_->RegisterMessageCallback(
59 "oauthEnrollClose",
60 NewCallback(
61 this,
62 &EnterpriseOAuthEnrollmentScreenHandler::HandleClose));
63 web_ui_->RegisterMessageCallback(
64 "oauthEnrollCompleteLogin",
65 NewCallback(
66 this,
67 &EnterpriseOAuthEnrollmentScreenHandler::HandleCompleteLogin));
68 web_ui_->RegisterMessageCallback(
69 "oauthEnrollRetry",
70 NewCallback(
71 this,
72 &EnterpriseOAuthEnrollmentScreenHandler::HandleRetry));
73 }
74
75 // EnterpriseOAuthEnrollmentScreenHandler
76 // EnterpriseEnrollmentScreenActor implementation -------------------------
77
78 void EnterpriseOAuthEnrollmentScreenHandler::SetController(
79 Controller* controller) {
80 controller_ = controller;
81 }
82
83 void EnterpriseOAuthEnrollmentScreenHandler::PrepareToShow() {
84 }
85
86 void EnterpriseOAuthEnrollmentScreenHandler::Show() {
87 if (!page_is_ready()) {
88 show_on_init_ = true;
89 return;
90 }
91
92 DictionaryValue screen_data;
93 screen_data.SetString("signin_url", kGaiaExtStartPage);
94 ShowScreen("oauth-enrollment", &screen_data);
95 }
96
97 void EnterpriseOAuthEnrollmentScreenHandler::Hide() {
98 }
99
100 void EnterpriseOAuthEnrollmentScreenHandler::SetEditableUser(bool editable) {
101 editable_user_ = editable;
102 }
103
104 void EnterpriseOAuthEnrollmentScreenHandler::ShowConfirmationScreen() {
105 ShowStep(kEnrollmentStepSuccess);
106 NotifyObservers(true);
107 }
108
109 void EnterpriseOAuthEnrollmentScreenHandler::ShowAuthError(
110 const GoogleServiceAuthError& error) {
111 switch (error.state()) {
112 case GoogleServiceAuthError::NONE:
113 case GoogleServiceAuthError::CAPTCHA_REQUIRED:
114 case GoogleServiceAuthError::TWO_FACTOR:
115 case GoogleServiceAuthError::HOSTED_NOT_ALLOWED:
116 case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
117 case GoogleServiceAuthError::REQUEST_CANCELED:
118 LOG(ERROR) << "Auth error " << error.state();
119 ShowFatalAuthError();
120 break;
121 case GoogleServiceAuthError::USER_NOT_SIGNED_UP:
122 case GoogleServiceAuthError::ACCOUNT_DELETED:
123 case GoogleServiceAuthError::ACCOUNT_DISABLED:
124 LOG(ERROR) << "Account error " << error.state();
125 ShowAccountError();
126 break;
127 case GoogleServiceAuthError::CONNECTION_FAILED:
128 case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
129 LOG(WARNING) << "Network error " << error.state();
130 ShowNetworkEnrollmentError();
131 break;
132 }
133 NotifyObservers(false);
134 }
135
136 void EnterpriseOAuthEnrollmentScreenHandler::ShowAccountError() {
137 ShowError(IDS_ENTERPRISE_ENROLLMENT_ACCOUNT_ERROR, true);
138 NotifyObservers(false);
139 }
140
141 void EnterpriseOAuthEnrollmentScreenHandler::ShowFatalAuthError() {
142 ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_AUTH_ERROR, false);
143 NotifyObservers(false);
144 }
145
146 void EnterpriseOAuthEnrollmentScreenHandler::ShowFatalEnrollmentError() {
147 ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_ENROLLMENT_ERROR, false);
148 NotifyObservers(false);
149 }
150
151 void EnterpriseOAuthEnrollmentScreenHandler::ShowNetworkEnrollmentError() {
152 ShowError(IDS_ENTERPRISE_ENROLLMENT_NETWORK_ENROLLMENT_ERROR, true);
153 NotifyObservers(false);
154 }
155
156 // EnterpriseOAuthEnrollmentScreenHandler BaseScreenHandler implementation -----
157
158 void EnterpriseOAuthEnrollmentScreenHandler::GetLocalizedStrings(
159 base::DictionaryValue *localized_strings) {
160 localized_strings->SetString(
161 "oauthEnrollScreenTitle",
162 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE));
163 localized_strings->SetString(
164 "oauthEnrollRetry",
165 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_RETRY));
166 localized_strings->SetString(
167 "oauthEnrollCancel",
168 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CANCEL));
169 localized_strings->SetString(
170 "oauthEnrollDone",
171 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_DONE));
172 localized_strings->SetString(
173 "oauthEnrollSuccess",
174 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_SUCCESS));
175 localized_strings->SetString(
176 "oauthEnrollWorking",
177 l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_WORKING));
178 }
179
180 void EnterpriseOAuthEnrollmentScreenHandler::OnGetOAuthTokenFailure() {
181 ResetAuth();
182 ShowFatalAuthError();
183 }
184
185 void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthGetAccessTokenFailure(
186 const GoogleServiceAuthError& error) {
187 ResetAuth();
188 ShowAuthError(error);
189 }
190
191 void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthWrapBridgeSuccess(
192 const std::string& service_scope,
193 const std::string& token,
194 const std::string& expires_in) {
195 DCHECK_EQ(service_scope, GaiaConstants::kDeviceManagementServiceOAuth);
196 ResetAuth();
197
198 if (!controller_ || user_.empty()) {
199 NOTREACHED();
200 return;
201 }
202
203 controller_->OnOAuthTokenAvailable(user_, token);
204 }
205
206 void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthWrapBridgeFailure(
207 const std::string& service_scope,
208 const GoogleServiceAuthError& error) {
209 ResetAuth();
210 ShowAuthError(error);
211 }
212
213 void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoSuccess(
214 const std::string& email) {
215 ResetAuth();
216 NOTREACHED();
217 }
218
219 void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoFailure(
220 const GoogleServiceAuthError& error) {
221 ResetAuth();
222 NOTREACHED();
223 }
224
225 void EnterpriseOAuthEnrollmentScreenHandler::Initialize() {
226 if (show_on_init_) {
227 Show();
228 show_on_init_ = false;
229 }
230 }
231
232 // EnterpriseOAuthEnrollmentScreenHandler, private -----------------------------
233
234 void EnterpriseOAuthEnrollmentScreenHandler::HandleClose(
235 const base::ListValue* value) {
236 ResetAuth();
237
238 if (!controller_) {
239 NOTREACHED();
240 return;
241 }
242
243 controller_->OnConfirmationClosed();
244 }
245
246 void EnterpriseOAuthEnrollmentScreenHandler::HandleCompleteLogin(
247 const base::ListValue* value) {
248 if (!controller_) {
249 NOTREACHED();
250 return;
251 }
252
253 if (!value->GetString(0, &user_)) {
254 NOTREACHED() << "Invalid user parameter from UI.";
255 return;
256 }
257
258 Profile* profile =
259 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context());
260 oauth_fetcher_.reset(
261 new GaiaOAuthFetcher(this,
262 profile->GetRequestContext(),
263 profile,
264 GaiaConstants::kDeviceManagementServiceOAuth));
265 oauth_fetcher_->SetAutoFetchLimit(
266 GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN);
267 oauth_fetcher_->StartGetOAuthTokenRequest();
268
269 ShowStep(kEnrollmentStepWorking);
270 }
271
272 void EnterpriseOAuthEnrollmentScreenHandler::HandleRetry(
273 const base::ListValue* value) {
274 Show();
275 }
276
277 void EnterpriseOAuthEnrollmentScreenHandler::ShowStep(const char* step) {
278 base::StringValue step_value(step);
279 web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showStep",
280 step_value);
281 }
282
283 void EnterpriseOAuthEnrollmentScreenHandler::ShowError(int message_id,
284 bool retry) {
285 const std::string message(l10n_util::GetStringUTF8(message_id));
286 base::StringValue message_value(message);
287 base::FundamentalValue retry_value(retry);
288 web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showError",
289 message_value,
290 retry_value);
291 }
292
293 void EnterpriseOAuthEnrollmentScreenHandler::ResetAuth() {
294 oauth_fetcher_.reset();
295
296 // Clear page state.
297 int remove_mask =
298 BrowsingDataRemover::REMOVE_COOKIES |
299 BrowsingDataRemover::REMOVE_LSO_DATA;
300 (new BrowsingDataRemover(
301 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
302 BrowsingDataRemover::EVERYTHING,
303 base::Time()))->Remove(remove_mask);
304 }
305
306
307 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698