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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cda117c7640fe743ecdc4195f2797e92457b53e7
--- /dev/null
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
@@ -0,0 +1,307 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h"
+
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/browsing_data_remover.h"
+#include "chrome/browser/net/gaia/gaia_oauth_fetcher.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/net/gaia/gaia_constants.h"
+#include "chrome/common/net/gaia/google_service_auth_error.h"
+#include "chrome/common/url_constants.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+// Start page of GAIA authentication extension.
+const char kGaiaExtStartPage[] =
+ "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
+
+// OAuth V2 service scope for device management.
+const char kServiceScopeChromeOSDeviceManagement[] =
+ "https://www.googleapis.com/auth/chromeosdevicemanagement";
+
+// Enrollment step names.
+const char kEnrollmentStepSignin[] = "signin";
+const char kEnrollmentStepWorking[] = "working";
+const char kEnrollmentStepError[] = "error";
+const char kEnrollmentStepSuccess[] = "success";
+
+} // namespace
+
+namespace chromeos {
+
+// EnterpriseOAuthEnrollmentScreenHandler, public ------------------------------
+
+EnterpriseOAuthEnrollmentScreenHandler::EnterpriseOAuthEnrollmentScreenHandler()
+ : controller_(NULL), editable_user_(true), show_on_init_(false) {
+}
+
+EnterpriseOAuthEnrollmentScreenHandler::
+ ~EnterpriseOAuthEnrollmentScreenHandler() {}
+
+// EnterpriseOAuthEnrollmentScreenHandler, WebUIMessageHandler implementation --
+
+void EnterpriseOAuthEnrollmentScreenHandler::RegisterMessages() {
+ web_ui_->RegisterMessageCallback(
+ "oauthEnrollClose",
+ NewCallback(
+ this,
+ &EnterpriseOAuthEnrollmentScreenHandler::HandleClose));
+ web_ui_->RegisterMessageCallback(
+ "oauthEnrollCompleteLogin",
+ NewCallback(
+ this,
+ &EnterpriseOAuthEnrollmentScreenHandler::HandleCompleteLogin));
+ web_ui_->RegisterMessageCallback(
+ "oauthEnrollRetry",
+ NewCallback(
+ this,
+ &EnterpriseOAuthEnrollmentScreenHandler::HandleRetry));
+}
+
+// EnterpriseOAuthEnrollmentScreenHandler
+// EnterpriseEnrollmentScreenActor implementation -------------------------
+
+void EnterpriseOAuthEnrollmentScreenHandler::SetController(
+ Controller* controller) {
+ controller_ = controller;
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::PrepareToShow() {
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::Show() {
+ if (!page_is_ready()) {
+ show_on_init_ = true;
+ return;
+ }
+
+ DictionaryValue screen_data;
+ screen_data.SetString("signin_url", kGaiaExtStartPage);
+ ShowScreen("oauth-enrollment", &screen_data);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::Hide() {
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::SetEditableUser(bool editable) {
+ editable_user_ = editable;
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowConfirmationScreen() {
+ ShowStep(kEnrollmentStepSuccess);
+ NotifyObservers(true);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowAuthError(
+ const GoogleServiceAuthError& error) {
+ switch (error.state()) {
+ case GoogleServiceAuthError::NONE:
+ case GoogleServiceAuthError::CAPTCHA_REQUIRED:
+ case GoogleServiceAuthError::TWO_FACTOR:
+ case GoogleServiceAuthError::HOSTED_NOT_ALLOWED:
+ case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
+ case GoogleServiceAuthError::REQUEST_CANCELED:
+ LOG(ERROR) << "Auth error " << error.state();
+ ShowFatalAuthError();
+ break;
+ case GoogleServiceAuthError::USER_NOT_SIGNED_UP:
+ case GoogleServiceAuthError::ACCOUNT_DELETED:
+ case GoogleServiceAuthError::ACCOUNT_DISABLED:
+ LOG(ERROR) << "Account error " << error.state();
+ ShowAccountError();
+ break;
+ case GoogleServiceAuthError::CONNECTION_FAILED:
+ case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
+ LOG(WARNING) << "Network error " << error.state();
+ ShowNetworkEnrollmentError();
+ break;
+ }
+ NotifyObservers(false);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowAccountError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_ACCOUNT_ERROR, true);
+ NotifyObservers(false);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowFatalAuthError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_AUTH_ERROR, false);
+ NotifyObservers(false);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowFatalEnrollmentError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_ENROLLMENT_ERROR, false);
+ NotifyObservers(false);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowNetworkEnrollmentError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_NETWORK_ENROLLMENT_ERROR, true);
+ NotifyObservers(false);
+}
+
+// EnterpriseOAuthEnrollmentScreenHandler BaseScreenHandler implementation -----
+
+void EnterpriseOAuthEnrollmentScreenHandler::GetLocalizedStrings(
+ base::DictionaryValue *localized_strings) {
+ localized_strings->SetString(
+ "oauthEnrollScreenTitle",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE));
+ localized_strings->SetString(
+ "oauthEnrollRetry",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_RETRY));
+ localized_strings->SetString(
+ "oauthEnrollCancel",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CANCEL));
+ localized_strings->SetString(
+ "oauthEnrollDone",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_DONE));
+ localized_strings->SetString(
+ "oauthEnrollSuccess",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_SUCCESS));
+ localized_strings->SetString(
+ "oauthEnrollWorking",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_WORKING));
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnGetOAuthTokenFailure() {
+ ResetAuth();
+ ShowFatalAuthError();
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthGetAccessTokenFailure(
+ const GoogleServiceAuthError& error) {
+ ResetAuth();
+ ShowAuthError(error);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthWrapBridgeSuccess(
+ const std::string& service_scope,
+ const std::string& token,
+ const std::string& expires_in) {
+ DCHECK_EQ(service_scope, GaiaConstants::kDeviceManagementServiceOAuth);
+ ResetAuth();
+
+ if (!controller_ || user_.empty()) {
+ NOTREACHED();
+ return;
+ }
+
+ controller_->OnOAuthTokenAvailable(user_, token);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnOAuthWrapBridgeFailure(
+ const std::string& service_scope,
+ const GoogleServiceAuthError& error) {
+ ResetAuth();
+ ShowAuthError(error);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoSuccess(
+ const std::string& email) {
+ ResetAuth();
+ NOTREACHED();
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::OnUserInfoFailure(
+ const GoogleServiceAuthError& error) {
+ ResetAuth();
+ NOTREACHED();
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::Initialize() {
+ if (show_on_init_) {
+ Show();
+ show_on_init_ = false;
+ }
+}
+
+// EnterpriseOAuthEnrollmentScreenHandler, private -----------------------------
+
+void EnterpriseOAuthEnrollmentScreenHandler::HandleClose(
+ const base::ListValue* value) {
+ ResetAuth();
+
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+
+ controller_->OnConfirmationClosed();
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::HandleCompleteLogin(
+ const base::ListValue* value) {
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+
+ if (!value->GetString(0, &user_)) {
+ NOTREACHED() << "Invalid user parameter from UI.";
+ return;
+ }
+
+ Profile* profile =
+ Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context());
+ oauth_fetcher_.reset(
+ new GaiaOAuthFetcher(this,
+ profile->GetRequestContext(),
+ profile,
+ GaiaConstants::kDeviceManagementServiceOAuth));
+ oauth_fetcher_->SetAutoFetchLimit(
+ GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN);
+ oauth_fetcher_->StartGetOAuthTokenRequest();
+
+ ShowStep(kEnrollmentStepWorking);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::HandleRetry(
+ const base::ListValue* value) {
+ Show();
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowStep(const char* step) {
+ base::StringValue step_value(step);
+ web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showStep",
+ step_value);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ShowError(int message_id,
+ bool retry) {
+ const std::string message(l10n_util::GetStringUTF8(message_id));
+ base::StringValue message_value(message);
+ base::FundamentalValue retry_value(retry);
+ web_ui_->CallJavascriptFunction("oobe.OAuthEnrollmentScreen.showError",
+ message_value,
+ retry_value);
+}
+
+void EnterpriseOAuthEnrollmentScreenHandler::ResetAuth() {
+ oauth_fetcher_.reset();
+
+ // Clear page state.
+ int remove_mask =
+ BrowsingDataRemover::REMOVE_COOKIES |
+ BrowsingDataRemover::REMOVE_LSO_DATA;
+ (new BrowsingDataRemover(
+ Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
+ BrowsingDataRemover::EVERYTHING,
+ base::Time()))->Remove(remove_mask);
+}
+
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698