summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoraltimofeev@chromium.org <altimofeev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 12:38:28 +0000
committeraltimofeev@chromium.org <altimofeev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 12:38:28 +0000
commit6c51eb0d8c35554465e13613a229d526e598cf43 (patch)
treee558d95a4c1877fe0480629a2aa336517872eb4d /chrome
parent5a183bedcbdc63d8303ea329e0509f1c880d87e5 (diff)
downloadchromium_src-6c51eb0d8c35554465e13613a229d526e598cf43.zip
chromium_src-6c51eb0d8c35554465e13613a229d526e598cf43.tar.gz
chromium_src-6c51eb0d8c35554465e13613a229d526e598cf43.tar.bz2
WebUI OOBE migration of the Enterprise Enrollment screen.
Implemented intermediate classes which allows different EE screen implementations: views-based and WebUI-based. WebUI part was integrated to the current WebUI OOBE screen. BUG=chromium-os:17334 TEST=manual (--webui-login --allow-webui-oobe flags for WebUI part) Review URL: http://codereview.chromium.org/7432004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93614 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_screen.cc84
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_screen.h58
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h47
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_screen_browsertest.cc14
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_view.cc90
-rw-r--r--chrome/browser/chromeos/login/enterprise_enrollment_view.h43
-rw-r--r--chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.cc23
-rw-r--r--chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.h44
-rw-r--r--chrome/browser/chromeos/login/oobe_display.h8
-rw-r--r--chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.cc88
-rw-r--r--chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.h52
-rw-r--r--chrome/browser/chromeos/login/views_oobe_display.cc12
-rw-r--r--chrome/browser/chromeos/login/views_oobe_display.h4
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.cc2
-rw-r--r--chrome/browser/chromeos/login/wizard_controller_browsertest.cc20
-rw-r--r--chrome/browser/chromeos/login/wizard_screen.h3
-rw-r--r--chrome/browser/policy/enterprise_metrics_enrollment_browsertest.cc4
-rw-r--r--chrome/browser/policy/resources/enrollment.css2
-rw-r--r--chrome/browser/policy/resources/enrollment.html6
-rw-r--r--chrome/browser/policy/resources/enrollment.js9
-rw-r--r--chrome/browser/resources/chromeos/login/oobe.css71
-rw-r--r--chrome/browser/resources/chromeos/login/oobe.html2
-rw-r--r--chrome/browser/resources/chromeos/login/oobe.js1
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_enrollment.html42
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_enrollment.js70
-rw-r--r--chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.cc301
-rw-r--r--chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h15
-rw-r--r--chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.cc298
-rw-r--r--chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h75
-rw-r--r--chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc8
-rw-r--r--chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc2
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc49
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.h3
-rw-r--r--chrome/chrome_browser.gypi9
-rw-r--r--chrome/chrome_tests.gypi2
35 files changed, 1078 insertions, 483 deletions
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_screen.cc b/chrome/browser/chromeos/login/enterprise_enrollment_screen.cc
index e29e9ab..957fee8 100644
--- a/chrome/browser/chromeos/login/enterprise_enrollment_screen.cc
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_screen.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/cryptohome_library.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
#include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/policy/browser_policy_connector.h"
#include "chrome/browser/policy/enterprise_metrics.h"
@@ -20,9 +21,13 @@ namespace chromeos {
const int kLockRetryIntervalMs = 500;
EnterpriseEnrollmentScreen::EnterpriseEnrollmentScreen(
- ViewScreenDelegate* delegate)
- : ViewScreen<EnterpriseEnrollmentView>(delegate),
+ ScreenObserver* observer,
+ EnterpriseEnrollmentScreenActor* actor)
+ : WizardScreen(observer),
+ actor_(actor),
+ is_showing_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(runnable_method_factory_(this)) {
+ actor_->SetController(this);
// Init the TPM if it has not been done until now (in debug build we might
// have not done that yet).
chromeos::CryptohomeLibrary* cryptohome =
@@ -38,10 +43,11 @@ EnterpriseEnrollmentScreen::EnterpriseEnrollmentScreen(
EnterpriseEnrollmentScreen::~EnterpriseEnrollmentScreen() {}
-void EnterpriseEnrollmentScreen::Authenticate(const std::string& user,
- const std::string& password,
- const std::string& captcha,
- const std::string& access_code) {
+void EnterpriseEnrollmentScreen::OnAuthSubmitted(
+ const std::string& user,
+ const std::string& password,
+ const std::string& captcha,
+ const std::string& access_code) {
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentStarted,
policy::kMetricEnrollmentSize);
@@ -64,21 +70,21 @@ void EnterpriseEnrollmentScreen::Authenticate(const std::string& user,
}
}
-void EnterpriseEnrollmentScreen::CancelEnrollment() {
+void EnterpriseEnrollmentScreen::OnAuthCancelled() {
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentCancelled,
policy::kMetricEnrollmentSize);
auth_fetcher_.reset();
registrar_.reset();
g_browser_process->browser_policy_connector()->DeviceStopAutoRetry();
- ScreenObserver* observer = delegate()->GetObserver();
- observer->OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_CANCELLED);
+ get_screen_observer()->OnExit(
+ ScreenObserver::ENTERPRISE_ENROLLMENT_CANCELLED);
}
-void EnterpriseEnrollmentScreen::CloseConfirmation() {
+void EnterpriseEnrollmentScreen::OnConfirmationClosed() {
auth_fetcher_.reset();
- ScreenObserver* observer = delegate()->GetObserver();
- observer->OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_COMPLETED);
+ get_screen_observer()->OnExit(
+ ScreenObserver::ENTERPRISE_ENROLLMENT_COMPLETED);
}
bool EnterpriseEnrollmentScreen::GetInitialUser(std::string* user) {
@@ -95,8 +101,7 @@ bool EnterpriseEnrollmentScreen::GetInitialUser(std::string* user) {
// this means we might only want to reenroll with the DMServer so lock
// the username to what has been stored in the InstallAttrs already.
*user = value;
- if (view())
- view()->set_editable_user(false);
+ actor_->SetEditableUser(false);
return true;
}
}
@@ -137,8 +142,8 @@ void EnterpriseEnrollmentScreen::OnIssueAuthTokenSuccess(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentOtherFailed,
policy::kMetricEnrollmentSize);
- if (view())
- view()->ShowFatalEnrollmentError();
+ if (is_showing_)
+ actor_->ShowFatalEnrollmentError();
return;
}
@@ -169,20 +174,20 @@ void EnterpriseEnrollmentScreen::OnPolicyStateChanged(
policy::CloudPolicySubsystem::PolicySubsystemState state,
policy::CloudPolicySubsystem::ErrorDetails error_details) {
- if (view()) {
+ if (is_showing_) {
switch (state) {
case policy::CloudPolicySubsystem::UNENROLLED:
// Still working...
return;
case policy::CloudPolicySubsystem::BAD_GAIA_TOKEN:
case policy::CloudPolicySubsystem::LOCAL_ERROR:
- view()->ShowFatalEnrollmentError();
+ actor_->ShowFatalEnrollmentError();
break;
case policy::CloudPolicySubsystem::UNMANAGED:
- view()->ShowAccountError();
+ actor_->ShowAccountError();
break;
case policy::CloudPolicySubsystem::NETWORK_ERROR:
- view()->ShowNetworkEnrollmentError();
+ actor_->ShowNetworkEnrollmentError();
break;
case policy::CloudPolicySubsystem::TOKEN_FETCHED:
WriteInstallAttributesData();
@@ -193,10 +198,9 @@ void EnterpriseEnrollmentScreen::OnPolicyStateChanged(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentOK,
policy::kMetricEnrollmentSize);
- view()->ShowConfirmationScreen();
+ actor_->ShowConfirmationScreen();
return;
}
-
// We have an error.
if (state == policy::CloudPolicySubsystem::UNMANAGED) {
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
@@ -216,15 +220,11 @@ void EnterpriseEnrollmentScreen::OnPolicyStateChanged(
g_browser_process->browser_policy_connector()->DeviceStopAutoRetry();
}
-EnterpriseEnrollmentView* EnterpriseEnrollmentScreen::AllocateView() {
- return new EnterpriseEnrollmentView(this);
-}
-
void EnterpriseEnrollmentScreen::HandleAuthError(
const GoogleServiceAuthError& error) {
scoped_ptr<GaiaAuthFetcher> scoped_killer(auth_fetcher_.release());
- if (!view())
+ if (!is_showing_)
return;
switch (error.state()) {
@@ -232,7 +232,7 @@ void EnterpriseEnrollmentScreen::HandleAuthError(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentNetworkFailed,
policy::kMetricEnrollmentSize);
- view()->ShowNetworkEnrollmentError();
+ actor_->ShowNetworkEnrollmentError();
return;
case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
case GoogleServiceAuthError::CAPTCHA_REQUIRED:
@@ -241,7 +241,7 @@ void EnterpriseEnrollmentScreen::HandleAuthError(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentLoginFailed,
policy::kMetricEnrollmentSize);
- view()->ShowAuthError(error);
+ actor_->ShowAuthError(error);
return;
case GoogleServiceAuthError::USER_NOT_SIGNED_UP:
case GoogleServiceAuthError::ACCOUNT_DELETED:
@@ -249,7 +249,7 @@ void EnterpriseEnrollmentScreen::HandleAuthError(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentNotSupported,
policy::kMetricEnrollmentSize);
- view()->ShowAccountError();
+ actor_->ShowAccountError();
return;
case GoogleServiceAuthError::NONE:
case GoogleServiceAuthError::HOSTED_NOT_ALLOWED:
@@ -260,7 +260,7 @@ void EnterpriseEnrollmentScreen::HandleAuthError(
UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment,
policy::kMetricEnrollmentNetworkFailed,
policy::kMetricEnrollmentSize);
- view()->ShowFatalAuthError();
+ actor_->ShowFatalAuthError();
return;
}
@@ -274,9 +274,6 @@ void EnterpriseEnrollmentScreen::WriteInstallAttributesData() {
// Since this method is also called directly.
runnable_method_factory_.RevokeAll();
- if (!view())
- return;
-
switch (g_browser_process->browser_policy_connector()->LockDevice(user_)) {
case policy::EnterpriseInstallAttributes::LOCK_SUCCESS: {
// Proceed with policy fetch.
@@ -297,13 +294,13 @@ void EnterpriseEnrollmentScreen::WriteInstallAttributesData() {
return;
}
case policy::EnterpriseInstallAttributes::LOCK_BACKEND_ERROR: {
- view()->ShowFatalEnrollmentError();
+ actor_->ShowFatalEnrollmentError();
return;
}
case policy::EnterpriseInstallAttributes::LOCK_WRONG_USER: {
LOG(ERROR) << "Enrollment can not proceed because the InstallAttrs "
<< "has been locked already!";
- view()->ShowFatalEnrollmentError();
+ actor_->ShowFatalEnrollmentError();
return;
}
}
@@ -311,11 +308,18 @@ void EnterpriseEnrollmentScreen::WriteInstallAttributesData() {
NOTREACHED();
}
+void EnterpriseEnrollmentScreen::PrepareToShow() {
+ actor_->PrepareToShow();
+}
+
void EnterpriseEnrollmentScreen::Show() {
- ViewScreen<EnterpriseEnrollmentView>::Show();
- // Make the focus go initially to the DOMView, so that the email input field
- // receives the focus.
- view()->RequestFocus();
+ is_showing_ = true;
+ actor_->Show();
+}
+
+void EnterpriseEnrollmentScreen::Hide() {
+ is_showing_ = false;
+ actor_->Hide();
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_screen.h b/chrome/browser/chromeos/login/enterprise_enrollment_screen.h
index 7f0f9e8..865d681 100644
--- a/chrome/browser/chromeos/login/enterprise_enrollment_screen.h
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_screen.h
@@ -13,54 +13,40 @@
#include "base/message_loop.h"
#include "base/task.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/login/enterprise_enrollment_view.h"
-#include "chrome/browser/chromeos/login/view_screen.h"
+#include "chrome/browser/chromeos/login/wizard_screen.h"
#include "chrome/browser/policy/cloud_policy_subsystem.h"
+#include "chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h"
#include "chrome/common/net/gaia/gaia_auth_fetcher.h"
namespace chromeos {
-// Controller interface for driving the enterprise enrollment UI.
-class EnterpriseEnrollmentController {
- public:
- // Runs authentication with the given parameters.
- virtual void Authenticate(const std::string& user,
- const std::string& password,
- const std::string& captcha,
- const std::string& access_code) = 0;
-
- // Cancels the enrollment operation.
- virtual void CancelEnrollment() = 0;
-
- // Closes the confirmation window.
- virtual void CloseConfirmation() = 0;
-
- // Returns whether the GAIA login should be prepolutated with an user and if
- // yes which one.
- virtual bool GetInitialUser(std::string* user) = 0;
-};
+class ScreenObserver;
+class EnterpriseEnrollmentScreenActor;
// The screen implementation that links the enterprise enrollment UI into the
// OOBE wizard.
class EnterpriseEnrollmentScreen
- : public ViewScreen<EnterpriseEnrollmentView>,
- public EnterpriseEnrollmentController,
+ : public WizardScreen,
+ public EnterpriseEnrollmentUI::Controller,
public GaiaAuthConsumer,
public policy::CloudPolicySubsystem::Observer {
public:
- explicit EnterpriseEnrollmentScreen(ViewScreenDelegate* delegate);
+ EnterpriseEnrollmentScreen(ScreenObserver* observer,
+ EnterpriseEnrollmentScreenActor* actor);
virtual ~EnterpriseEnrollmentScreen();
- // Override from ViewScreen:
+ // WizardScreen implementation:
+ virtual void PrepareToShow() OVERRIDE;
virtual void Show() OVERRIDE;
-
- // EnterpriseEnrollmentController implementation:
- virtual void Authenticate(const std::string& user,
- const std::string& password,
- const std::string& captcha,
- const std::string& access_code) OVERRIDE;
- virtual void CancelEnrollment() OVERRIDE;
- virtual void CloseConfirmation() OVERRIDE;
+ virtual void Hide() OVERRIDE;
+
+ // EnterpriseEnrollmentUI::Controller implementation:
+ virtual void OnAuthSubmitted(const std::string& user,
+ const std::string& password,
+ const std::string& captcha,
+ const std::string& access_code) OVERRIDE;
+ virtual void OnAuthCancelled() OVERRIDE;
+ virtual void OnConfirmationClosed() OVERRIDE;
virtual bool GetInitialUser(std::string* user) OVERRIDE;
// GaiaAuthConsumer implementation:
@@ -79,16 +65,14 @@ class EnterpriseEnrollmentScreen
policy::CloudPolicySubsystem::PolicySubsystemState state,
policy::CloudPolicySubsystem::ErrorDetails error_details) OVERRIDE;
- protected:
- // Overriden from ViewScreen:
- virtual EnterpriseEnrollmentView* AllocateView() OVERRIDE;
-
private:
void HandleAuthError(const GoogleServiceAuthError& error);
// Starts the Lockbox storage process.
void WriteInstallAttributesData();
+ EnterpriseEnrollmentScreenActor* actor_;
+ bool is_showing_;
scoped_ptr<GaiaAuthFetcher> auth_fetcher_;
std::string user_;
std::string captcha_token_;
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h b/chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h
new file mode 100644
index 0000000..8a84d33
--- /dev/null
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
+#define CHROME_BROWSER_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
+
+#include "base/basictypes.h"
+#include "chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h"
+
+namespace chromeos {
+
+// Interface class for the enterprise enrollment screen actor.
+class EnterpriseEnrollmentScreenActor {
+ public:
+ virtual ~EnterpriseEnrollmentScreenActor() {}
+
+ // Sets the controller.
+ virtual void SetController(
+ EnterpriseEnrollmentUI::Controller* controller) = 0;
+
+ // Prepare the contents to showing.
+ virtual void PrepareToShow() = 0;
+
+ // Shows the contents of the screen.
+ virtual void Show() = 0;
+
+ // Hides the contents of the screen.
+ virtual void Hide() = 0;
+
+ // Sets whether the user is editable.
+ virtual void SetEditableUser(bool editable) = 0;
+
+ // Switches to the confirmation screen.
+ virtual void ShowConfirmationScreen() = 0;
+
+ // Show an authentication error.
+ virtual void ShowAuthError(const GoogleServiceAuthError& error) = 0;
+ virtual void ShowAccountError() = 0;
+ virtual void ShowFatalAuthError() = 0;
+ virtual void ShowFatalEnrollmentError() = 0;
+ virtual void ShowNetworkEnrollmentError() = 0;
+};
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_screen_browsertest.cc b/chrome/browser/chromeos/login/enterprise_enrollment_screen_browsertest.cc
index 5ad1430..3577f6e 100644
--- a/chrome/browser/chromeos/login/enterprise_enrollment_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_screen_browsertest.cc
@@ -29,23 +29,23 @@ class EnterpriseEnrollmentScreenTest : public WizardInProcessBrowserTest {
IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentScreenTest, TestCancel) {
ASSERT_TRUE(controller() != NULL);
- MockScreenObserver mock_screen_observer;
- ViewsOobeDisplay* views_oobe_display =
- static_cast<ViewsOobeDisplay*>(controller()->oobe_display_);
- views_oobe_display->SetScreenObserver(&mock_screen_observer);
-
EnterpriseEnrollmentScreen* enterprise_enrollment_screen =
controller()->GetEnterpriseEnrollmentScreen();
ASSERT_TRUE(enterprise_enrollment_screen != NULL);
+ MockScreenObserver mock_screen_observer;
+ static_cast<WizardScreen*>(enterprise_enrollment_screen)->screen_observer_ =
+ &mock_screen_observer;
+
ASSERT_EQ(controller()->current_screen(), enterprise_enrollment_screen);
EXPECT_CALL(mock_screen_observer,
OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_CANCELLED));
- enterprise_enrollment_screen->CancelEnrollment();
+ enterprise_enrollment_screen->OnAuthCancelled();
Mock::VerifyAndClearExpectations(&mock_screen_observer);
- views_oobe_display->SetScreenObserver(NULL);
+ static_cast<WizardScreen*>(enterprise_enrollment_screen)->screen_observer_ =
+ controller();
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_view.cc b/chrome/browser/chromeos/login/enterprise_enrollment_view.cc
index 4a71f09..a35cc6d 100644
--- a/chrome/browser/chromeos/login/enterprise_enrollment_view.cc
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_view.cc
@@ -6,6 +6,7 @@
#include "base/json/json_writer.h"
#include "base/values.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
#include "chrome/browser/chromeos/login/enterprise_enrollment_screen.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/rounded_rect_painter.h"
@@ -15,7 +16,6 @@
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/site_instance.h"
#include "content/browser/tab_contents/tab_contents_delegate.h"
-#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "views/border.h"
#include "views/layout/layout_constants.h"
@@ -36,7 +36,7 @@ class EnrollmentDomView : public WebPageDomView,
}
protected:
- // DomView imlementation:
+ // DomView implementation:
virtual TabContents* CreateTabContents(Profile* profile,
SiteInstance* instance) {
TabContents* contents = new WizardWebPageViewTabContents(profile,
@@ -64,9 +64,8 @@ class EnrollmentDomView : public WebPageDomView,
} // namespace
EnterpriseEnrollmentView::EnterpriseEnrollmentView(
- EnterpriseEnrollmentController* controller)
- : controller_(controller),
- editable_user_(true) {}
+ EnterpriseEnrollmentUI::Controller* controller)
+ : controller_(controller), actor_(NULL) {}
EnterpriseEnrollmentView::~EnterpriseEnrollmentView() {}
@@ -89,80 +88,15 @@ void EnterpriseEnrollmentView::Init() {
GURL url(chrome::kChromeUIEnterpriseEnrollmentURL);
enrollment_page_view_->Init(
profile, SiteInstance::CreateSiteInstanceForURL(profile, url));
- EnterpriseEnrollmentUI::SetController(enrollment_page_view_->tab_contents(),
- this);
- enrollment_page_view_->LoadURL(url);
-}
-
-void EnterpriseEnrollmentView::ShowConfirmationScreen() {
- RenderViewHost* render_view_host =
- enrollment_page_view_->tab_contents()->render_view_host();
- render_view_host->ExecuteJavascriptInWebFrame(
- string16(),
- UTF8ToUTF16("enterpriseEnrollment.showScreen('confirmation-screen');"));
-}
-
-void EnterpriseEnrollmentView::ShowAuthError(
- const GoogleServiceAuthError& error) {
- DictionaryValue args;
- args.SetInteger("error", error.state());
- args.SetBoolean("editable_user", editable_user_);
- args.SetString("captchaUrl", error.captcha().image_url.spec());
- UpdateGaiaLogin(args);
-}
-
-void EnterpriseEnrollmentView::ShowAccountError() {
- ShowError(IDS_ENTERPRISE_ENROLLMENT_ACCOUNT_ERROR);
-}
-
-void EnterpriseEnrollmentView::ShowFatalAuthError() {
- ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_AUTH_ERROR);
-}
-
-void EnterpriseEnrollmentView::ShowFatalEnrollmentError() {
- ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_ENROLLMENT_ERROR);
-}
-
-void EnterpriseEnrollmentView::ShowNetworkEnrollmentError() {
- ShowError(IDS_ENTERPRISE_ENROLLMENT_NETWORK_ENROLLMENT_ERROR);
-}
-
-void EnterpriseEnrollmentView::OnAuthSubmitted(const std::string& user,
- const std::string& password,
- const std::string& captcha,
- const std::string& access_code) {
- controller_->Authenticate(user, password, captcha, access_code);
-}
-
-void EnterpriseEnrollmentView::OnAuthCancelled() {
- controller_->CancelEnrollment();
-}
-
-void EnterpriseEnrollmentView::OnConfirmationClosed() {
- controller_->CloseConfirmation();
-}
-bool EnterpriseEnrollmentView::GetInitialUser(std::string* user) {
- return controller_->GetInitialUser(user);
-}
-
-void EnterpriseEnrollmentView::UpdateGaiaLogin(const DictionaryValue& args) {
- std::string json;
- base::JSONWriter::Write(&args, false, &json);
-
- RenderViewHost* render_view_host =
- enrollment_page_view_->tab_contents()->render_view_host();
- render_view_host->ExecuteJavascriptInWebFrame(
- ASCIIToUTF16("//iframe[@id='gaialogin']"),
- UTF8ToUTF16("showGaiaLogin(" + json + ");"));
+ enrollment_page_view_->LoadURL(url);
+ actor_ = static_cast<EnterpriseEnrollmentUI*>(
+ enrollment_page_view_->tab_contents()->web_ui())->GetActor();
+ actor_->SetController(controller_);
}
-void EnterpriseEnrollmentView::ShowError(int message_id) {
- DictionaryValue args;
- args.SetInteger("error", GoogleServiceAuthError::NONE);
- args.SetBoolean("editable_user", editable_user_);
- args.SetString("error_message", l10n_util::GetStringUTF16(message_id));
- UpdateGaiaLogin(args);
+EnterpriseEnrollmentScreenActor* EnterpriseEnrollmentView::GetActor() {
+ return actor_;
}
void EnterpriseEnrollmentView::Layout() {
@@ -173,8 +107,4 @@ void EnterpriseEnrollmentView::RequestFocus() {
enrollment_page_view_->RequestFocus();
}
-void EnterpriseEnrollmentView::set_editable_user(bool editable) {
- editable_user_ = editable;
-}
-
} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_view.h b/chrome/browser/chromeos/login/enterprise_enrollment_view.h
index 5688ccc..4bebc54 100644
--- a/chrome/browser/chromeos/login/enterprise_enrollment_view.h
+++ b/chrome/browser/chromeos/login/enterprise_enrollment_view.h
@@ -26,60 +26,35 @@ class Label;
namespace chromeos {
-class EnterpriseEnrollmentController;
class ScreenObserver;
+class EnterpriseEnrollmentScreenActor;
// Implements the UI for the enterprise enrollment screen in OOBE.
-class EnterpriseEnrollmentView : public views::View,
- public EnterpriseEnrollmentUI::Controller {
+class EnterpriseEnrollmentView : public views::View {
public:
- explicit EnterpriseEnrollmentView(EnterpriseEnrollmentController* controller);
+ explicit EnterpriseEnrollmentView(
+ EnterpriseEnrollmentUI::Controller* controller);
virtual ~EnterpriseEnrollmentView();
- void set_editable_user(bool editable);
-
// Initialize view controls and layout.
void Init();
- // Switches to the confirmation screen.
- void ShowConfirmationScreen();
-
- // Show an authentication error.
- void ShowAuthError(const GoogleServiceAuthError& error);
- void ShowAccountError();
- void ShowFatalAuthError();
- void ShowFatalEnrollmentError();
- void ShowNetworkEnrollmentError();
-
- // EnterpriseEnrollmentUI::Controller implementation.
- virtual void OnAuthSubmitted(const std::string& user,
- const std::string& password,
- const std::string& captcha,
- const std::string& access_code) OVERRIDE;
- virtual void OnAuthCancelled() OVERRIDE;
- virtual void OnConfirmationClosed() OVERRIDE;
- virtual bool GetInitialUser(std::string* user) OVERRIDE;
+ EnterpriseEnrollmentScreenActor* GetActor();
- // Overriden from views::View:
+ // Overridden from views::View:
virtual void RequestFocus() OVERRIDE;
private:
- // Updates the gaia login box.
- void UpdateGaiaLogin(const base::DictionaryValue& args);
-
- // Display the given i18n string as error message.
- void ShowError(int message_id);
-
// Overriden from views::View:
virtual void Layout() OVERRIDE;
- EnterpriseEnrollmentController* controller_;
+ EnterpriseEnrollmentUI::Controller* controller_;
+
+ EnterpriseEnrollmentScreenActor* actor_;
// Controls.
WebPageDomView* enrollment_page_view_;
- bool editable_user_;
-
DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentView);
};
diff --git a/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.cc b/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.cc
new file mode 100644
index 0000000..5fba2f7
--- /dev/null
+++ b/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.cc
@@ -0,0 +1,23 @@
+// 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/chromeos/login/mock_enterprise_enrollment_screen.h"
+
+namespace chromeos {
+
+MockEnterpriseEnrollmentScreen::MockEnterpriseEnrollmentScreen(
+ ScreenObserver* screen_observer, EnterpriseEnrollmentScreenActor* actor)
+ : EnterpriseEnrollmentScreen(screen_observer, actor) {
+}
+
+MockEnterpriseEnrollmentScreen::~MockEnterpriseEnrollmentScreen() {
+}
+
+MockEnterpriseEnrollmentScreenActor::MockEnterpriseEnrollmentScreenActor() {
+}
+
+MockEnterpriseEnrollmentScreenActor::~MockEnterpriseEnrollmentScreenActor() {
+}
+
+} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.h b/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.h
new file mode 100644
index 0000000..f84b442
--- /dev/null
+++ b/chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_ENTERPRISE_ENROLLMENT_SCREEN_H_
+#define CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_ENTERPRISE_ENROLLMENT_SCREEN_H_
+#pragma once
+
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace chromeos {
+
+class MockEnterpriseEnrollmentScreen : public EnterpriseEnrollmentScreen {
+ public:
+ MockEnterpriseEnrollmentScreen(ScreenObserver* screen_observer,
+ EnterpriseEnrollmentScreenActor* actor);
+ virtual ~MockEnterpriseEnrollmentScreen();
+};
+
+class MockEnterpriseEnrollmentScreenActor
+ : public EnterpriseEnrollmentScreenActor {
+ public:
+ MockEnterpriseEnrollmentScreenActor();
+ virtual ~MockEnterpriseEnrollmentScreenActor();
+
+ MOCK_METHOD1(SetController,
+ void(EnterpriseEnrollmentUI::Controller* controller));
+ MOCK_METHOD0(PrepareToShow, void());
+ MOCK_METHOD0(Show, void());
+ MOCK_METHOD0(Hide, void());
+ MOCK_METHOD1(SetEditableUser, void(bool editable));
+ MOCK_METHOD0(ShowConfirmationScreen, void());
+ MOCK_METHOD1(ShowAuthError, void(const GoogleServiceAuthError& error));
+ MOCK_METHOD0(ShowAccountError, void());
+ MOCK_METHOD0(ShowFatalAuthError, void());
+ MOCK_METHOD0(ShowFatalEnrollmentError, void());
+ MOCK_METHOD0(ShowNetworkEnrollmentError, void());
+};
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_ENTERPRISE_ENROLLMENT_SCREEN_H_
diff --git a/chrome/browser/chromeos/login/oobe_display.h b/chrome/browser/chromeos/login/oobe_display.h
index 2c0d607..3edb4fd 100644
--- a/chrome/browser/chromeos/login/oobe_display.h
+++ b/chrome/browser/chromeos/login/oobe_display.h
@@ -11,11 +11,12 @@
namespace chromeos {
+class EnterpriseEnrollmentScreenActor;
class EulaScreenActor;
+class NetworkScreenActor;
class ScreenObserver;
class UpdateScreenActor;
class UserImageScreenActor;
-class NetworkScreenActor;
// TODO(altimofeev): use real actors instead
class ViewScreenDelegate;
class WizardScreen;
@@ -33,13 +34,14 @@ class OobeDisplay {
virtual void HideScreen(WizardScreen* screen) = 0;
// Pointers to actors which should be used by the specific screens. Actors
- // must be owned by the OobeDisplay implementaion.
+ // must be owned by the OobeDisplay implementation.
virtual UpdateScreenActor* GetUpdateScreenActor() = 0;
virtual NetworkScreenActor* GetNetworkScreenActor() = 0;
virtual EulaScreenActor* GetEulaScreenActor() = 0;
+ virtual EnterpriseEnrollmentScreenActor*
+ GetEnterpriseEnrollmentScreenActor() = 0;
virtual UserImageScreenActor* GetUserImageScreenActor() = 0;
// TODO(altimofeev): use real actors instead.
- virtual ViewScreenDelegate* GetEnterpriseEnrollmentScreenActor() = 0;
virtual ViewScreenDelegate* GetRegistrationScreenActor() = 0;
virtual ViewScreenDelegate* GetHTMLPageScreenActor() = 0;
};
diff --git a/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.cc b/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.cc
new file mode 100644
index 0000000..8a2dcc3
--- /dev/null
+++ b/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.cc
@@ -0,0 +1,88 @@
+// 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 "views_enterprise_enrollment_screen_actor.h"
+
+#include "base/logging.h"
+
+namespace chromeos {
+
+// ViewsEnterpriseEnrollmentScreenActor, public --------------------------------
+
+ViewsEnterpriseEnrollmentScreenActor::ViewsEnterpriseEnrollmentScreenActor(
+ ViewScreenDelegate* delegate)
+ : ViewScreen<EnterpriseEnrollmentView> (delegate),
+ controller_(NULL) {
+}
+
+ViewsEnterpriseEnrollmentScreenActor::~ViewsEnterpriseEnrollmentScreenActor() {
+}
+
+// ViewsEnterpriseEnrollmentScreenActor, ViewScreen implementation -------------
+
+EnterpriseEnrollmentView* ViewsEnterpriseEnrollmentScreenActor::AllocateView() {
+ return new EnterpriseEnrollmentView(controller_);
+}
+
+// ViewsEnterpriseEnrollmentScreenActor,
+// EnterpriseEnrollmentScreenActor implementation --------------------------
+
+void ViewsEnterpriseEnrollmentScreenActor::SetController(
+ EnterpriseEnrollmentUI::Controller* controller) {
+ controller_ = controller;
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::SetEditableUser(bool editable) {
+ GetUIActor()->SetEditableUser(editable);
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::PrepareToShow() {
+ ViewScreen<EnterpriseEnrollmentView>::PrepareToShow();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::Show() {
+ ViewScreen<EnterpriseEnrollmentView>::Show();
+ // Make the focus go initially to the DOMView, so that the email input field
+ // receives the focus.
+ view()->RequestFocus();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::Hide() {
+ ViewScreen<EnterpriseEnrollmentView>::Hide();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowConfirmationScreen() {
+ GetUIActor()->ShowConfirmationScreen();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowAuthError(
+ const GoogleServiceAuthError & error) {
+ GetUIActor()->ShowAuthError(error);
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowAccountError() {
+ GetUIActor()->ShowAccountError();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowFatalAuthError() {
+ GetUIActor()->ShowFatalAuthError();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowFatalEnrollmentError() {
+ GetUIActor()->ShowFatalEnrollmentError();
+}
+
+void ViewsEnterpriseEnrollmentScreenActor::ShowNetworkEnrollmentError() {
+ GetUIActor()->ShowNetworkEnrollmentError();
+}
+
+// ViewsEnterpriseEnrollmentScreenActor, public --------------------------------
+
+EnterpriseEnrollmentScreenActor*
+ViewsEnterpriseEnrollmentScreenActor::GetUIActor() {
+ DCHECK(view());
+ return view()->GetActor();
+}
+
+} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.h b/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.h
new file mode 100644
index 0000000..ed09587
--- /dev/null
+++ b/chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.h
@@ -0,0 +1,52 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
+#define CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_view.h"
+#include "chrome/browser/chromeos/login/view_screen.h"
+
+namespace chromeos {
+
+// Views specific implementation of the EnterpriseEnrollmentScreenActor.
+class ViewsEnterpriseEnrollmentScreenActor
+ : public EnterpriseEnrollmentScreenActor,
+ public ViewScreen<EnterpriseEnrollmentView> {
+ public:
+ explicit ViewsEnterpriseEnrollmentScreenActor(ViewScreenDelegate* delegate);
+ virtual ~ViewsEnterpriseEnrollmentScreenActor();
+
+ // Implements ViewScreen:
+ virtual EnterpriseEnrollmentView* AllocateView() OVERRIDE;
+
+ // Implements EnterpriseEnrollmentScreenActor:
+ virtual void SetController(
+ EnterpriseEnrollmentUI::Controller* controller) OVERRIDE;
+ virtual void SetEditableUser(bool editable) OVERRIDE;
+ virtual void PrepareToShow() OVERRIDE;
+ virtual void Show() OVERRIDE;
+ virtual void Hide() OVERRIDE;
+ virtual void ShowConfirmationScreen() OVERRIDE;
+ virtual void ShowAuthError(const GoogleServiceAuthError& error) OVERRIDE;
+ virtual void ShowAccountError() OVERRIDE;
+ virtual void ShowFatalAuthError() OVERRIDE;
+ virtual void ShowFatalEnrollmentError() OVERRIDE;
+ virtual void ShowNetworkEnrollmentError() OVERRIDE;
+
+ private:
+ // Returns UI actor to be used.
+ EnterpriseEnrollmentScreenActor* GetUIActor();
+
+ EnterpriseEnrollmentUI::Controller* controller_;
+
+ DISALLOW_COPY_AND_ASSIGN(ViewsEnterpriseEnrollmentScreenActor);
+};
+
+} // namespace chromeos
+#endif // CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_ENTERPRISE_ENROLLMENT_SCREEN_ACTOR_H_
diff --git a/chrome/browser/chromeos/login/views_oobe_display.cc b/chrome/browser/chromeos/login/views_oobe_display.cc
index 700e069..438c302 100644
--- a/chrome/browser/chromeos/login/views_oobe_display.cc
+++ b/chrome/browser/chromeos/login/views_oobe_display.cc
@@ -5,9 +5,10 @@
#include <vector>
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/login/views_enterprise_enrollment_screen_actor.h"
#include "chrome/browser/chromeos/login/views_eula_screen_actor.h"
-#include "chrome/browser/chromeos/login/views_oobe_display.h"
#include "chrome/browser/chromeos/login/views_network_screen_actor.h"
+#include "chrome/browser/chromeos/login/views_oobe_display.h"
#include "chrome/browser/chromeos/login/views_update_screen_actor.h"
#include "chrome/browser/chromeos/login/views_user_image_screen_actor.h"
#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
@@ -197,8 +198,13 @@ EulaScreenActor* ViewsOobeDisplay::GetEulaScreenActor() {
return eula_screen_actor_.get();
}
-ViewScreenDelegate* ViewsOobeDisplay::GetEnterpriseEnrollmentScreenActor() {
- return this;
+EnterpriseEnrollmentScreenActor* ViewsOobeDisplay::
+ GetEnterpriseEnrollmentScreenActor() {
+ if (enterprise_enrollment_screen_actor_ == NULL) {
+ enterprise_enrollment_screen_actor_.reset(
+ new ViewsEnterpriseEnrollmentScreenActor(this));
+ }
+ return enterprise_enrollment_screen_actor_.get();
}
UserImageScreenActor* ViewsOobeDisplay::GetUserImageScreenActor() {
diff --git a/chrome/browser/chromeos/login/views_oobe_display.h b/chrome/browser/chromeos/login/views_oobe_display.h
index 9a49194..5436193 100644
--- a/chrome/browser/chromeos/login/views_oobe_display.h
+++ b/chrome/browser/chromeos/login/views_oobe_display.h
@@ -32,8 +32,8 @@ class ViewsOobeDisplay : public OobeDisplay,
virtual UpdateScreenActor* GetUpdateScreenActor();
virtual NetworkScreenActor* GetNetworkScreenActor();
virtual EulaScreenActor* GetEulaScreenActor();
+ virtual EnterpriseEnrollmentScreenActor* GetEnterpriseEnrollmentScreenActor();
virtual UserImageScreenActor* GetUserImageScreenActor();
- virtual ViewScreenDelegate* GetEnterpriseEnrollmentScreenActor();
virtual ViewScreenDelegate* GetRegistrationScreenActor();
virtual ViewScreenDelegate* GetHTMLPageScreenActor();
@@ -75,6 +75,8 @@ class ViewsOobeDisplay : public OobeDisplay,
scoped_ptr<UpdateScreenActor> update_screen_actor_;
scoped_ptr<NetworkScreenActor> network_screen_actor_;
scoped_ptr<EulaScreenActor> eula_screen_actor_;
+ scoped_ptr<EnterpriseEnrollmentScreenActor>
+ enterprise_enrollment_screen_actor_;
scoped_ptr<UserImageScreenActor> user_image_screen_actor_;
FRIEND_TEST_ALL_PREFIXES(WizardControllerFlowTest, Accelerators);
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index 249b16e..c47349b 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -226,7 +226,7 @@ chromeos::EnterpriseEnrollmentScreen*
if (!enterprise_enrollment_screen_.get()) {
enterprise_enrollment_screen_.reset(
new chromeos::EnterpriseEnrollmentScreen(
- oobe_display_->GetEnterpriseEnrollmentScreenActor()));
+ this, oobe_display_->GetEnterpriseEnrollmentScreenActor()));
}
return enterprise_enrollment_screen_.get();
}
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
index 338d4db..fdef0a3 100644
--- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
@@ -7,14 +7,15 @@
#include "chrome/browser/chromeos/login/enterprise_enrollment_screen.h"
#include "chrome/browser/chromeos/login/existing_user_controller.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h"
+#include "chrome/browser/chromeos/login/mock_enterprise_enrollment_screen.h"
#include "chrome/browser/chromeos/login/mock_eula_screen.h"
#include "chrome/browser/chromeos/login/mock_network_screen.h"
#include "chrome/browser/chromeos/login/mock_update_screen.h"
#include "chrome/browser/chromeos/login/network_screen.h"
#include "chrome/browser/chromeos/login/network_selection_view.h"
#include "chrome/browser/chromeos/login/user_image_screen.h"
-#include "chrome/browser/chromeos/login/views_oobe_display.h"
#include "chrome/browser/chromeos/login/view_screen.h"
+#include "chrome/browser/chromeos/login/views_oobe_display.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h"
#include "chrome/test/ui_test_utils.h"
@@ -47,13 +48,6 @@ class MockOutShowHide : public T {
EXPECT_CALL(*mock_var, Show()).Times(0); \
EXPECT_CALL(*mock_var, Hide()).Times(0);
-#define MOCK_OLD(mock_var, screen_name, mocked_class) \
- mock_var = new MockOutShowHide<mocked_class, int>( \
- static_cast<ViewsOobeDisplay*>(controller()->oobe_display_)); \
- controller()->screen_name.reset(mock_var); \
- EXPECT_CALL(*mock_var, Show()).Times(0); \
- EXPECT_CALL(*mock_var, Hide()).Times(0);
-
class WizardControllerTest : public WizardInProcessBrowserTest {
protected:
WizardControllerTest() : WizardInProcessBrowserTest(
@@ -110,10 +104,8 @@ class WizardControllerFlowTest : public WizardControllerTest {
MOCK(mock_update_screen_, update_screen_,
MockUpdateScreen, MockUpdateScreenActor);
MOCK(mock_eula_screen_, eula_screen_, MockEulaScreen, MockEulaScreenActor);
-
- MOCK_OLD(mock_enterprise_enrollment_screen_,
- enterprise_enrollment_screen_,
- EnterpriseEnrollmentScreen);
+ MOCK(mock_enterprise_enrollment_screen_, enterprise_enrollment_screen_,
+ MockEnterpriseEnrollmentScreen, MockEnterpriseEnrollmentScreenActor);
// Switch to the initial screen.
EXPECT_EQ(NULL, controller()->current_screen());
@@ -131,8 +123,8 @@ class WizardControllerFlowTest : public WizardControllerTest {
mock_network_screen_;
MockOutShowHide<MockUpdateScreen, MockUpdateScreenActor>* mock_update_screen_;
MockOutShowHide<MockEulaScreen, MockEulaScreenActor>* mock_eula_screen_;
- MockOutShowHide<EnterpriseEnrollmentScreen, int>*
- mock_enterprise_enrollment_screen_;
+ MockOutShowHide<MockEnterpriseEnrollmentScreen,
+ MockEnterpriseEnrollmentScreenActor>* mock_enterprise_enrollment_screen_;
private:
DISALLOW_COPY_AND_ASSIGN(WizardControllerFlowTest);
diff --git a/chrome/browser/chromeos/login/wizard_screen.h b/chrome/browser/chromeos/login/wizard_screen.h
index 6ead431..aff7918 100644
--- a/chrome/browser/chromeos/login/wizard_screen.h
+++ b/chrome/browser/chromeos/login/wizard_screen.h
@@ -6,6 +6,8 @@
#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_SCREEN_H_
#pragma once
+#include "base/gtest_prod_util.h"
+
namespace chromeos {
class ScreenObserver;
@@ -30,6 +32,7 @@ class WizardScreen {
}
private:
+ FRIEND_TEST_ALL_PREFIXES(EnterpriseEnrollmentScreenTest, TestCancel);
friend class NetworkScreenTest;
friend class UpdateScreenTest;
diff --git a/chrome/browser/policy/enterprise_metrics_enrollment_browsertest.cc b/chrome/browser/policy/enterprise_metrics_enrollment_browsertest.cc
index 7cd2fcc..fc191a8 100644
--- a/chrome/browser/policy/enterprise_metrics_enrollment_browsertest.cc
+++ b/chrome/browser/policy/enterprise_metrics_enrollment_browsertest.cc
@@ -92,12 +92,12 @@ class EnterpriseMetricsEnrollmentTest : public WizardInProcessBrowserTest {
};
IN_PROC_BROWSER_TEST_F(EnterpriseMetricsEnrollmentTest, EnrollmentStart) {
- screen_->Authenticate("", "", "", "");
+ screen_->OnAuthSubmitted("", "", "", "");
CheckSample(policy::kMetricEnrollmentStarted);
}
IN_PROC_BROWSER_TEST_F(EnterpriseMetricsEnrollmentTest, EnrollmentCancelled) {
- screen_->CancelEnrollment();
+ screen_->OnAuthCancelled();
CheckSample(policy::kMetricEnrollmentCancelled);
}
diff --git a/chrome/browser/policy/resources/enrollment.css b/chrome/browser/policy/resources/enrollment.css
index 3834a0d..e3c7c49 100644
--- a/chrome/browser/policy/resources/enrollment.css
+++ b/chrome/browser/policy/resources/enrollment.css
@@ -63,7 +63,7 @@ input[type='submit'] {
width: 50%;
}
-#gaialogin {
+#gaia-local-login {
border: none;
width: 100%;
height: 100%;
diff --git a/chrome/browser/policy/resources/enrollment.html b/chrome/browser/policy/resources/enrollment.html
index 2182c73..d5acf0d 100644
--- a/chrome/browser/policy/resources/enrollment.html
+++ b/chrome/browser/policy/resources/enrollment.html
@@ -9,7 +9,7 @@
</head>
<body class="stretch"
i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
- <div id="login-screen" class="stretch">
+ <div id="login-screen" class="stretch" hidden>
<div id="login-info">
<h1 id="login-header" i18n-content="loginHeader"></h1>
<div id="login-explain" i18n-content="loginExplain"></div>
@@ -36,11 +36,11 @@
</div>
</div>
</div><div id="login-form">
- <iframe id="gaialogin" scrolling="no"
+ <iframe id="gaia-local-login" scrolling="no"
src="chrome://enterprise-enrollment/gaialogin"></iframe>
</div>
</div>
- <div id="confirmation-screen" class="stretch">
+ <div id="confirmation-screen" class="stretch" hidden>
<h1 id="confirmation-header" i18n-content="confirmationHeader"></h1>
<div id="confirmation-content">
<img id="confirmation-image" src="success.png">
diff --git a/chrome/browser/policy/resources/enrollment.js b/chrome/browser/policy/resources/enrollment.js
index fc86711..2505151 100644
--- a/chrome/browser/policy/resources/enrollment.js
+++ b/chrome/browser/policy/resources/enrollment.js
@@ -39,8 +39,9 @@ cr.define('enterpriseEnrollment', function() {
}
function showInitialScreen() {
- var args = JSON.parse(chrome.dialogArguments);
- showScreen(args.initialScreen);
+ showScreen('login-screen');
+ document.addEventListener('keydown', onKeydown);
+ $('gaialogin').contentWindow.addEventListener('keydown', onKeydown);
}
function onKeydown(e) {
@@ -52,9 +53,7 @@ cr.define('enterpriseEnrollment', function() {
}
function onLoad() {
- showInitialScreen();
- document.addEventListener('keydown', onKeydown);
- $('gaialogin').contentWindow.addEventListener('keydown', onKeydown);
+ chrome.send('enrollmentScreenReady', []);
}
return {
diff --git a/chrome/browser/resources/chromeos/login/oobe.css b/chrome/browser/resources/chromeos/login/oobe.css
index 105f97ea..bccf0789 100644
--- a/chrome/browser/resources/chromeos/login/oobe.css
+++ b/chrome/browser/resources/chromeos/login/oobe.css
@@ -179,10 +179,15 @@ hr.bottomshadow {
#oobe.connect #connect-dot,
#oobe.eula #eula-dot,
#oobe.signin #signin-dot,
+#oobe.enrollment #signin-dot,
#oobe.photo #photo-dot {
opacity: 0.4;
}
+#enrollment-dot {
+ display: none;
+}
+
#connect table {
margin: 7em auto;
}
@@ -336,3 +341,69 @@ button {
top: 0;
z-index: 5;
}
+
+#enroll-login-screen {
+ display: -webkit-box;
+ width: 630px;
+}
+
+#enroll-login-info {
+ width: 310px;
+}
+
+.enroll-login-item {
+ font-size: 0.9em;
+ margin: 16px 8px;
+}
+
+.enroll-login-item-content {
+ -webkit-margin-start: 52px;
+}
+
+.enroll-login-item-header {
+ font-weight: bold;
+ margin: 0 8px 0 0;
+}
+
+.enroll-login-item-image {
+ position: absolute;
+}
+
+#enroll-login-form {
+ height: 100%;
+ width: 310px;
+}
+
+#gaia-local-login {
+ border: none;
+ height: 100%;
+ vertical-align: top;
+ width: 100%;
+}
+
+#enroll-confirmation-header {
+ font-size: 1.4em;
+ font-weight: bold;
+}
+
+#enroll-confirmation-content {
+ height: 1.5em;
+ margin-top: -.75em;
+ text-align: center;
+ top: 50%;
+ width: 100%;
+}
+
+#enroll-confirmation-image {
+ vertical-align: middle;
+}
+
+#enroll-confirmation-footer {
+ bottom: 0;
+ text-align: end;
+ width: 100%;
+}
+
+#close-button.visible {
+ display: inline-block;
+}
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html
index 198ba05..f803d19 100644
--- a/chrome/browser/resources/chromeos/login/oobe.html
+++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -15,6 +15,7 @@
<script src="oobe_screen_network.js"></script>
<script src="oobe_screen_eula.js"></script>
<script src="oobe_screen_update.js"></script>
+<script src="oobe_screen_enrollment.js"></script>
<script src="screen_signin.js"></script>
<script src="screen_gaia_signin.js"></script>
</head>
@@ -32,6 +33,7 @@
<include src="oobe_screen_network.html">
<include src="oobe_screen_eula.html">
<include src="oobe_screen_update.html">
+ <include src="oobe_screen_enrollment.html">
<include src="screen_signin.html">
<include src="screen_gaia_signin.html">
</div>
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js
index 2d5a0a2..47cb5476 100644
--- a/chrome/browser/resources/chromeos/login/oobe.js
+++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -216,6 +216,7 @@ cr.define('cr.ui', function() {
oobe.NetworkScreen.register();
oobe.EulaScreen.register();
oobe.UpdateScreen.register();
+ oobe.EnrollmentScreen.register();
if (localStrings.getString('authType') == 'webui')
login.SigninScreen.register();
else
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.html b/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.html
new file mode 100644
index 0000000..98719fa
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.html
@@ -0,0 +1,42 @@
+<div class="step right hidden" id="enrollment">
+ <div id="enroll-login-screen">
+ <div id="enroll-login-info">
+ <div id="enroll-login-explain" i18n-content="loginExplain"></div>
+ <div class="enroll-login-item">
+ <div class="enroll-login-item-image">
+ <img src="../../../policy/resources/cloud.png">
+ </div>
+ <div class="enroll-login-item-content">
+ <h4 class="enroll-login-item-header"
+ i18n-content="cloudHeader"></h4>
+ <div class="enroll-login-item-explain"
+ i18n-content="cloudExplain"></div>
+ </div>
+ </div>
+ <div class="enroll-login-item">
+ <div class="enroll-login-item-image">
+ <img src="../../../policy/resources/access_control.png">
+ </div>
+ <div class="enroll-login-item-content">
+ <h4 class="enroll-login-item-header"
+ i18n-content="accesscontrolHeader"></h4>
+ <div class="enroll-login-item-explain"
+ i18n-content="accesscontrolExplain"></div>
+ </div>
+ </div>
+ </div>
+ <div id="enroll-login-form">
+ <iframe id="gaia-local-login" scrolling="no"
+ src="chrome://oobe/gaialogin"></iframe>
+ </div>
+ </div>
+ <div id="enroll-confirmation-screen" hidden>
+ <h1 id="enroll-confirmation-header" i18n-content="confirmationHeader"></h1>
+ <div id="enroll-confirmation-content">
+ <img id="enroll-confirmation-image"
+ src="../../../policy/resources/success.png">
+ <span id="enroll-confirmation-message" i18n-content="confirmationMessage">
+ </span>
+ </div>
+ </div>
+</div>
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.js b/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.js
new file mode 100644
index 0000000..ecd3af7
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_enrollment.js
@@ -0,0 +1,70 @@
+// 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.
+
+cr.define('oobe', function() {
+ /**
+ * Creates a new oobe screen div.
+ * @constructor
+ * @extends {HTMLDivElement}
+ */
+ var EnrollmentScreen = cr.ui.define('div');
+
+ /**
+ * Registers with Oobe.
+ */
+ EnrollmentScreen.register = function() {
+ var screen = $('enrollment');
+ EnrollmentScreen.decorate(screen);
+ Oobe.getInstance().registerScreen(screen);
+ };
+
+ EnrollmentScreen.prototype = {
+ __proto__: HTMLDivElement.prototype,
+
+ /** @inheritDoc */
+ decorate: function() {
+ // TODO(altimofeev): add accelerators for the Enterprise Enrollment
+ // screen.
+ },
+
+ /**
+ * Header text of the screen.
+ * @type {string}
+ */
+ get header() {
+ return localStrings.getString('loginHeader');
+ },
+
+ /**
+ * Buttons in oobe wizard's button strip.
+ * @type {array} Array of Buttons.
+ */
+ get buttons() {
+ var buttons = [];
+
+ var closeButton = this.ownerDocument.createElement('button');
+ closeButton.id = 'close-button';
+ closeButton.textContent = localStrings.getString('confirmationClose');
+ closeButton.addEventListener('click', function(e) {
+ chrome.send('confirmationClose', []);
+ });
+ buttons.push(closeButton);
+
+ return buttons;
+ }
+ };
+
+ /**
+ * Shows confirmation screen for the enterprise enrollment.
+ */
+ EnrollmentScreen.showConfirmationScreen = function() {
+ $('enroll-login-screen').hidden = true;
+ $('enroll-confirmation-screen').hidden = false;
+ $('close-button').classList.add('visible');
+ };
+
+ return {
+ EnrollmentScreen: EnrollmentScreen
+ };
+});
diff --git a/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.cc b/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.cc
index ad2717c..455fc30 100644
--- a/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.cc
@@ -4,15 +4,15 @@
#include "chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h"
-#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
-#include "base/lazy_instance.h"
-#include "base/memory/ref_counted_memory.h"
#include "base/message_loop.h"
#include "base/stringprintf.h"
+#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
+#include "chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h"
#include "chrome/common/jstemplate_builder.h"
#include "chrome/common/url_constants.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -27,40 +27,77 @@
namespace chromeos {
-static base::LazyInstance<
- PropertyAccessor<EnterpriseEnrollmentUI::Controller*> >
- g_enrollment_ui_controller_property(base::LINKER_INITIALIZED);
-
static const char kEnterpriseEnrollmentGaiaLoginPath[] = "gaialogin";
-// WebUIMessageHandler implementation which handles events occuring on the page,
-// such as the user pressing the signin button.
-class EnterpriseEnrollmentMessageHandler : public WebUIMessageHandler {
+// Work around EnterpriseEnrollmentScreenHandler, which is suitable for the
+// stand alone enterprise enrollment screen (views implementation).
+class SingleEnterpriseEnrollmentScreenHandler
+ : public EnterpriseEnrollmentScreenHandler {
public:
- EnterpriseEnrollmentMessageHandler();
- virtual ~EnterpriseEnrollmentMessageHandler();
+ SingleEnterpriseEnrollmentScreenHandler();
+ virtual ~SingleEnterpriseEnrollmentScreenHandler() {}
- // WebUIMessageHandler implementation.
+ // Overridden from EnterpriseEnrollmentScreenHandler:
+ virtual void ShowConfirmationScreen() OVERRIDE;
+ virtual void SetController(
+ EnterpriseEnrollmentUI::Controller* controller_) OVERRIDE;
virtual void RegisterMessages() OVERRIDE;
private:
// Handlers for WebUI messages.
- void HandleSubmitAuth(const ListValue* args);
- void HandleCancelAuth(const ListValue* args);
- void HandleConfirmationClose(const ListValue* args);
+ void HandleScreenReady(const ListValue* args);
- // Gets the currently installed enrollment controller (if any).
- EnterpriseEnrollmentUI::Controller* GetController();
+ bool show_when_controller_is_set_;
- DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentMessageHandler);
+ DISALLOW_COPY_AND_ASSIGN(SingleEnterpriseEnrollmentScreenHandler);
};
+SingleEnterpriseEnrollmentScreenHandler::
+ SingleEnterpriseEnrollmentScreenHandler()
+ : show_when_controller_is_set_(false) {
+}
+
+void SingleEnterpriseEnrollmentScreenHandler::ShowConfirmationScreen() {
+ RenderViewHost* render_view_host =
+ web_ui_->tab_contents()->render_view_host();
+ render_view_host->ExecuteJavascriptInWebFrame(
+ string16(),
+ UTF8ToUTF16("enterpriseEnrollment.showScreen('confirmation-screen');"));
+}
+
+void SingleEnterpriseEnrollmentScreenHandler::SetController(
+ EnterpriseEnrollmentUI::Controller* controller) {
+ EnterpriseEnrollmentScreenHandler::SetController(controller);
+ if (show_when_controller_is_set_) {
+ show_when_controller_is_set_ = false;
+ HandleScreenReady(NULL);
+ }
+}
+
+void SingleEnterpriseEnrollmentScreenHandler::RegisterMessages() {
+ EnterpriseEnrollmentScreenHandler::RegisterMessages();
+ web_ui_->RegisterMessageCallback(
+ "enrollmentScreenReady",
+ NewCallback(this,
+ &SingleEnterpriseEnrollmentScreenHandler::HandleScreenReady));
+}
+
+void SingleEnterpriseEnrollmentScreenHandler::HandleScreenReady(
+ const ListValue* value) {
+ if (!controller_) {
+ show_when_controller_is_set_ = true;
+ return;
+ }
+ SetupGaiaStrings();
+ web_ui_->CallJavascriptFunction("enterpriseEnrollment.showInitialScreen");
+}
+
// A data source that provides the resources for the enterprise enrollment page.
// The enterprise enrollment page requests the HTML and other resources from
// this source.
class EnterpriseEnrollmentDataSource : public ChromeURLDataManager::DataSource {
public:
- EnterpriseEnrollmentDataSource();
+ explicit EnterpriseEnrollmentDataSource(DictionaryValue* localized_strings);
// DataSource implementation.
virtual void StartDataRequest(const std::string& path,
@@ -71,176 +108,34 @@ class EnterpriseEnrollmentDataSource : public ChromeURLDataManager::DataSource {
private:
virtual ~EnterpriseEnrollmentDataSource();
- // Saves i18n string for |resource_id| to the |key| property of |dictionary|.
- static void AddString(DictionaryValue* dictionary,
- const std::string& key,
- int resource_id);
- static void AddString(DictionaryValue* dictionary,
- const std::string& key,
- int resource_id,
- const string16& arg1);
+ scoped_ptr<DictionaryValue> localized_strings_;
DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentDataSource);
};
-EnterpriseEnrollmentMessageHandler::EnterpriseEnrollmentMessageHandler() {}
-
-EnterpriseEnrollmentMessageHandler::~EnterpriseEnrollmentMessageHandler() {}
-
-void EnterpriseEnrollmentMessageHandler::RegisterMessages() {
- web_ui_->RegisterMessageCallback(
- "SubmitAuth",
- NewCallback(
- this, &EnterpriseEnrollmentMessageHandler::HandleSubmitAuth));
- web_ui_->RegisterMessageCallback(
- "DialogClose",
- NewCallback(
- this, &EnterpriseEnrollmentMessageHandler::HandleCancelAuth));
- web_ui_->RegisterMessageCallback(
- "confirmationClose",
- NewCallback(
- this, &EnterpriseEnrollmentMessageHandler::HandleConfirmationClose));
-}
-
-void EnterpriseEnrollmentMessageHandler::HandleSubmitAuth(
- const ListValue* value) {
- EnterpriseEnrollmentUI::Controller* controller = GetController();
- if (!controller) {
- NOTREACHED();
- return;
- }
-
- // Value carries single list entry, which is a json-encoded string that
- // contains the auth parameters (see gaia_login.js).
- std::string json_params;
- if (!value->GetString(0, &json_params)) {
- NOTREACHED();
- return;
- }
-
- // Check the value type.
- scoped_ptr<Value> params(base::JSONReader::Read(json_params, false));
- if (!params.get() || !params->IsType(Value::TYPE_DICTIONARY)) {
- NOTREACHED();
- return;
- }
-
- // Read the parameters.
- DictionaryValue* params_dict = static_cast<DictionaryValue*>(params.get());
- std::string user;
- std::string pass;
- std::string captcha;
- std::string access_code;
- if (!params_dict->GetString("user", &user) ||
- !params_dict->GetString("pass", &pass) ||
- !params_dict->GetString("captcha", &captcha) ||
- !params_dict->GetString("access_code", &access_code)) {
- NOTREACHED();
- return;
- }
-
- controller->OnAuthSubmitted(user, pass, captcha, access_code);
-}
-
-void EnterpriseEnrollmentMessageHandler::HandleCancelAuth(
- const ListValue* value) {
- EnterpriseEnrollmentUI::Controller* controller = GetController();
- if (!controller) {
- NOTREACHED();
- return;
- }
-
- controller->OnAuthCancelled();
-}
-
-void EnterpriseEnrollmentMessageHandler::HandleConfirmationClose(
- const ListValue* value) {
- EnterpriseEnrollmentUI::Controller* controller = GetController();
- if (!controller) {
- NOTREACHED();
- return;
- }
-
- controller->OnConfirmationClosed();
-}
-
-EnterpriseEnrollmentUI::Controller*
- EnterpriseEnrollmentMessageHandler::GetController() {
- return EnterpriseEnrollmentUI::GetController(web_ui_);
-}
-
-EnterpriseEnrollmentDataSource::EnterpriseEnrollmentDataSource()
+EnterpriseEnrollmentDataSource::EnterpriseEnrollmentDataSource(
+ DictionaryValue* localized_strings)
: DataSource(chrome::kChromeUIEnterpriseEnrollmentHost,
- MessageLoop::current()) {}
+ MessageLoop::current()),
+ localized_strings_(localized_strings) {
+}
void EnterpriseEnrollmentDataSource::StartDataRequest(const std::string& path,
bool is_off_the_record,
int request_id) {
ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance();
- DictionaryValue strings;
std::string response;
if (path.empty()) {
- AddString(&strings, "loginHeader",
- IDS_ENTERPRISE_ENROLLMENT_LOGIN_HEADER),
- AddString(&strings, "loginExplain",
- IDS_ENTERPRISE_ENROLLMENT_LOGIN_EXPLAIN,
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
- AddString(&strings, "cloudHeader",
- IDS_ENTERPRISE_ENROLLMENT_CLOUD_HEADER),
- AddString(&strings, "cloudExplain",
- IDS_ENTERPRISE_ENROLLMENT_CLOUD_EXPLAIN);
- AddString(&strings, "accesscontrolHeader",
- IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_HEADER),
- AddString(&strings, "accesscontrolExplain",
- IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_EXPLAIN);
- AddString(&strings, "confirmationHeader",
- IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_HEADER);
- AddString(&strings, "confirmationMessage",
- IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_MESSAGE);
- AddString(&strings, "confirmationClose",
- IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_CLOSE);
-
static const base::StringPiece html(
resource_bundle.GetRawDataResource(IDR_ENTERPRISE_ENROLLMENT_HTML));
- SetFontAndTextDirection(&strings);
- response = jstemplate_builder::GetI18nTemplateHtml(html, &strings);
+ response =
+ jstemplate_builder::GetI18nTemplateHtml(html, localized_strings_.get());
} else if (path == kEnterpriseEnrollmentGaiaLoginPath) {
- strings.SetString("invalidpasswordhelpurl", "");
- strings.SetString("invalidaccessaccounturl", "");
- strings.SetString("cannotaccessaccount", "");
- strings.SetString("cannotaccessaccounturl", "");
- strings.SetString("createaccount", "");
- strings.SetString("createnewaccounturl", "");
- strings.SetString("getaccesscodehelp", "");
- strings.SetString("getaccesscodeurl", "");
-
- // None of the strings used here currently have sync-specific wording in
- // them. We have a unit test to catch if that happens.
- strings.SetString("introduction", "");
- AddString(&strings, "signinprefix", IDS_SYNC_LOGIN_SIGNIN_PREFIX);
- AddString(&strings, "signinsuffix", IDS_SYNC_LOGIN_SIGNIN_SUFFIX);
- AddString(&strings, "cannotbeblank", IDS_SYNC_CANNOT_BE_BLANK);
- AddString(&strings, "emaillabel", IDS_SYNC_LOGIN_EMAIL);
- AddString(&strings, "passwordlabel", IDS_SYNC_LOGIN_PASSWORD);
- AddString(&strings, "invalidcredentials",
- IDS_SYNC_INVALID_USER_CREDENTIALS);
- AddString(&strings, "signin", IDS_SYNC_SIGNIN);
- AddString(&strings, "couldnotconnect", IDS_SYNC_LOGIN_COULD_NOT_CONNECT);
- AddString(&strings, "cancel", IDS_CANCEL);
- AddString(&strings, "settingup", IDS_SYNC_LOGIN_SETTING_UP);
- AddString(&strings, "success", IDS_SYNC_SUCCESS);
- AddString(&strings, "errorsigningin", IDS_SYNC_ERROR_SIGNING_IN);
- AddString(&strings, "captchainstructions",
- IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS);
- AddString(&strings, "invalidaccesscode",
- IDS_SYNC_INVALID_ACCESS_CODE_LABEL);
- AddString(&strings, "enteraccesscode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL);
-
static const base::StringPiece html(resource_bundle.GetRawDataResource(
IDR_GAIA_LOGIN_HTML));
- SetFontAndTextDirection(&strings);
- response = jstemplate_builder::GetI18nTemplateHtml(html, &strings);
+ response =
+ jstemplate_builder::GetI18nTemplateHtml(html, localized_strings_.get());
}
// Send the response.
@@ -257,69 +152,31 @@ std::string EnterpriseEnrollmentDataSource::GetMimeType(
EnterpriseEnrollmentDataSource::~EnterpriseEnrollmentDataSource() {}
-void EnterpriseEnrollmentDataSource::AddString(DictionaryValue* dictionary,
- const std::string& key,
- int resource_id) {
- dictionary->SetString(key, l10n_util::GetStringUTF16(resource_id));
-}
-
-void EnterpriseEnrollmentDataSource::AddString(DictionaryValue* dictionary,
- const std::string& key,
- int resource_id,
- const string16& arg1) {
- dictionary->SetString(key, l10n_util::GetStringFUTF16(resource_id, arg1));
-}
-
EnterpriseEnrollmentUI::EnterpriseEnrollmentUI(TabContents* contents)
- : ChromeWebUI(contents) {}
+ : ChromeWebUI(contents), handler_(NULL) {}
EnterpriseEnrollmentUI::~EnterpriseEnrollmentUI() {}
void EnterpriseEnrollmentUI::RenderViewCreated(
RenderViewHost* render_view_host) {
- // Bail out early if the controller doesn't exist or web ui is disabled.
- if (!GetController(this) || !(bindings_ & BindingsPolicy::WEB_UI))
+ // Bail out early if web ui is disabled.
+ if (!(bindings_ & BindingsPolicy::WEB_UI))
return;
- WebUIMessageHandler* handler = new EnterpriseEnrollmentMessageHandler();
- AddMessageHandler(handler->Attach(this));
+ handler_ = new SingleEnterpriseEnrollmentScreenHandler();
+ AddMessageHandler(handler_->Attach(this));
+ scoped_ptr<DictionaryValue> localized_strings(new DictionaryValue);
+ handler_->GetLocalizedStrings(localized_strings.get());
+ ChromeURLDataManager::DataSource::SetFontAndTextDirection(
+ localized_strings.get());
// Set up the data source, so the enrollment page can be loaded.
tab_contents()->profile()->GetChromeURLDataManager()->AddDataSource(
- new EnterpriseEnrollmentDataSource());
-
- std::string user;
- bool has_init_user = GetController(this)->GetInitialUser(&user);
- if (!has_init_user)
- user = "";
- // Set the arguments for showing the gaia login page.
- DictionaryValue args;
- args.SetString("user", user);
- args.SetInteger("error", 0);
- args.SetBoolean("editable_user", !has_init_user);
- args.SetString("initialScreen", "login-screen");
- std::string json_args;
- base::JSONWriter::Write(&args, false, &json_args);
- render_view_host->SetWebUIProperty("dialogArguments", json_args);
+ new EnterpriseEnrollmentDataSource(localized_strings.release()));
}
-// static
-EnterpriseEnrollmentUI::Controller* EnterpriseEnrollmentUI::GetController(
- WebUI* ui) {
- Controller** controller =
- g_enrollment_ui_controller_property.Get().GetProperty(
- ui->tab_contents()->property_bag());
-
- return controller ? *controller : NULL;
-}
-
-// static
-void EnterpriseEnrollmentUI::SetController(
- TabContents* contents,
- EnterpriseEnrollmentUI::Controller* controller) {
- g_enrollment_ui_controller_property.Get().SetProperty(
- contents->property_bag(),
- controller);
+EnterpriseEnrollmentScreenActor* EnterpriseEnrollmentUI::GetActor() {
+ return handler_;
}
} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h b/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h
index 1e7b6d2..b5d6628 100644
--- a/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h
+++ b/chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h
@@ -8,9 +8,13 @@
#include "base/compiler_specific.h"
#include "chrome/browser/ui/webui/chrome_web_ui.h"
+#include "chrome/common/net/gaia/google_service_auth_error.h"
namespace chromeos {
+class EnterpriseEnrollmentScreenActor;
+class SingleEnterpriseEnrollmentScreenHandler;
+
// WebUI implementation that handles the enterprise enrollment dialog in the
// Chrome OS login flow.
class EnterpriseEnrollmentUI : public ChromeWebUI {
@@ -33,20 +37,17 @@ class EnterpriseEnrollmentUI : public ChromeWebUI {
explicit EnterpriseEnrollmentUI(TabContents* contents);
virtual ~EnterpriseEnrollmentUI();
- // Overriden from WebUI.
+ // Overridden from WebUI.
virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
// Gets the URL for loading the UI.
static GURL GetURL();
- // Gets the controller the given |web_ui| is associated with. Returns NULL if
- // there is no controller set.
- static Controller* GetController(WebUI* web_ui);
-
- // Sets the controller on a tab contents.
- static void SetController(TabContents* contents, Controller* controller);
+ EnterpriseEnrollmentScreenActor* GetActor();
private:
+ SingleEnterpriseEnrollmentScreenHandler* handler_;
+
DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentUI);
};
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.cc
new file mode 100644
index 0000000..506c91f
--- /dev/null
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.cc
@@ -0,0 +1,298 @@
+// 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_enrollment_screen_handler.h"
+
+#include "base/callback.h"
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "grit/generated_resources.h"
+#include "grit/chromium_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace chromeos {
+
+// EnterpriseEnrollmentScreenHandler, public -----------------------------------
+
+EnterpriseEnrollmentScreenHandler::EnterpriseEnrollmentScreenHandler()
+ : controller_(NULL), editable_user_(true), show_on_init_(false) {
+}
+
+EnterpriseEnrollmentScreenHandler::~EnterpriseEnrollmentScreenHandler() {}
+
+void EnterpriseEnrollmentScreenHandler::SetupGaiaStrings() {
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+ std::string user;
+ bool has_init_user = controller_->GetInitialUser(&user);
+ if (!has_init_user)
+ user = "";
+ // Set the arguments for showing the gaia login page.
+ base::DictionaryValue args;
+ args.SetString("user", user);
+ args.SetInteger("error", 0);
+ args.SetBoolean("editable_user", !has_init_user);
+ std::string json_args;
+ base::JSONWriter::Write(&args, false, &json_args);
+ RenderViewHost* render_view_host =
+ web_ui_->tab_contents()->render_view_host();
+ render_view_host->SetWebUIProperty("dialogArguments", json_args);
+}
+
+// EnterpriseEnrollmentScreenHandler, WebUIMessageHandler implementation -------
+
+void EnterpriseEnrollmentScreenHandler::RegisterMessages() {
+ web_ui_->RegisterMessageCallback(
+ "SubmitAuth",
+ NewCallback(
+ this, &EnterpriseEnrollmentScreenHandler::HandleSubmitAuth));
+ web_ui_->RegisterMessageCallback(
+ "DialogClose",
+ NewCallback(
+ this, &EnterpriseEnrollmentScreenHandler::HandleCancelAuth));
+ web_ui_->RegisterMessageCallback(
+ "confirmationClose",
+ NewCallback(
+ this, &EnterpriseEnrollmentScreenHandler::HandleConfirmationClose));
+}
+
+// EnterpriseEnrollmentScreenHandler
+// EnterpriseEnrollmentScreenActor implementation -------------------------
+
+void EnterpriseEnrollmentScreenHandler::SetController(
+ EnterpriseEnrollmentUI::Controller* controller) {
+ controller_ = controller;
+}
+
+void EnterpriseEnrollmentScreenHandler::PrepareToShow() {
+}
+
+void EnterpriseEnrollmentScreenHandler::Show() {
+ SetupGaiaStrings();
+
+ if (!page_is_ready()) {
+ show_on_init_ = true;
+ return;
+ }
+ ShowScreen("enrollment", NULL);
+}
+
+void EnterpriseEnrollmentScreenHandler::Hide() {
+}
+
+void EnterpriseEnrollmentScreenHandler::SetEditableUser(bool editable) {
+ editable_user_ = editable;
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowConfirmationScreen() {
+ web_ui_->CallJavascriptFunction(
+ "oobe.EnrollmentScreen.showConfirmationScreen");
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowAuthError(
+ const GoogleServiceAuthError& error) {
+ base::DictionaryValue args;
+ args.SetInteger("error", error.state());
+ args.SetBoolean("editable_user", editable_user_);
+ args.SetString("captchaUrl", error.captcha().image_url.spec());
+ UpdateGaiaLogin(args);
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowAccountError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_ACCOUNT_ERROR);
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowFatalAuthError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_AUTH_ERROR);
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowFatalEnrollmentError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_ENROLLMENT_ERROR);
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowNetworkEnrollmentError() {
+ ShowError(IDS_ENTERPRISE_ENROLLMENT_NETWORK_ENROLLMENT_ERROR);
+}
+
+// EnterpriseEnrollmentScreenHandler BaseScreenHandler implementation ---------
+
+void EnterpriseEnrollmentScreenHandler::GetLocalizedStrings(
+ base::DictionaryValue *localized_strings) {
+
+ localized_strings->SetString(
+ "loginHeader",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_LOGIN_HEADER));
+ localized_strings->SetString(
+ "loginExplain",
+ l10n_util::GetStringFUTF16(IDS_ENTERPRISE_ENROLLMENT_LOGIN_EXPLAIN,
+ l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
+ localized_strings->SetString(
+ "cloudHeader",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CLOUD_HEADER));
+ localized_strings->SetString(
+ "cloudExplain",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CLOUD_EXPLAIN));
+ localized_strings->SetString(
+ "accesscontrolHeader",
+ l10n_util::GetStringUTF16(
+ IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_HEADER));
+ localized_strings->SetString(
+ "accesscontrolExplain",
+ l10n_util::GetStringUTF16(
+ IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_EXPLAIN));
+ localized_strings->SetString(
+ "confirmationHeader",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_HEADER));
+ localized_strings->SetString(
+ "confirmationMessage",
+ l10n_util::GetStringUTF16(
+ IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_MESSAGE));
+ localized_strings->SetString(
+ "confirmationClose",
+ l10n_util::GetStringUTF16(IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_CLOSE));
+
+ localized_strings->SetString("invalidpasswordhelpurl", "");
+ localized_strings->SetString("invalidaccessaccounturl", "");
+ localized_strings->SetString("cannotaccessaccount", "");
+ localized_strings->SetString("cannotaccessaccounturl", "");
+ localized_strings->SetString("createaccount", "");
+ localized_strings->SetString("createnewaccounturl", "");
+ localized_strings->SetString("getaccesscodehelp", "");
+ localized_strings->SetString("getaccesscodeurl", "");
+
+ // None of the strings used here currently have sync-specific wording in
+ // them. We have a unit test to catch if that happens.
+ localized_strings->SetString("introduction", "");
+ localized_strings->SetString(
+ "signinprefix", l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SIGNIN_PREFIX));
+ localized_strings->SetString(
+ "signinsuffix", l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SIGNIN_SUFFIX));
+ localized_strings->SetString(
+ "cannotbeblank", l10n_util::GetStringUTF16(IDS_SYNC_CANNOT_BE_BLANK));
+ localized_strings->SetString("emaillabel",
+ l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_EMAIL));
+ localized_strings->SetString(
+ "passwordlabel", l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_PASSWORD));
+ localized_strings->SetString(
+ "invalidcredentials",
+ l10n_util::GetStringUTF16(IDS_SYNC_INVALID_USER_CREDENTIALS));
+ localized_strings->SetString("signin",
+ l10n_util::GetStringUTF16(IDS_SYNC_SIGNIN));
+ localized_strings->SetString(
+ "couldnotconnect",
+ l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_COULD_NOT_CONNECT));
+ localized_strings->SetString("cancel", l10n_util::GetStringUTF16(IDS_CANCEL));
+ localized_strings->SetString(
+ "settingup", l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SETTING_UP));
+ localized_strings->SetString("success",
+ l10n_util::GetStringUTF16(IDS_SYNC_SUCCESS));
+ localized_strings->SetString(
+ "errorsigningin", l10n_util::GetStringUTF16(IDS_SYNC_ERROR_SIGNING_IN));
+ localized_strings->SetString(
+ "captchainstructions",
+ l10n_util::GetStringUTF16(IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS));
+ localized_strings->SetString(
+ "invalidaccesscode",
+ l10n_util::GetStringUTF16(IDS_SYNC_INVALID_ACCESS_CODE_LABEL));
+ localized_strings->SetString(
+ "enteraccesscode",
+ l10n_util::GetStringUTF16(IDS_SYNC_ENTER_ACCESS_CODE_LABEL));
+}
+
+void EnterpriseEnrollmentScreenHandler::Initialize() {
+ if (show_on_init_) {
+ Show();
+ show_on_init_ = false;
+ }
+}
+
+// EnterpriseEnrollmentScreenHandler, private ----------------------------------
+
+void EnterpriseEnrollmentScreenHandler::HandleSubmitAuth(
+ const base::ListValue* value) {
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+
+ // Value carries single list entry, which is a json-encoded string that
+ // contains the auth parameters (see gaia_login.js).
+ std::string json_params;
+ if (!value->GetString(0, &json_params)) {
+ NOTREACHED();
+ return;
+ }
+
+ // Check the value type.
+ scoped_ptr<base::Value> params(base::JSONReader::Read(json_params, false));
+ if (!params.get() || !params->IsType(base::Value::TYPE_DICTIONARY)) {
+ NOTREACHED();
+ return;
+ }
+
+ // Read the parameters.
+ base::DictionaryValue* params_dict =
+ static_cast<base::DictionaryValue*>(params.get());
+ std::string user;
+ std::string pass;
+ std::string captcha;
+ std::string access_code;
+ if (!params_dict->GetString("user", &user) ||
+ !params_dict->GetString("pass", &pass) ||
+ !params_dict->GetString("captcha", &captcha) ||
+ !params_dict->GetString("access_code", &access_code)) {
+ NOTREACHED();
+ return;
+ }
+
+ controller_->OnAuthSubmitted(user, pass, captcha, access_code);
+}
+
+void EnterpriseEnrollmentScreenHandler::HandleCancelAuth(
+ const base::ListValue* value) {
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+
+ controller_->OnAuthCancelled();
+}
+
+void EnterpriseEnrollmentScreenHandler::HandleConfirmationClose(
+ const base::ListValue* value) {
+ if (!controller_) {
+ NOTREACHED();
+ return;
+ }
+
+ controller_->OnConfirmationClosed();
+}
+
+void EnterpriseEnrollmentScreenHandler::ShowError(int message_id) {
+ base::DictionaryValue args;
+ args.SetInteger("error", GoogleServiceAuthError::NONE);
+ args.SetBoolean("editable_user", editable_user_);
+ args.SetString("error_message", l10n_util::GetStringUTF16(message_id));
+ UpdateGaiaLogin(args);
+}
+
+void EnterpriseEnrollmentScreenHandler::UpdateGaiaLogin(
+ const base::DictionaryValue& args) {
+ std::string json;
+ base::JSONWriter::Write(&args, false, &json);
+
+ RenderViewHost* render_view_host =
+ web_ui_->tab_contents()->render_view_host();
+ render_view_host->ExecuteJavascriptInWebFrame(
+ ASCIIToUTF16("//iframe[@id='gaia-local-login']"),
+ UTF8ToUTF16("showGaiaLogin(" + json + ");"));
+}
+
+} // namespace chromeos2
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h
new file mode 100644
index 0000000..c67c1db
--- /dev/null
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h
@@ -0,0 +1,75 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_HANDLER_H_
+#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_HANDLER_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
+#include "chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h"
+#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
+
+namespace chromeos {
+
+// WebUIMessageHandler implementation which handles events occurring on the
+// page, such as the user pressing the signin button.
+class EnterpriseEnrollmentScreenHandler
+ : public BaseScreenHandler,
+ public EnterpriseEnrollmentScreenActor {
+ public:
+ EnterpriseEnrollmentScreenHandler();
+ virtual ~EnterpriseEnrollmentScreenHandler();
+
+ void SetupGaiaStrings();
+
+ // Implements WebUIMessageHandler:
+ virtual void RegisterMessages() OVERRIDE;
+
+ // Implements EnterpriseEnrollmentScreenActor:
+ virtual void SetController(EnterpriseEnrollmentUI::Controller* controller);
+ virtual void PrepareToShow() OVERRIDE;
+ virtual void Show() OVERRIDE;
+ virtual void Hide() OVERRIDE;
+ virtual void SetEditableUser(bool editable) OVERRIDE;
+ virtual void ShowConfirmationScreen() OVERRIDE;
+ virtual void ShowAuthError(const GoogleServiceAuthError& error) OVERRIDE;
+ virtual void ShowAccountError() OVERRIDE;
+ virtual void ShowFatalAuthError() OVERRIDE;
+ virtual void ShowFatalEnrollmentError() OVERRIDE;
+ virtual void ShowNetworkEnrollmentError() OVERRIDE;
+
+ // Implements BaseScreenHandler:
+ virtual void GetLocalizedStrings(
+ base::DictionaryValue* localized_strings) OVERRIDE;
+
+ protected:
+ // Implements BaseScreenHandler:
+ virtual void Initialize() OVERRIDE;
+
+ // Keeps the controller for this actor.
+ EnterpriseEnrollmentUI::Controller* controller_;
+
+ private:
+ // Handlers for WebUI messages.
+ void HandleSubmitAuth(const base::ListValue* args);
+ void HandleCancelAuth(const base::ListValue* args);
+ void HandleConfirmationClose(const base::ListValue* args);
+
+ // Display the given i18n string as error message.
+ void ShowError(int message_id);
+ // Updates the gaia login box.
+ void UpdateGaiaLogin(const base::DictionaryValue& args);
+
+ bool editable_user_;
+ bool show_on_init_;
+
+ DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentScreenHandler);
+};
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ENTERPRISE_ENROLLMENT_SCREEN_HANDLER_H_
diff --git a/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
index 0d73a4d..a58c4df 100644
--- a/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
@@ -55,7 +55,7 @@ void EulaScreenHandler::SetDelegate(Delegate* delegate) {
}
void EulaScreenHandler::GetLocalizedStrings(
- DictionaryValue* localized_strings) {
+ base::DictionaryValue* localized_strings) {
localized_strings->SetString("eulaScreenTitle",
l10n_util::GetStringUTF16(IDS_EULA_SCREEN_TITLE));
localized_strings->SetString("checkboxLogging",
@@ -114,7 +114,7 @@ void EulaScreenHandler::OnPasswordFetched(const std::string& tpm_password) {
tpm_password_value);
}
-void EulaScreenHandler::HandleOnExit(const ListValue* args) {
+void EulaScreenHandler::HandleOnExit(const base::ListValue* args) {
DCHECK(args->GetSize() == 2);
bool accepted = false;
@@ -131,7 +131,7 @@ void EulaScreenHandler::HandleOnExit(const ListValue* args) {
delegate_->OnExit(accepted, is_usage_stats_checked);
}
-void EulaScreenHandler::HandleOnLearnMore(const ListValue* args) {
+void EulaScreenHandler::HandleOnLearnMore(const base::ListValue* args) {
if (!help_app_.get()) {
views::Widget* login_window = WebUILoginDisplay::GetLoginWindow();
help_app_ = new HelpAppLauncher(login_window->GetNativeWindow());
@@ -139,7 +139,7 @@ void EulaScreenHandler::HandleOnLearnMore(const ListValue* args) {
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_STATS_USAGE);
}
-void EulaScreenHandler::HandleOnTpmPopupOpened(const ListValue* args) {
+void EulaScreenHandler::HandleOnTpmPopupOpened(const base::ListValue* args) {
if (!delegate_)
return;
delegate_->InitiatePasswordFetch();
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
index 1d7fc4a..8f4b2da 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
@@ -137,7 +137,7 @@ void NetworkScreenHandler::EnableContinue(bool enabled) {
// NetworkScreenHandler, BaseScreenHandler implementation: --------------------
void NetworkScreenHandler::GetLocalizedStrings(
- DictionaryValue* localized_strings) {
+ base::DictionaryValue* localized_strings) {
localized_strings->SetString("networkScreenTitle",
l10n_util::GetStringUTF16(IDS_WELCOME_SCREEN_TITLE));
localized_strings->SetString("selectLanguage",
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index 0397275..8db052c 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -11,10 +11,12 @@
#include "base/values.h"
#include "chrome/browser/browser_about_handler.h"
#include "chrome/browser/chromeos/accessibility_util.h"
+#include "chrome/browser/chromeos/login/enterprise_enrollment_screen_actor.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
+#include "chrome/browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
@@ -35,6 +37,9 @@ namespace {
const char kJsApiScreenStateInitialize[] = "screenStateInitialize";
const char kJsApiToggleAccessibility[] = "toggleAccessibility";
+// Path for the enterprise enrollment gaia page hosting.
+const char kEnterpriseEnrollmentGaiaLoginPath[] = "gaialogin";
+
} // namespace
namespace chromeos {
@@ -68,7 +73,7 @@ class CoreOobeHandler : public BaseScreenHandler {
virtual ~CoreOobeHandler();
// BaseScreenHandler implementation:
- virtual void GetLocalizedStrings(DictionaryValue* localized_strings);
+ virtual void GetLocalizedStrings(base::DictionaryValue* localized_strings);
virtual void Initialize();
// WebUIMessageHandler implementation.
@@ -94,15 +99,23 @@ OobeUIHTMLSource::OobeUIHTMLSource(DictionaryValue* localized_strings)
void OobeUIHTMLSource::StartDataRequest(const std::string& path,
bool is_incognito,
int request_id) {
- static const base::StringPiece html(
- ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_OOBE_HTML));
-
- const std::string& full_html = jstemplate_builder::GetI18nTemplateHtml(
- html, localized_strings_.get());
+ std::string response;
+ if (path.empty()) {
+ static const base::StringPiece html(
+ ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_OOBE_HTML));
+ response = jstemplate_builder::GetI18nTemplateHtml(
+ html, localized_strings_.get());
+ } else if (path == kEnterpriseEnrollmentGaiaLoginPath) {
+ static const base::StringPiece html(
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_GAIA_LOGIN_HTML));
+ response = jstemplate_builder::GetI18nTemplateHtml(
+ html, localized_strings_.get());
+ }
scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes());
- html_bytes->data.resize(full_html.size());
- std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
+ html_bytes->data.resize(response.size());
+ std::copy(response.begin(), response.end(), html_bytes->data.begin());
SendResponse(request_id, html_bytes);
}
@@ -116,9 +129,10 @@ CoreOobeHandler::CoreOobeHandler(OobeUI* oobe_ui)
CoreOobeHandler::~CoreOobeHandler() {
}
-void CoreOobeHandler::GetLocalizedStrings(DictionaryValue* localized_strings) {
- localized_strings->SetString("productName",
- l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
+void CoreOobeHandler::GetLocalizedStrings(
+ base::DictionaryValue* localized_strings) {
+ localized_strings->SetString(
+ "productName", l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
}
void CoreOobeHandler::Initialize() {
@@ -161,6 +175,11 @@ OobeUI::OobeUI(TabContents* contents)
update_screen_actor_ = update_screen_handler;
AddScreenHandler(update_screen_handler);
+ EnterpriseEnrollmentScreenHandler* enterprise_enrollment_screen_handler =
+ new EnterpriseEnrollmentScreenHandler;
+ enterprise_enrollment_screen_actor_ = enterprise_enrollment_screen_handler;
+ AddScreenHandler(enterprise_enrollment_screen_handler);
+
signin_screen_handler_ = new SigninScreenHandler;
AddScreenHandler(signin_screen_handler_);
@@ -200,9 +219,9 @@ EulaScreenActor* OobeUI::GetEulaScreenActor() {
return eula_screen_actor_;
}
-ViewScreenDelegate* OobeUI::GetEnterpriseEnrollmentScreenActor() {
- NOTIMPLEMENTED();
- return NULL;
+EnterpriseEnrollmentScreenActor* OobeUI::
+ GetEnterpriseEnrollmentScreenActor() {
+ return enterprise_enrollment_screen_actor_;
}
UserImageScreenActor* OobeUI::GetUserImageScreenActor() {
@@ -220,7 +239,7 @@ ViewScreenDelegate* OobeUI::GetHTMLPageScreenActor() {
return NULL;
}
-void OobeUI::GetLocalizedStrings(DictionaryValue* localized_strings) {
+void OobeUI::GetLocalizedStrings(base::DictionaryValue* localized_strings) {
// Note, handlers_[0] is a GenericHandler used by the WebUI.
for (size_t i = 1; i < handlers_.size(); ++i) {
static_cast<BaseScreenHandler*>(handlers_[i])->
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
index c25a7d6..4df5929 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
@@ -35,7 +35,7 @@ class OobeUI : public OobeDisplay,
virtual UpdateScreenActor* GetUpdateScreenActor();
virtual NetworkScreenActor* GetNetworkScreenActor();
virtual EulaScreenActor* GetEulaScreenActor();
- virtual ViewScreenDelegate* GetEnterpriseEnrollmentScreenActor();
+ virtual EnterpriseEnrollmentScreenActor* GetEnterpriseEnrollmentScreenActor();
virtual UserImageScreenActor* GetUserImageScreenActor();
virtual ViewScreenDelegate* GetRegistrationScreenActor();
virtual ViewScreenDelegate* GetHTMLPageScreenActor();
@@ -55,6 +55,7 @@ class OobeUI : public OobeDisplay,
UpdateScreenActor* update_screen_actor_;
NetworkScreenActor* network_screen_actor_;
EulaScreenActor* eula_screen_actor_;
+ EnterpriseEnrollmentScreenActor* enterprise_enrollment_screen_actor_;
SigninScreenHandler* signin_screen_handler_;
DISALLOW_COPY_AND_ASSIGN(OobeUI);
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index e774cc4..5239eb3 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -481,6 +481,7 @@
'browser/chromeos/login/default_user_images.h',
'browser/chromeos/login/enterprise_enrollment_screen.cc',
'browser/chromeos/login/enterprise_enrollment_screen.h',
+ 'browser/chromeos/login/enterprise_enrollment_screen_actor.h',
'browser/chromeos/login/enterprise_enrollment_view.cc',
'browser/chromeos/login/enterprise_enrollment_view.h',
'browser/chromeos/login/eula_screen.cc',
@@ -574,8 +575,8 @@
'browser/chromeos/login/test_attempt_state.h',
'browser/chromeos/login/textfield_with_margin.cc',
'browser/chromeos/login/textfield_with_margin.h',
- 'browser/chromeos/login/touch_login_view.h',
'browser/chromeos/login/touch_login_view.cc',
+ 'browser/chromeos/login/touch_login_view.h',
'browser/chromeos/login/tpm_password_fetcher.cc',
'browser/chromeos/login/tpm_password_fetcher.h',
'browser/chromeos/login/update_screen.cc',
@@ -600,6 +601,8 @@
'browser/chromeos/login/username_view.cc',
'browser/chromeos/login/username_view.h',
'browser/chromeos/login/view_screen.h',
+ 'browser/chromeos/login/views_enterprise_enrollment_screen_actor.cc',
+ 'browser/chromeos/login/views_enterprise_enrollment_screen_actor.h',
'browser/chromeos/login/views_eula_screen_actor.cc',
'browser/chromeos/login/views_eula_screen_actor.h',
'browser/chromeos/login/views_login_display.cc',
@@ -622,8 +625,8 @@
'browser/chromeos/login/webui_login_display.h',
'browser/chromeos/login/webui_login_display_host.cc',
'browser/chromeos/login/webui_login_display_host.h',
- 'browser/chromeos/login/webui_login_view.h',
'browser/chromeos/login/webui_login_view.cc',
+ 'browser/chromeos/login/webui_login_view.h',
'browser/chromeos/login/wizard_accessibility_handler.cc',
'browser/chromeos/login/wizard_accessibility_handler.h',
'browser/chromeos/login/wizard_accessibility_helper.cc',
@@ -3380,6 +3383,8 @@
'browser/ui/webui/chromeos/keyboard_overlay_ui.h',
'browser/ui/webui/chromeos/login/base_screen_handler.cc',
'browser/ui/webui/chromeos/login/base_screen_handler.h',
+ 'browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.cc',
+ 'browser/ui/webui/chromeos/login/enterprise_enrollment_screen_handler.h',
'browser/ui/webui/chromeos/login/eula_screen_handler.cc',
'browser/ui/webui/chromeos/login/eula_screen_handler.h',
'browser/ui/webui/chromeos/login/login_ui.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 4d108f88..0e8a26f 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -2413,6 +2413,8 @@
'browser/chromeos/login/login_browsertest.cc',
'browser/chromeos/login/mock_authenticator.cc',
'browser/chromeos/login/mock_authenticator.h',
+ 'browser/chromeos/login/mock_enterprise_enrollment_screen.cc',
+ 'browser/chromeos/login/mock_enterprise_enrollment_screen.h',
'browser/chromeos/login/mock_eula_screen.cc',
'browser/chromeos/login/mock_eula_screen.h',
'browser/chromeos/login/mock_network_screen.cc',