diff options
author | altimofeev@chromium.org <altimofeev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 12:38:28 +0000 |
---|---|---|
committer | altimofeev@chromium.org <altimofeev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 12:38:28 +0000 |
commit | 6c51eb0d8c35554465e13613a229d526e598cf43 (patch) | |
tree | e558d95a4c1877fe0480629a2aa336517872eb4d /chrome | |
parent | 5a183bedcbdc63d8303ea329e0509f1c880d87e5 (diff) | |
download | chromium_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')
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', |