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

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: New icons, address comments. 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_name,
193 const std::string& token,
194 const std::string& expires_in) {
195 DCHECK_EQ(service_name, 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 GoogleServiceAuthError& error) {
208 ResetAuth();
209 ShowAuthError(error);
210 }
211
212 void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoSuccess(
213 const std::string& email) {
214 ResetAuth();
215 NOTREACHED();
216 }
217
218 void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoFailure(
219 const GoogleServiceAuthError& error) {
220 ResetAuth();
221 NOTREACHED();
222 }
223
224 void EnterpriseOAuthEnrollmentScreenHandler::Initialize() {
225 if (show_on_init_) {
226 Show();
227 show_on_init_ = false;
228 }
229 }
230
231 // EnterpriseOAuthEnrollmentScreenHandler, private -----------------------------
232
233 void EnterpriseOAuthEnrollmentScreenHandler::HandleClose(
234 const base::ListValue* value) {
235 ResetAuth();
236
237 if (!controller_) {
238 NOTREACHED();
239 return;
240 }
241
242 controller_->OnConfirmationClosed();
243 }
244
245 void EnterpriseOAuthEnrollmentScreenHandler::HandleCompleteLogin(
246 const base::ListValue* value) {
247 if (!controller_) {
248 NOTREACHED();
249 return;
250 }
251
252 if (!value->GetString(0, &user_)) {
253 NOTREACHED() << "Invalid user parameter from UI.";
254 return;
255 }
256
257 Profile* profile =
258 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context());
259 oauth_fetcher_.reset(
260 new GaiaOAuthFetcher(this,
261 profile->GetRequestContext(),
262 profile,
263 GaiaConstants::kDeviceManagementServiceOAuth));
264 oauth_fetcher_->SetAutoFetchLimit(
265 GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN);
266 oauth_fetcher_->StartGetOAuthTokenRequest();
267
268 ShowStep(kEnrollmentStepWorking);
269 }
270
271 void EnterpriseOAuthEnrollmentScreenHandler::HandleRetry(
272 const base::ListValue* value) {
273 Show();
274 }
275
276 void EnterpriseOAuthEnrollmentScreenHandler::ShowStep(const char* step) {
277 base::StringValue step_value(step);
278 web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showStep",
279 step_value);
280 }
281
282 void EnterpriseOAuthEnrollmentScreenHandler::ShowError(int message_id,
283 bool retry) {
284 const std::string message(l10n_util::GetStringUTF8(message_id));
285 base::StringValue message_value(message);
286 base::FundamentalValue retry_value(retry);
287 web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showError",
288 message_value,
289 retry_value);
290 }
291
292 void EnterpriseOAuthEnrollmentScreenHandler::ResetAuth() {
293 oauth_fetcher_.reset();
294
295 // Clear page state.
296 int remove_mask =
297 BrowsingDataRemover::REMOVE_COOKIES |
298 BrowsingDataRemover::REMOVE_LSO_DATA;
299 (new BrowsingDataRemover(
300 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
301 BrowsingDataRemover::EVERYTHING,
302 base::Time()))->Remove(remove_mask);
303 }
304
305
306 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698