diff options
33 files changed, 1050 insertions, 145 deletions
diff --git a/chrome/browser/chromeos/login/screens/base_screen.h b/chrome/browser/chromeos/login/screens/base_screen.h index 2eab17d..9da0557 100644 --- a/chrome/browser/chromeos/login/screens/base_screen.h +++ b/chrome/browser/chromeos/login/screens/base_screen.h @@ -8,7 +8,6 @@ #include <string> #include "base/basictypes.h" -#include "chrome/browser/chromeos/login/screens/screen_context.h" namespace base { class DictionaryValue; @@ -16,6 +15,8 @@ class DictionaryValue; namespace chromeos { +class ScreenContext; + // Base class for the all OOBE/login/before-session screens. // Screens are identified by ID, screen and it's JS counterpart must have same // id. diff --git a/chrome/browser/chromeos/login/screens/controller_pairing_screen.cc b/chrome/browser/chromeos/login/screens/controller_pairing_screen.cc new file mode 100644 index 0000000..1e4ff203 --- /dev/null +++ b/chrome/browser/chromeos/login/screens/controller_pairing_screen.cc @@ -0,0 +1,228 @@ +// Copyright 2014 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/screens/controller_pairing_screen.h" + +#include "base/command_line.h" +#include "base/values.h" +#include "chrome/browser/chromeos/login/auth/user_context.h" +#include "chrome/browser/chromeos/login/wizard_controller.h" +#include "chromeos/chromeos_switches.h" +#include "chromeos/pairing/fake_controller_pairing_controller.h" +#include "google_apis/gaia/gaia_auth_util.h" + +using namespace chromeos::controller_pairing; + +namespace chromeos { + +ControllerPairingScreen::ControllerPairingScreen( + ScreenObserver* observer, + ControllerPairingScreenActor* actor) + : WizardScreen(observer), + actor_(actor), + current_stage_(ControllerPairingController::STAGE_NONE), + device_preselected_(false) { + actor_->SetDelegate(this); + std::string controller_config = + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kShowControllerPairingDemo); + controller_.reset(new FakeControllerPairingController(controller_config)); + controller_->AddObserver(this); +} + +ControllerPairingScreen::~ControllerPairingScreen() { + if (actor_) + actor_->SetDelegate(NULL); + controller_->RemoveObserver(this); +} + +void ControllerPairingScreen::CommitContextChanges() { + if (!context_.HasChanges()) + return; + base::DictionaryValue diff; + context_.GetChangesAndReset(&diff); + if (actor_) + actor_->OnContextChanged(diff); +} + +bool ControllerPairingScreen::ExpectStageIs(Stage stage) const { + DCHECK(stage == current_stage_); + if (current_stage_ != stage) + LOG(ERROR) << "Incorrect stage. Expected: " << stage + << ", current stage: " << current_stage_; + return stage == current_stage_; +} + +void ControllerPairingScreen::PrepareToShow() { +} + +void ControllerPairingScreen::Show() { + if (actor_) + actor_->Show(); + controller_->StartPairing(); +} + +void ControllerPairingScreen::Hide() { + if (actor_) + actor_->Hide(); +} + +std::string ControllerPairingScreen::GetName() const { + return WizardController::kControllerPairingScreenName; +} + +// Overridden from ControllerPairingController::Observer: +void ControllerPairingScreen::PairingStageChanged(Stage new_stage) { + DCHECK(new_stage != current_stage_); + + std::string desired_page; + switch (new_stage) { + case ControllerPairingController::STAGE_DEVICES_DISCOVERY: { + desired_page = kPageDevicesDiscovery; + context_.SetStringList(kContextKeyDevices, StringList()); + context_.SetString(kContextKeySelectedDevice, std::string()); + device_preselected_ = false; + break; + } + case ControllerPairingController::STAGE_DEVICE_NOT_FOUND: { + desired_page = kPageDeviceNotFound; + break; + } + case ControllerPairingController::STAGE_ESTABLISHING_CONNECTION: { + desired_page = kPageEstablishingConnection; + break; + } + case ControllerPairingController::STAGE_ESTABLISHING_CONNECTION_ERROR: { + desired_page = kPageEstablishingConnectionError; + break; + } + case ControllerPairingController::STAGE_WAITING_FOR_CODE_CONFIRMATION: { + desired_page = kPageCodeConfirmation; + context_.SetString(kContextKeyConfirmationCode, + controller_->GetConfirmationCode()); + break; + } + case ControllerPairingController::STAGE_HOST_UPDATE_IN_PROGRESS: { + desired_page = kPageHostUpdate; + break; + } + case ControllerPairingController::STAGE_HOST_CONNECTION_LOST: { + desired_page = kPageHostConnectionLost; + break; + } + case ControllerPairingController::STAGE_WAITING_FOR_CREDENTIALS: { + desired_page = kPageEnrollmentIntroduction; + break; + } + case ControllerPairingController::STAGE_HOST_ENROLLMENT_IN_PROGRESS: { + desired_page = kPageHostEnrollment; + break; + } + case ControllerPairingController::STAGE_HOST_ENROLLMENT_ERROR: { + desired_page = kPageHostEnrollmentError; + break; + } + case ControllerPairingController::STAGE_PAIRING_DONE: { + desired_page = kPagePairingDone; + break; + } + case ControllerPairingController::STAGE_FINISHED: { + get_screen_observer()->OnExit( + WizardController::CONTROLLER_PAIRING_FINISHED); + break; + } + default: + NOTREACHED(); + } + current_stage_ = new_stage; + context_.SetString(kContextKeyPage, desired_page); + context_.SetBoolean(kContextKeyControlsDisabled, false); + CommitContextChanges(); +} + +void ControllerPairingScreen::DiscoveredDevicesListChanged() { + if (!ExpectStageIs(ControllerPairingController::STAGE_DEVICES_DISCOVERY)) + return; + ControllerPairingController::DeviceIdList devices = + controller_->GetDiscoveredDevices(); + std::sort(devices.begin(), devices.end()); + context_.SetStringList(kContextKeyDevices, devices); + context_.SetString( + kContextKeyPage, + devices.empty() ? kPageDevicesDiscovery : kPageDeviceSelect); + std::string selected_device = context_.GetString(kContextKeySelectedDevice); + if (std::find(devices.begin(), devices.end(), selected_device) == + devices.end()) { + selected_device.clear(); + } + if (devices.empty()) { + device_preselected_ = false; + } else if (!device_preselected_) { + selected_device = devices.front(); + device_preselected_ = true; + } + context_.SetString(kContextKeySelectedDevice, selected_device); + context_.SetBoolean(kContextKeyControlsDisabled, selected_device.empty()); + CommitContextChanges(); +} + +void ControllerPairingScreen::OnActorDestroyed( + ControllerPairingScreenActor* actor) { + if (actor_ == actor) + actor_ = NULL; +} + +// Overridden from ControllerPairingView::Delegate: +void ControllerPairingScreen::OnUserActed(const std::string& action) { + if (context_.GetBoolean(kContextKeyControlsDisabled)) { + LOG(WARNING) << "User acted, but controls are disabled. Ignoring."; + return; + } + bool disable_controls = true; + if (action == kActionChooseDevice) { + std::string selectedDevice = context_.GetString(kContextKeySelectedDevice); + if (selectedDevice.empty()) + LOG(ERROR) << "Device was not selected."; + else + controller_->ChooseDeviceForPairing(selectedDevice); + } else if (action == kActionRepeatDiscovery) { + controller_->RepeatDiscovery(); + } else if (action == kActionAcceptCode) { + controller_->SetConfirmationCodeIsCorrect(true); + } else if (action == kActionRejectCode) { + controller_->SetConfirmationCodeIsCorrect(false); + } else if (action == kActionProceedToAuthentication) { + context_.SetString(kContextKeyPage, kPageAuthentication); + disable_controls = false; + } else if (action == kActionEnroll) { + std::string account_id = + gaia::SanitizeEmail(context_.GetString(kContextKeyAccountId)); + context_.SetString(kContextKeyEnrollmentDomain, + gaia::ExtractDomainName(account_id)); + UserContext user_context(account_id); + controller_->OnAuthenticationDone(user_context, + actor_->GetBrowserContext()); + } else if (action == kActionStartSession) { + controller_->StartSession(); + } + context_.SetBoolean(kContextKeyControlsDisabled, disable_controls); + CommitContextChanges(); +} + +void ControllerPairingScreen::OnScreenContextChanged( + const base::DictionaryValue& diff) { + std::vector<std::string> changedKeys; + context_.ApplyChanges(diff, &changedKeys); + for (std::vector<std::string>::const_iterator key = changedKeys.begin(); + key != changedKeys.end(); + ++key) { + if (*key == kContextKeySelectedDevice) { + context_.SetBoolean(kContextKeyControlsDisabled, + context_.GetString(*key).empty()); + CommitContextChanges(); + } + } +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/login/screens/controller_pairing_screen.h b/chrome/browser/chromeos/login/screens/controller_pairing_screen.h new file mode 100644 index 0000000..e634b1a --- /dev/null +++ b/chrome/browser/chromeos/login/screens/controller_pairing_screen.h @@ -0,0 +1,69 @@ +// Copyright 2014 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_SCREENS_CONTROLLER_PAIRING_SCREEN_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CONTROLLER_PAIRING_SCREEN_H_ + +#include "base/macros.h" + +#include "chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h" +#include "chrome/browser/chromeos/login/screens/screen_context.h" +#include "chrome/browser/chromeos/login/screens/wizard_screen.h" +#include "chromeos/pairing/controller_pairing_controller.h" + +namespace chromeos { + +class ControllerPairingScreen : public WizardScreen, + public ControllerPairingController::Observer, + public ControllerPairingScreenActor::Delegate { + public: + ControllerPairingScreen(ScreenObserver* observer, + ControllerPairingScreenActor* actor); + virtual ~ControllerPairingScreen(); + + private: + typedef ControllerPairingController::Stage Stage; + + void CommitContextChanges(); + bool ExpectStageIs(Stage stage) const; + + // Overridden from WizardScreen: + virtual void PrepareToShow() OVERRIDE; + virtual void Show() OVERRIDE; + virtual void Hide() OVERRIDE; + virtual std::string GetName() const OVERRIDE; + + // Overridden from ControllerPairingController::Observer: + virtual void PairingStageChanged(Stage new_stage) OVERRIDE; + virtual void DiscoveredDevicesListChanged() OVERRIDE; + + // Overridden from ControllerPairingView::Delegate: + virtual void OnActorDestroyed(ControllerPairingScreenActor* actor) OVERRIDE; + virtual void OnScreenContextChanged( + const base::DictionaryValue& diff) OVERRIDE; + virtual void OnUserActed(const std::string& action) OVERRIDE; + + // Context for sharing data between C++ and JS. + // TODO(dzhioev): move to BaseScreen when possible. + ScreenContext context_; + + ControllerPairingScreenActor* actor_; + + // Controller performing pairing. Owned by the screen for now. + // TODO(dzhioev): move to proper place later. + scoped_ptr<ControllerPairingController> controller_; + + // Current stage of pairing process. + Stage current_stage_; + + // If this one is |false| first device in device list will be preselected on + // next device list update. + bool device_preselected_; + + DISALLOW_COPY_AND_ASSIGN(ControllerPairingScreen); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CONTROLLER_PAIRING_SCREEN_H_ diff --git a/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.cc b/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.cc new file mode 100644 index 0000000..d83f5e8 --- /dev/null +++ b/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.cc @@ -0,0 +1,51 @@ +// Copyright 2014 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/screens/controller_pairing_screen_actor.h" + +namespace chromeos { + +namespace controller_pairing { + +// Keep these constants synced with corresponding constants defined in +// oobe_screen_controller_pairing.js. +const char kContextKeyPage[] = "page"; +const char kContextKeyControlsDisabled[] = "controlsDisabled"; +const char kContextKeyDevices[] = "devices"; +const char kContextKeyConfirmationCode[] = "code"; +const char kContextKeySelectedDevice[] = "selectedDevice"; +const char kContextKeyAccountId[] = "accountId"; +const char kContextKeyEnrollmentDomain[] = "enrollmentDomain"; + +const char kPageDevicesDiscovery[] = "devices-discovery"; +const char kPageDeviceSelect[] = "device-select"; +const char kPageDeviceNotFound[] = "device-not-found"; +const char kPageEstablishingConnection[] = "establishing-connection"; +const char kPageEstablishingConnectionError[] = "establishing-connection-error"; +const char kPageCodeConfirmation[] = "code-confirmation"; +const char kPageHostUpdate[] = "host-update"; +const char kPageHostConnectionLost[] = "host-connection-lost"; +const char kPageEnrollmentIntroduction[] = "enrollment-introduction"; +const char kPageAuthentication[] = "authentication"; +const char kPageHostEnrollment[] = "host-enrollment"; +const char kPageHostEnrollmentError[] = "host-enrollment-error"; +const char kPagePairingDone[] = "pairing-done"; + +const char kActionChooseDevice[] = "chooseDevice"; +const char kActionRepeatDiscovery[] = "repeatDiscovery"; +const char kActionAcceptCode[] = "acceptCode"; +const char kActionRejectCode[] = "rejectCode"; +const char kActionProceedToAuthentication[] = "proceedToAuthentication"; +const char kActionEnroll[] = "enroll"; +const char kActionStartSession[] = "startSession"; + +} // namespace controller_pairing + +ControllerPairingScreenActor::ControllerPairingScreenActor() { +} + +ControllerPairingScreenActor::~ControllerPairingScreenActor() { +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h b/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h new file mode 100644 index 0000000..40566dd --- /dev/null +++ b/chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h @@ -0,0 +1,86 @@ +// Copyright 2014 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_SCREENS_CONTROLLER_PAIRING_SCREEN_ACTOR_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CONTROLLER_PAIRING_SCREEN_ACTOR_H_ + +#include <string> + +#include "base/macros.h" + +namespace base { +class DictionaryValue; +} + +namespace content { +class BrowserContext; +} + +namespace chromeos { + +namespace controller_pairing { + +// Keep these constants synced with corresponding constants defined in +// oobe_screen_controller_pairing.js. +// Context keys. +extern const char kContextKeyPage[]; +extern const char kContextKeyControlsDisabled[]; +extern const char kContextKeyDevices[]; +extern const char kContextKeyConfirmationCode[]; +extern const char kContextKeySelectedDevice[]; +extern const char kContextKeyAccountId[]; +extern const char kContextKeyEnrollmentDomain[]; + +// Pages names. +extern const char kPageDevicesDiscovery[]; +extern const char kPageDeviceSelect[]; +extern const char kPageDeviceNotFound[]; +extern const char kPageEstablishingConnection[]; +extern const char kPageEstablishingConnectionError[]; +extern const char kPageCodeConfirmation[]; +extern const char kPageHostUpdate[]; +extern const char kPageHostConnectionLost[]; +extern const char kPageEnrollmentIntroduction[]; +extern const char kPageAuthentication[]; +extern const char kPageHostEnrollment[]; +extern const char kPageHostEnrollmentError[]; +extern const char kPagePairingDone[]; + +// Actions names. +extern const char kActionChooseDevice[]; +extern const char kActionRepeatDiscovery[]; +extern const char kActionAcceptCode[]; +extern const char kActionRejectCode[]; +extern const char kActionProceedToAuthentication[]; +extern const char kActionEnroll[]; +extern const char kActionStartSession[]; + +} // namespace controller_pairing + +class ControllerPairingScreenActor { + public: + class Delegate { + public: + virtual ~Delegate() {} + virtual void OnActorDestroyed(ControllerPairingScreenActor* actor) = 0; + virtual void OnScreenContextChanged(const base::DictionaryValue& diff) = 0; + virtual void OnUserActed(const std::string& action) = 0; + }; + + ControllerPairingScreenActor(); + virtual ~ControllerPairingScreenActor(); + + virtual void Show() = 0; + virtual void Hide() = 0; + virtual void SetDelegate(Delegate* delegate) = 0; + virtual void OnContextChanged(const base::DictionaryValue& diff) = 0; + virtual content::BrowserContext* GetBrowserContext() = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(ControllerPairingScreenActor); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CONTROLLER_PAIRING_SCREEN_ACTOR_H_ diff --git a/chrome/browser/chromeos/login/screens/screen_manager.cc b/chrome/browser/chromeos/login/screens/screen_manager.cc index 847206f..f5ef21e 100644 --- a/chrome/browser/chromeos/login/screens/screen_manager.cc +++ b/chrome/browser/chromeos/login/screens/screen_manager.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/logging.h" #include "chrome/browser/chromeos/login/screens/base_screen.h" +#include "chrome/browser/chromeos/login/screens/screen_context.h" #include "chrome/browser/chromeos/login/screens/screen_factory.h" #include "chrome/browser/chromeos/login/screens/screen_flow.h" #include "chrome/browser/chromeos/login/ui/oobe_display.h" diff --git a/chrome/browser/chromeos/login/screens/screen_observer.h b/chrome/browser/chromeos/login/screens/screen_observer.h index 9f1e37f..dd9b293 100644 --- a/chrome/browser/chromeos/login/screens/screen_observer.h +++ b/chrome/browser/chromeos/login/screens/screen_observer.h @@ -47,6 +47,7 @@ class ScreenObserver { TERMS_OF_SERVICE_DECLINED = 18, TERMS_OF_SERVICE_ACCEPTED = 19, WRONG_HWID_WARNING_SKIPPED = 20, + CONTROLLER_PAIRING_FINISHED = 21, EXIT_CODES_COUNT // not a real code, must be the last }; diff --git a/chrome/browser/chromeos/login/ui/oobe_display.h b/chrome/browser/chromeos/login/ui/oobe_display.h index aa28ede..33d1f6c 100644 --- a/chrome/browser/chromeos/login/ui/oobe_display.h +++ b/chrome/browser/chromeos/login/ui/oobe_display.h @@ -13,24 +13,22 @@ namespace chromeos { class AppLaunchSplashScreenActor; +class AutoEnrollmentCheckScreenActor; class CoreOobeActor; +class ControllerPairingScreenActor; class EnrollmentScreenActor; class ErrorScreenActor; class EulaScreenActor; class HIDDetectionScreenActor; class KioskAutolaunchScreenActor; class KioskEnableScreenActor; +class LocallyManagedUserCreationScreenHandler; class NetworkScreenActor; class ResetScreenActor; class TermsOfServiceScreenActor; class UpdateScreenActor; class UserImageScreenActor; -// TODO(altimofeev): use real actors instead -class ViewScreenDelegate; -class WizardScreen; class WrongHWIDScreenActor; -class AutoEnrollmentCheckScreenActor; -class LocallyManagedUserCreationScreenHandler; // Interface which is used by WizardController to do actual OOBE screens // showing. Also it provides actors for the OOBE screens. @@ -59,17 +57,12 @@ class OobeDisplay { SCREEN_APP_LAUNCH_SPLASH, SCREEN_CONFIRM_PASSWORD, SCREEN_FATAL_ERROR, + SCREEN_OOBE_CONTROLLER_PAIRING, SCREEN_UNKNOWN }; virtual ~OobeDisplay() {} - // Shows the given screen. - virtual void ShowScreen(WizardScreen* screen) = 0; - - // Hides the given screen. - virtual void HideScreen(WizardScreen* screen) = 0; - // Pointers to actors which should be used by the specific screens. Actors // must be owned by the OobeDisplay implementation. virtual CoreOobeActor* GetCoreOobeActor() = 0; @@ -90,6 +83,7 @@ class OobeDisplay { virtual LocallyManagedUserCreationScreenHandler* GetLocallyManagedUserCreationScreenActor() = 0; virtual AppLaunchSplashScreenActor* GetAppLaunchSplashScreenActor() = 0; + virtual ControllerPairingScreenActor* GetControllerPairingScreenActor() = 0; // Returns if JS side is fully loaded and ready to accept messages. // If |false| is returned, then |display_is_ready_callback| is stored diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index 055bd50..531d3e6 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc @@ -33,6 +33,7 @@ #include "chrome/browser/chromeos/login/hwid_checker.h" #include "chrome/browser/chromeos/login/login_utils.h" #include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.h" +#include "chrome/browser/chromeos/login/screens/controller_pairing_screen.h" #include "chrome/browser/chromeos/login/screens/error_screen.h" #include "chrome/browser/chromeos/login/screens/eula_screen.h" #include "chrome/browser/chromeos/login/screens/hid_detection_screen.h" @@ -103,6 +104,11 @@ bool CanShowHIDDetectionScreen() { chromeos::switches::kDisableHIDDetectionOnOOBE); } +bool ShouldShowControllerPairingScreen() { + return CommandLine::ForCurrentProcess()->HasSwitch( + chromeos::switches::kShowControllerPairingDemo); +} + bool IsResumableScreen(const std::string& screen) { for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kResumableScreens); ++i) { if (screen == kResumableScreens[i]) @@ -150,6 +156,8 @@ const char WizardController::kLocallyManagedUserCreationScreenName[] = const char WizardController::kAppLaunchSplashScreenName[] = "app-launch-splash"; const char WizardController::kHIDDetectionScreenName[] = "hid-detection"; +const char WizardController::kControllerPairingScreenName[] = + "controller-pairing"; // static const int WizardController::kMinAudibleOutputVolumePercent = 10; @@ -376,6 +384,14 @@ chromeos::HIDDetectionScreen* WizardController::GetHIDDetectionScreen() { return hid_detection_screen_.get(); } +ControllerPairingScreen* WizardController::GetControllerPairingScreen() { + if (!controller_pairing_screen_) { + controller_pairing_screen_.reset(new ControllerPairingScreen( + this, oobe_display_->GetControllerPairingScreenActor())); + } + return controller_pairing_screen_.get(); +} + void WizardController::ShowNetworkScreen() { VLOG(1) << "Showing network screen."; // Hide the status area initially; it only appears after OOBE first animates @@ -534,6 +550,12 @@ void WizardController::ShowHIDDetectionScreen() { SetCurrentScreen(GetHIDDetectionScreen()); } +void WizardController::ShowControllerPairingScreen() { + VLOG(1) << "Showing controller pairing screen."; + SetStatusAreaVisible(false); + SetCurrentScreen(GetControllerPairingScreen()); +} + void WizardController::SkipToLoginForTesting( const LoginScreenContext& context) { VLOG(1) << "SkipToLoginForTesting."; @@ -594,7 +616,11 @@ void WizardController::OnConnectionFailed() { } void WizardController::OnUpdateCompleted() { - ShowAutoEnrollmentCheckScreen(); + if (ShouldShowControllerPairingScreen()) { + ShowControllerPairingScreen(); + } else { + ShowAutoEnrollmentCheckScreen(); + } } void WizardController::OnEulaAccepted() { @@ -743,6 +769,10 @@ void WizardController::OnTermsOfServiceAccepted() { ShowUserImageScreen(); } +void WizardController::OnControllerPairingFinished() { + ShowAutoEnrollmentCheckScreen(); +} + void WizardController::InitiateOOBEUpdate() { PerformPostEulaActions(); SetCurrentScreenSmooth(GetUpdateScreen(), true); @@ -804,7 +834,7 @@ void WizardController::ShowCurrentScreen() { FOR_EACH_OBSERVER(Observer, observer_list_, OnScreenChanged(current_screen_)); - oobe_display_->ShowScreen(current_screen_); + current_screen_->Show(); } void WizardController::SetCurrentScreenSmooth(WizardScreen* new_current, @@ -818,7 +848,7 @@ void WizardController::SetCurrentScreenSmooth(WizardScreen* new_current, smooth_show_timer_.Stop(); if (current_screen_) - oobe_display_->HideScreen(current_screen_); + current_screen_->Hide(); std::string screen_id = new_current->GetName(); if (IsOOBEStepToTrack(screen_id)) @@ -873,6 +903,8 @@ void WizardController::AdvanceToScreen(const std::string& screen_name) { AutoLaunchKioskApp(); } else if (screen_name == kHIDDetectionScreenName) { ShowHIDDetectionScreen(); + } else if (screen_name == kControllerPairingScreenName) { + ShowControllerPairingScreen(); } else if (screen_name != kTestNoScreenName) { if (is_out_of_box_) { time_oobe_started_ = base::Time::Now(); @@ -961,6 +993,9 @@ void WizardController::OnExit(ExitCodes exit_code) { case WRONG_HWID_WARNING_SKIPPED: OnWrongHWIDWarningSkipped(); break; + case CONTROLLER_PAIRING_FINISHED: + OnControllerPairingFinished(); + break; default: NOTREACHED(); } diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h index 5b7c22f..dbc158f 100644 --- a/chrome/browser/chromeos/login/wizard_controller.h +++ b/chrome/browser/chromeos/login/wizard_controller.h @@ -33,6 +33,7 @@ class DictionaryValue; namespace chromeos { class AutoEnrollmentCheckScreen; +class ControllerPairingScreen; class EnrollmentScreen; class ErrorScreen; class EulaScreen; @@ -136,8 +137,9 @@ class WizardController : public ScreenObserver { TermsOfServiceScreen* GetTermsOfServiceScreen(); WrongHWIDScreen* GetWrongHWIDScreen(); AutoEnrollmentCheckScreen* GetAutoEnrollmentCheckScreen(); - HIDDetectionScreen* GetHIDDetectionScreen(); LocallyManagedUserCreationScreen* GetLocallyManagedUserCreationScreen(); + HIDDetectionScreen* GetHIDDetectionScreen(); + ControllerPairingScreen* GetControllerPairingScreen(); // Returns a pointer to the current screen or NULL if there's no such // screen. @@ -163,7 +165,8 @@ class WizardController : public ScreenObserver { static const char kWrongHWIDScreenName[]; static const char kLocallyManagedUserCreationScreenName[]; static const char kAppLaunchSplashScreenName[]; - static const char kHIDDetectionScreenName []; + static const char kHIDDetectionScreenName[]; + static const char kControllerPairingScreenName[]; // Volume percent at which spoken feedback is still audible. static const int kMinAudibleOutputVolumePercent; @@ -183,6 +186,7 @@ class WizardController : public ScreenObserver { void ShowAutoEnrollmentCheckScreen(); void ShowLocallyManagedUserCreationScreen(); void ShowHIDDetectionScreen(); + void ShowControllerPairingScreen(); // Shows images login screen. void ShowLoginScreen(const LoginScreenContext& context); @@ -211,6 +215,7 @@ class WizardController : public ScreenObserver { void OnOOBECompleted(); void OnTermsOfServiceDeclined(); void OnTermsOfServiceAccepted(); + void OnControllerPairingFinished(); // Loads brand code on I/O enabled thread and stores to Local State. void LoadBrandCodeFromFile(); @@ -318,6 +323,7 @@ class WizardController : public ScreenObserver { scoped_ptr<LocallyManagedUserCreationScreen> locally_managed_user_creation_screen_; scoped_ptr<HIDDetectionScreen> hid_detection_screen_; + scoped_ptr<ControllerPairingScreen> controller_pairing_screen_; // Screen that's currently active. WizardScreen* current_screen_; diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc index fbf07b5..fa9bdf6 100644 --- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc +++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc @@ -1101,7 +1101,10 @@ IN_PROC_BROWSER_TEST_F(WizardControllerOobeResumeTest, // TODO(merkulova): Add tests for bluetooth HID detection screen variations when // UI and logic is ready. http://crbug.com/127016 -COMPILE_ASSERT(ScreenObserver::EXIT_CODES_COUNT == 21, +// TODO(dzhioev): Add tests for controller/host pairing flow. +// http://crbug.com/375191 + +COMPILE_ASSERT(ScreenObserver::EXIT_CODES_COUNT == 22, add_tests_for_new_control_flow_you_just_introduced); } // namespace chromeos diff --git a/chrome/browser/resources/chromeos/login/login_resources.html b/chrome/browser/resources/chromeos/login/login_resources.html index 22842ef..a1d0c90 100644 --- a/chrome/browser/resources/chromeos/login/login_resources.html +++ b/chrome/browser/resources/chromeos/login/login_resources.html @@ -20,6 +20,7 @@ <link rel="stylesheet" href="oobe_screen_enable_kiosk.css"> <link rel="stylesheet" href="oobe_screen_terms_of_service.css"> <link rel="stylesheet" href="oobe_screen_update.css"> +<link rel="stylesheet" href="oobe_screen_controller_pairing.css"> <link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css"> <link rel="stylesheet" href="oobe_screen_user_image.css"> <link rel="stylesheet" href="screen_app_launch_splash.css"> diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js index 6af948f..f6b3baa 100644 --- a/chrome/browser/resources/chromeos/login/oobe.js +++ b/chrome/browser/resources/chromeos/login/oobe.js @@ -12,6 +12,7 @@ <include src="oobe_screen_network.js"></include> <include src="oobe_screen_hid_detection.js"></include> <include src="oobe_screen_update.js"></include> +<include src="oobe_screen_controller_pairing.js"></include> <include src="oobe_screen_auto_enrollment_check.js"></include> cr.define('cr.ui.Oobe', function() { @@ -84,6 +85,7 @@ cr.define('cr.ui.Oobe', function() { login.AppLaunchSplashScreen.register(); login.ConfirmPasswordScreen.register(); login.FatalErrorScreen.register(); + login.ControllerPairingScreen.register(); cr.ui.Bubble.decorate($('bubble')); login.HeaderBar.decorate($('login-header-bar')); diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.css b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.css new file mode 100644 index 0000000..3a6ab3e --- /dev/null +++ b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.css @@ -0,0 +1,28 @@ +/* Copyright 2014 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. + */ + +#controller-pairing { + background: white; + height: 601px; + padding: 20px; + width: 720px; +} + +#controller-pairing .page-name { + text-align: center; +} + +#controller-pairing .device-list { + border: 2px solid black; + height: 200px; +} + +#controller-pairing button { + margin: 10px; +} + +#controller-pairing .gaia-frame { + height: 300px; +} diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.html b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.html new file mode 100644 index 0000000..bf3c384 --- /dev/null +++ b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.html @@ -0,0 +1,58 @@ +<!-- TODO(dzhioev): replace all the strings with i18n-values. --> +<div class="step hidden no-logo" id="controller-pairing" hidden> + <div alias="throbber_" class="throbber" hidden></div> + <div alias="pageNameLabel_" class="page-name"></div> + <div class="page page-devices-discovery"> + <div>Searching for nearby Chromeboxes...</div> + </div> + <div class="page page-device-select"> + <div>Select a Chromebox to connect to</div> + <list alias="deviceList_" class="device-list"></list> + <button action="chooseDevice"> + Connect + </button> + </div> + <div class="page page-device-not-found"> + <div>No Chromeboxes were found.</div> + <button action="repeatDiscovery">Repeat discovery</button> + </div> + <div class="page page-establishing-connection"> + <div>Connecting...</div> + </div> + <div class="page page-establishing-connection-error"> + <div>Can't connect to Chromebox.</div> + <button action="repeatDiscovery">Repeat discovery</button> + </div> + <div class="page page-code-confirmation"> + <div alias="confirmationCodeLabel_"></div> + <button action="acceptCode" disabled>Yes</button> + <button action="rejectCode" disabled>No</button> + </div> + <div class="page page-host-update"> + <div>Updating Chromebox.</div> + </div> + <div class="page page-host-connection-lost"> + <div>Connection lost. Please come closer.</div> + </div> + <div class="page page-enrollment-introduction"> + <div>Press continue to connect to your domain.</div> + <button action="proceedToAuthentication" disabled>Continue</button> + </div> + <div class="page page-authentication"> + <div>Connect to your domain.</div> + <iframe alias="gaiaFrame_" frameBorder="0" class="gaia-frame"></iframe> + </div> + <div class="page page-host-enrollment"> + <div> + Connecting to <strong alias="domainNameLabel_">domain.com</strong>. + </div> + </div> + <div class="page page-host-enrollment-error"> + <div>Host enrollment failed.</div> + <button action="repeatDiscovery">Repeat discovery</button> + </div> + <div class="page page-pairing-done"> + <div>Great success!</div> + <button action="startSession">Continue to Hangouts</button> + </div> +</div> diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.js b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.js new file mode 100644 index 0000000..fd8e372 --- /dev/null +++ b/chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.js @@ -0,0 +1,171 @@ +// Copyright 2014 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. + +/** + * @fileoverview controller pairing screen implementation. + */ + +login.createScreen('ControllerPairingScreen', 'controller-pairing', function() { + 'use strict'; + + // Keep these constants synced with corresponding constants defined in + // controller_pairing_screen_actor.{h,cc}. + /** @const */ var CONTEXT_KEY_PAGE = 'page'; + /** @const */ var CONTEXT_KEY_CONTROLS_DISABLED = 'controlsDisabled'; + /** @const */ var CONTEXT_KEY_DEVICES = 'devices'; + /** @const */ var CONTEXT_KEY_CONFIRMATION_CODE = 'code'; + /** @const */ var CONTEXT_KEY_SELECTED_DEVICE = 'selectedDevice'; + /** @const */ var CONTEXT_KEY_ACCOUNT_ID = 'accountId'; + /** @const */ var CONTEXT_KEY_ENROLLMENT_DOMAIN = 'enrollmentDomain'; + + /** @const */ var ACTION_ENROLL = 'enroll'; + + /** @const */ var PAGE_DEVICES_DISCOVERY = 'devices-discovery'; + /** @const */ var PAGE_DEVICE_SELECT = 'device-select'; + /** @const */ var PAGE_DEVICE_NOT_FOUND = 'device-not-found'; + /** @const */ var PAGE_ESTABLISHING_CONNECTION = 'establishing-connection'; + /** @const */ var PAGE_ESTABLISHING_CONNECTION_ERROR = + 'establishing-connection-error'; + /** @const */ var PAGE_CODE_CONFIRMATION = 'code-confirmation'; + /** @const */ var PAGE_HOST_UPDATE = 'host-update'; + /** @const */ var PAGE_HOST_CONNECTION_LOST = 'host-connection-lost'; + /** @const */ var PAGE_ENROLLMENT_INTRODUCTION = 'enrollment-introduction'; + /** @const */ var PAGE_AUTHENTICATION = 'authentication'; + /** @const */ var PAGE_HOST_ENROLLMENT = 'host-enrollment'; + /** @const */ var PAGE_HOST_ENROLLMENT_ERROR = 'host-enrollment-error'; + /** @const */ var PAGE_PAIRING_DONE = 'pairing-done'; + + /** @const */ var PAGE_NAMES = [ + PAGE_DEVICES_DISCOVERY, + PAGE_DEVICE_SELECT, + PAGE_DEVICE_NOT_FOUND, + PAGE_ESTABLISHING_CONNECTION, + PAGE_ESTABLISHING_CONNECTION_ERROR, + PAGE_CODE_CONFIRMATION, + PAGE_HOST_UPDATE, + PAGE_HOST_CONNECTION_LOST, + PAGE_ENROLLMENT_INTRODUCTION, + PAGE_AUTHENTICATION, + PAGE_HOST_ENROLLMENT, + PAGE_HOST_ENROLLMENT_ERROR, + PAGE_PAIRING_DONE]; + + return { + deviceSelectionChangedCallback_: null, + gaiaHost_: null, + pages_: null, + + /** @override */ + decorate: function() { + this.initialize(); + + this.pages_ = {}; + PAGE_NAMES.forEach(function(pageName) { + var page = this.querySelector('.page-' + pageName); + if (page === null) + throw Error('Page "' + pageName + '" was not found.'); + page.hidden = true; + this.pages_[pageName] = page; + }, this); + + this.disableControls_(true); + + this.addContextObserver(CONTEXT_KEY_PAGE, this.pageChanged_); + this.addContextObserver(CONTEXT_KEY_CONTROLS_DISABLED, + this.disableControls_); + + cr.ui.List.decorate(this.deviceList_); + this.deviceList_.selectionModel = new cr.ui.ListSingleSelectionModel(); + + this.gaiaHost_ = new cr.login.GaiaAuthHost(this.gaiaFrame_); + + this.deviceSelectionChangedCallback_ = + this.deviceSelectionChanged_.bind(this); + }, + + pageChanged_: function(newPage, oldPage) { + this.throbber_.hidden = [PAGE_DEVICES_DISCOVERY, + PAGE_DEVICE_SELECT, + PAGE_ESTABLISHING_CONNECTION, + PAGE_HOST_UPDATE, + PAGE_HOST_CONNECTION_LOST, + PAGE_HOST_ENROLLMENT].indexOf(newPage) == -1; + this.togglePage_(newPage); + if (newPage == PAGE_DEVICE_SELECT) { + this.addContextObserver(CONTEXT_KEY_DEVICES, this.setDeviceList_); + this.addContextObserver(CONTEXT_KEY_SELECTED_DEVICE, + this.setSelectedDevice_); + this.setDeviceList_(this.context.get(CONTEXT_KEY_DEVICES)); + this.deviceList_.addEventListener('change', + this.deviceSelectionChangedCallback_); + } else if (oldPage == PAGE_DEVICE_SELECT) { + this.removeContextObserver(this.setDeviceList_); + this.removeContextObserver(this.setSelectedDevice_); + this.deviceList_.removeEventListener('change', + this.deviceSelectionChangedCallback_); + } + + if (newPage == PAGE_CODE_CONFIRMATION) { + // TODO(dzhioev): replace with i18n pattern. + this.confirmationCodeLabel_.textContent = + this.context.get(CONTEXT_KEY_CONFIRMATION_CODE) + '?'; + } + + if (newPage == PAGE_AUTHENTICATION) { + this.gaiaHost_.load(cr.login.GaiaAuthHost.AuthMode.DEFAULT, + {}, + this.onAuthCompleted_.bind(this)); + } + + if (newPage == PAGE_HOST_ENROLLMENT) { + this.domainNameLabel_.textContent = + this.context.get(CONTEXT_KEY_ENROLLMENT_DOMAIN); + } + + this.pageNameLabel_.textContent = '<<<< ' + newPage + ' >>>>'; + }, + + togglePage_: function(newPage) { + PAGE_NAMES.forEach(function(pageName) { + this.pages_[pageName].hidden = (pageName !== newPage); + }, this); + }, + + setDeviceList_: function(deviceList) { + this.deviceList_.removeEventListener('change', + this.deviceSelectionChangedCallback_); + + this.deviceList_.dataModel = new cr.ui.ArrayDataModel(deviceList); + this.setSelectedDevice_(this.context.get(CONTEXT_KEY_SELECTED_DEVICE)); + + this.deviceList_.addEventListener('change', + this.deviceSelectionChangedCallback_); + }, + + setSelectedDevice_: function(selectedDevice) { + this.deviceList_.selectedItem = selectedDevice; + }, + + deviceSelectionChanged_: function() { + var item = this.deviceList_.selectedItem; + this.context.set(CONTEXT_KEY_SELECTED_DEVICE, item ? item : ''); + this.commitContextChanges(); + }, + + disableControls_: function(disable) { + this.querySelectorAll('button').forEach(function(button) { + button.disabled = disable; + }); + this.context.set(CONTEXT_KEY_CONTROLS_DISABLED, disable); + this.commitContextChanges(); + }, + + onAuthCompleted_: function(credentials) { + this.context.set(CONTEXT_KEY_ACCOUNT_ID, credentials.email); + this.commitContextChanges(); + this.send(login.Screen.CALLBACK_USER_ACTED, ACTION_ENROLL); + } + }; +}); + diff --git a/chrome/browser/resources/chromeos/login/oobe_screens.html b/chrome/browser/resources/chromeos/login/oobe_screens.html index 8045383..a1b764f 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screens.html +++ b/chrome/browser/resources/chromeos/login/oobe_screens.html @@ -5,6 +5,7 @@ <include src="oobe_screen_enable_kiosk.html"> <include src="oobe_screen_terms_of_service.html"> <include src="oobe_screen_update.html"> +<include src="oobe_screen_controller_pairing.html"> <include src="oobe_screen_auto_enrollment_check.html"> <include src="oobe_screen_user_image.html"> <include src="oobe_screen_hid_detection.html"> diff --git a/chrome/browser/resources/login/screen.js b/chrome/browser/resources/login/screen.js index ee022b0..2dcaebb 100644 --- a/chrome/browser/resources/login/screen.js +++ b/chrome/browser/resources/login/screen.js @@ -118,6 +118,11 @@ cr.define('login', function() { initializeImpl_: function() { this.screenContext_ = new login.ScreenContext(); this.querySelectorAllImpl_('[alias]').forEach(function(element) { + var alias = element.getAttribute('alias'); + if (alias in this) + throw Error('Alias "' + alias + '" of "' + this.name() + '" screen ' + + 'shadows or redefines property that is already defined.'); + this[alias] = element; this[element.getAttribute('alias')] = element; }, this); var self = this; diff --git a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h index 9efddca..8f7a79b 100644 --- a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h @@ -200,6 +200,12 @@ class BaseScreenHandler : public content::WebUIMessageHandler { name, base::Bind(&CallbackWrapper4<A1, A2, A3, A4>, callback)); } + template <typename Method> + void AddPrefixedCallback(const std::string& unprefixed_name, + const Method& method) { + AddCallback(FullMethodPath(unprefixed_name), method); + } + // Called when the page is ready and handler can do initialization. virtual void Initialize() = 0; diff --git a/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc new file mode 100644 index 0000000..7283710 --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc @@ -0,0 +1,93 @@ +// Copyright 2014 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/controller_pairing_screen_handler.h" + +#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" +#include "content/public/browser/web_contents.h" + +namespace chromeos { + +namespace { + +const char kJsScreenPath[] = "login.ControllerPairingScreen"; + +const char kMethodContextChanged[] = "contextChanged"; + +const char kCallbackUserActed[] = "userActed"; +const char kCallbackContextChanged[] = "contextChanged"; + +} // namespace + +ControllerPairingScreenHandler::ControllerPairingScreenHandler() + : BaseScreenHandler(kJsScreenPath), delegate_(NULL), show_on_init_(false) { +} + +ControllerPairingScreenHandler::~ControllerPairingScreenHandler() { + if (delegate_) + delegate_->OnActorDestroyed(this); +} + +void ControllerPairingScreenHandler::HandleUserActed( + const std::string& action) { + if (!delegate_) + return; + delegate_->OnUserActed(action); +} + +void ControllerPairingScreenHandler::HandleContextChanged( + const base::DictionaryValue* diff) { + if (!delegate_) + return; + delegate_->OnScreenContextChanged(*diff); +} + +void ControllerPairingScreenHandler::Initialize() { + if (!page_is_ready() || !delegate_) + return; + + if (show_on_init_) { + Show(); + show_on_init_ = false; + } +} + +void ControllerPairingScreenHandler::DeclareLocalizedValues( + LocalizedValuesBuilder* builder) { +} + +void ControllerPairingScreenHandler::RegisterMessages() { + AddPrefixedCallback(kCallbackUserActed, + &ControllerPairingScreenHandler::HandleUserActed); + AddPrefixedCallback(kCallbackContextChanged, + &ControllerPairingScreenHandler::HandleContextChanged); +} + +void ControllerPairingScreenHandler::Show() { + if (!page_is_ready()) { + show_on_init_ = true; + return; + } + ShowScreen(OobeUI::kScreenControllerPairing, NULL); +} + +void ControllerPairingScreenHandler::Hide() { +} + +void ControllerPairingScreenHandler::SetDelegate(Delegate* delegate) { + delegate_ = delegate; + if (page_is_ready()) + Initialize(); +} + +void ControllerPairingScreenHandler::OnContextChanged( + const base::DictionaryValue& diff) { + CallJS(kMethodContextChanged, diff); +} + +content::BrowserContext* ControllerPairingScreenHandler::GetBrowserContext() { + return web_ui()->GetWebContents()->GetBrowserContext(); +} + +} // namespace chromeos diff --git a/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h new file mode 100644 index 0000000..02da3536 --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h @@ -0,0 +1,46 @@ +// Copyright 2014 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_CONTROLLER_PAIRING_SCREEN_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_CONTROLLER_PAIRING_SCREEN_HANDLER_H_ + +#include "base/macros.h" +#include "chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h" +#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" + +namespace chromeos { + +class ControllerPairingScreenHandler : public ControllerPairingScreenActor, + public BaseScreenHandler { + public: + ControllerPairingScreenHandler(); + virtual ~ControllerPairingScreenHandler(); + + private: + void HandleUserActed(const std::string& action); + void HandleContextChanged(const base::DictionaryValue* diff); + + // Overridden from BaseScreenHandler: + virtual void Initialize() OVERRIDE; + virtual void DeclareLocalizedValues(LocalizedValuesBuilder* builder) OVERRIDE; + + // Overridden from content::WebUIMessageHandler: + virtual void RegisterMessages() OVERRIDE; + + // Overridden from ControllerPairingScreenActor: + virtual void Show() OVERRIDE; + virtual void Hide() OVERRIDE; + virtual void SetDelegate(Delegate* delegate) OVERRIDE; + virtual void OnContextChanged(const base::DictionaryValue& diff) OVERRIDE; + virtual content::BrowserContext* GetBrowserContext() OVERRIDE; + + ControllerPairingScreenActor::Delegate* delegate_; + bool show_on_init_; + + DISALLOW_COPY_AND_ASSIGN(ControllerPairingScreenHandler); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_CONTROLLER_PAIRING_SCREEN_HANDLER_H_ diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 67dfa9a..328e2a5 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -4,26 +4,19 @@ #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" -#include "ash/ash_switches.h" #include "base/command_line.h" #include "base/logging.h" -#include "base/memory/ref_counted_memory.h" #include "base/values.h" -#include "chrome/browser/browser_about_handler.h" -#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen_actor.h" #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_actor.h" -#include "chrome/browser/chromeos/login/lock/screen_locker.h" -#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" -#include "chrome/browser/chromeos/login/users/user_manager.h" -#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/system/input_device_settings.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/about_ui.h" #include "chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/auto_enrollment_check_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" +#include "chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h" @@ -46,7 +39,6 @@ #include "chrome/browser/ui/webui/theme_source.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/url_constants.h" -#include "chromeos/chromeos_constants.h" #include "chromeos/chromeos_switches.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" @@ -134,29 +126,28 @@ const char OobeUI::kAppLaunchSplashDisplay[] = "app-launch-splash"; // static const char OobeUI::kScreenOobeHIDDetection[] = "hid-detection"; -const char OobeUI::kScreenOobeNetwork[] = "connect"; -const char OobeUI::kScreenOobeEula[] = "eula"; -const char OobeUI::kScreenOobeUpdate[] = "update"; -const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment"; -const char OobeUI::kScreenOobeReset[] = "reset"; -const char OobeUI::kScreenGaiaSignin[] = "gaia-signin"; -const char OobeUI::kScreenAccountPicker[] = "account-picker"; -const char OobeUI::kScreenKioskAutolaunch[] = "autolaunch"; -const char OobeUI::kScreenKioskEnable[] = "kiosk-enable"; -const char OobeUI::kScreenErrorMessage[] = "error-message"; -const char OobeUI::kScreenUserImagePicker[] = "user-image"; -const char OobeUI::kScreenTpmError[] = "tpm-error-message"; -const char OobeUI::kScreenPasswordChanged[] = "password-changed"; -const char OobeUI::kScreenManagedUserCreationFlow[] - = "managed-user-creation"; -const char OobeUI::kScreenTermsOfService[] = "terms-of-service"; -const char OobeUI::kScreenWrongHWID[] = "wrong-hwid"; -const char OobeUI::kScreenAutoEnrollmentCheck[] - = "auto-enrollment-check"; -const char OobeUI::kScreenHIDDetection[] = "hid-detection"; -const char OobeUI::kScreenAppLaunchSplash[] = "app-launch-splash"; -const char OobeUI::kScreenConfirmPassword[] = "confirm-password"; -const char OobeUI::kScreenFatalError[] = "fatal-error"; +const char OobeUI::kScreenOobeNetwork[] = "connect"; +const char OobeUI::kScreenOobeEula[] = "eula"; +const char OobeUI::kScreenOobeUpdate[] = "update"; +const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment"; +const char OobeUI::kScreenOobeReset[] = "reset"; +const char OobeUI::kScreenGaiaSignin[] = "gaia-signin"; +const char OobeUI::kScreenAccountPicker[] = "account-picker"; +const char OobeUI::kScreenKioskAutolaunch[] = "autolaunch"; +const char OobeUI::kScreenKioskEnable[] = "kiosk-enable"; +const char OobeUI::kScreenErrorMessage[] = "error-message"; +const char OobeUI::kScreenUserImagePicker[] = "user-image"; +const char OobeUI::kScreenTpmError[] = "tpm-error-message"; +const char OobeUI::kScreenPasswordChanged[] = "password-changed"; +const char OobeUI::kScreenManagedUserCreationFlow[] = "managed-user-creation"; +const char OobeUI::kScreenTermsOfService[] = "terms-of-service"; +const char OobeUI::kScreenWrongHWID[] = "wrong-hwid"; +const char OobeUI::kScreenAutoEnrollmentCheck[] = "auto-enrollment-check"; +const char OobeUI::kScreenHIDDetection[] = "hid-detection"; +const char OobeUI::kScreenAppLaunchSplash[] = "app-launch-splash"; +const char OobeUI::kScreenConfirmPassword[] = "confirm-password"; +const char OobeUI::kScreenFatalError[] = "fatal-error"; +const char OobeUI::kScreenControllerPairing[] = "controller-pairing"; OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) : WebUIController(web_ui), @@ -277,6 +268,13 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) AddScreenHandler(app_launch_splash_screen_handler); app_launch_splash_screen_actor_ = app_launch_splash_screen_handler; + if (display_type_ == kOobeDisplay) { + ControllerPairingScreenHandler* handler = + new ControllerPairingScreenHandler(); + controller_pairing_screen_actor_ = handler; + AddScreenHandler(handler); + } + // Initialize KioskAppMenuHandler. Note that it is NOT a screen handler. kiosk_app_menu_handler_ = new KioskAppMenuHandler; web_ui->AddMessageHandler(kiosk_app_menu_handler_); @@ -310,14 +308,6 @@ OobeUI::~OobeUI() { network_dropdown_handler_->RemoveObserver(update_screen_handler_); } -void OobeUI::ShowScreen(WizardScreen* screen) { - screen->Show(); -} - -void OobeUI::HideScreen(WizardScreen* screen) { - screen->Hide(); -} - CoreOobeActor* OobeUI::GetCoreOobeActor() { return core_handler_; } @@ -366,6 +356,10 @@ HIDDetectionScreenActor* OobeUI::GetHIDDetectionScreenActor() { return hid_detection_screen_actor_; } +ControllerPairingScreenActor* OobeUI::GetControllerPairingScreenActor() { + return controller_pairing_screen_actor_; +} + UserImageScreenActor* OobeUI::GetUserImageScreenActor() { return user_image_screen_actor_; } @@ -439,6 +433,7 @@ void OobeUI::InitializeScreenMaps() { screen_names_[SCREEN_APP_LAUNCH_SPLASH] = kScreenAppLaunchSplash; screen_names_[SCREEN_CONFIRM_PASSWORD] = kScreenConfirmPassword; screen_names_[SCREEN_FATAL_ERROR] = kScreenFatalError; + screen_names_[SCREEN_OOBE_CONTROLLER_PAIRING] = kScreenControllerPairing; screen_ids_.clear(); for (size_t i = 0; i < screen_names_.size(); ++i) diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h index ba12861..4d0c363 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h @@ -23,6 +23,7 @@ class DictionaryValue; namespace chromeos { class AppLaunchSplashScreenActor; class BaseScreenHandler; +class ControllerPairingScreenActor; class ErrorScreenHandler; class KioskAppMenuHandler; class KioskEnableScreenActor; @@ -81,13 +82,12 @@ class OobeUI : public OobeDisplay, static const char kScreenConfirmPassword[]; static const char kScreenFatalError[]; static const char kScreenHIDDetection[]; + static const char kScreenControllerPairing[]; OobeUI(content::WebUI* web_ui, const GURL& url); virtual ~OobeUI(); // OobeDisplay implementation: - virtual void ShowScreen(WizardScreen* screen) OVERRIDE; - virtual void HideScreen(WizardScreen* screen) OVERRIDE; virtual CoreOobeActor* GetCoreOobeActor() OVERRIDE; virtual UpdateScreenActor* GetUpdateScreenActor() OVERRIDE; virtual NetworkScreenActor* GetNetworkScreenActor() OVERRIDE; @@ -110,6 +110,8 @@ class OobeUI : public OobeDisplay, virtual bool IsJSReady(const base::Closure& display_is_ready_callback) OVERRIDE; virtual HIDDetectionScreenActor* GetHIDDetectionScreenActor() OVERRIDE; + virtual ControllerPairingScreenActor* GetControllerPairingScreenActor() + OVERRIDE; // Collects localized strings from the owned handlers. void GetLocalizedStrings(base::DictionaryValue* localized_strings); @@ -190,6 +192,7 @@ class OobeUI : public OobeDisplay, LocallyManagedUserCreationScreenHandler* locally_managed_user_creation_screen_actor_; AppLaunchSplashScreenActor* app_launch_splash_screen_actor_; + ControllerPairingScreenActor* controller_pairing_screen_actor_; // Reference to ErrorScreenHandler that handles error screen // requests and forward calls from native code to JS side. diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi index 7624fb2..e76ecd5 100644 --- a/chrome/chrome_browser_chromeos.gypi +++ b/chrome/chrome_browser_chromeos.gypi @@ -589,6 +589,10 @@ 'browser/chromeos/login/saml/saml_offline_signin_limiter_factory.h', 'browser/chromeos/login/screens/base_screen.cc', 'browser/chromeos/login/screens/base_screen.h', + 'browser/chromeos/login/screens/controller_pairing_screen_actor.cc', + 'browser/chromeos/login/screens/controller_pairing_screen_actor.h', + 'browser/chromeos/login/screens/controller_pairing_screen.cc', + 'browser/chromeos/login/screens/controller_pairing_screen.h', 'browser/chromeos/login/screens/core_oobe_actor.h', 'browser/chromeos/login/screens/error_screen.cc', 'browser/chromeos/login/screens/error_screen.h', diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index 10fb472..6b292d0 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi @@ -951,6 +951,8 @@ 'browser/ui/webui/chromeos/login/base_screen_handler.h', 'browser/ui/webui/chromeos/login/base_screen_handler_utils.cc', 'browser/ui/webui/chromeos/login/base_screen_handler_utils.h', + 'browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc', + 'browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h', 'browser/ui/webui/chromeos/login/core_oobe_handler.cc', 'browser/ui/webui/chromeos/login/core_oobe_handler.h', 'browser/ui/webui/chromeos/login/demo_mode_detector.cc', diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index 2bf4108..f822a6e 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp @@ -361,10 +361,10 @@ 'network/shill_property_util.h', 'network/dhcp_proxy_script_fetcher_chromeos.cc', 'network/dhcp_proxy_script_fetcher_chromeos.h', - 'pairing/fake_controller_pairing_flow.cc', - 'pairing/fake_controller_pairing_flow.h', - 'pairing/controller_pairing_flow.cc', - 'pairing/controller_pairing_flow.h', + 'pairing/fake_controller_pairing_controller.cc', + 'pairing/fake_controller_pairing_controller.h', + 'pairing/controller_pairing_controller.cc', + 'pairing/controller_pairing_controller.h', 'pairing/host_pairing_controller.cc', 'pairing/host_pairing_controller.h', 'process_proxy/process_output_watcher.cc', diff --git a/chromeos/chromeos_switches.cc b/chromeos/chromeos_switches.cc index 97274d8..3c72811 100644 --- a/chromeos/chromeos_switches.cc +++ b/chromeos/chromeos_switches.cc @@ -205,6 +205,10 @@ const char kPowerStub[] = "power-stub"; // 'interactive=3' - Interactive mode, connect/scan/etc requests take 3 secs const char kShillStub[] = "shill-stub"; +// If this switch is set, controller pairing process is displayed after update +// stage of OOBE. +const char kShowControllerPairingDemo[] = "show-controller-pairing-demo"; + // Sends test messages on first call to RequestUpdate (stub only). const char kSmsTestMessages[] = "sms-test-messages"; diff --git a/chromeos/chromeos_switches.h b/chromeos/chromeos_switches.h index 595cc98..33c7679 100644 --- a/chromeos/chromeos_switches.h +++ b/chromeos/chromeos_switches.h @@ -37,6 +37,7 @@ CHROMEOS_EXPORT extern const char kDisableNewChannelSwitcherUI[]; CHROMEOS_EXPORT extern const char kDisableNewKioskUI[]; CHROMEOS_EXPORT extern const char kDisableQuickofficeComponentApp[]; CHROMEOS_EXPORT extern const char kDisableRollbackOption[]; +CHROMEOS_EXPORT extern const char kDisableSamlSignin[]; CHROMEOS_EXPORT extern const char kDisableVolumeAdjustSound[]; CHROMEOS_EXPORT extern const char kEnableCarrierSwitching[]; CHROMEOS_EXPORT extern const char kEnableChromeVoxNext[]; @@ -44,6 +45,7 @@ CHROMEOS_EXPORT extern const char kEnableConsumerManagement[]; CHROMEOS_EXPORT extern const char kEnableEmbeddedSignin[]; CHROMEOS_EXPORT extern const char kEnableExtensionAssetsSharing[]; CHROMEOS_EXPORT extern const char kEnableFileManagerMTP[]; +CHROMEOS_EXPORT extern const char kEnableFirstRunUITransitions[]; CHROMEOS_EXPORT extern const char kEnableKioskMode[]; CHROMEOS_EXPORT extern const char kEnableNetworkPortalNotification[]; CHROMEOS_EXPORT extern const char kEnableOkGoogleVoiceSearch[]; @@ -55,6 +57,7 @@ CHROMEOS_EXPORT extern const char kEnterpriseEnrollmentModulusLimit[]; CHROMEOS_EXPORT extern const char kEnterpriseEnrollmentSkipRobotAuth[]; CHROMEOS_EXPORT extern const char kFileManagerEnableNewGallery[]; CHROMEOS_EXPORT extern const char kFirstExecAfterBoot[]; +CHROMEOS_EXPORT extern const char kForceFirstRunUI[]; CHROMEOS_EXPORT extern const char kForceLoginManagerInTests[]; CHROMEOS_EXPORT extern const char kGuestSession[]; CHROMEOS_EXPORT extern const char kHasChromeOSDiamondKey[]; @@ -66,16 +69,14 @@ CHROMEOS_EXPORT extern const char kLoginManager[]; CHROMEOS_EXPORT extern const char kLoginProfile[]; CHROMEOS_EXPORT extern const char kLoginUser[]; CHROMEOS_EXPORT extern const char kNaturalScrollDefault[]; +CHROMEOS_EXPORT extern const char kOobeGuestSession[]; CHROMEOS_EXPORT extern const char kOobeSkipPostLogin[]; CHROMEOS_EXPORT extern const char kOobeTimerInterval[]; -CHROMEOS_EXPORT extern const char kOobeGuestSession[]; CHROMEOS_EXPORT extern const char kPowerStub[]; CHROMEOS_EXPORT extern const char kShillStub[]; +CHROMEOS_EXPORT extern const char kShowControllerPairingDemo[]; CHROMEOS_EXPORT extern const char kSmsTestMessages[]; CHROMEOS_EXPORT extern const char kStubCrosSettings[]; -CHROMEOS_EXPORT extern const char kForceFirstRunUI[]; -CHROMEOS_EXPORT extern const char kEnableFirstRunUITransitions[]; -CHROMEOS_EXPORT extern const char kDisableSamlSignin[]; CHROMEOS_EXPORT extern const char kTestAutoUpdateUI[]; } // namespace switches diff --git a/chromeos/pairing/controller_pairing_controller.cc b/chromeos/pairing/controller_pairing_controller.cc new file mode 100644 index 0000000..d0bc0cc --- /dev/null +++ b/chromeos/pairing/controller_pairing_controller.cc @@ -0,0 +1,21 @@ +// Copyright 2014 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 "chromeos/pairing/controller_pairing_controller.h" + +namespace chromeos { + +ControllerPairingController::Observer::Observer() { +} + +ControllerPairingController::Observer::~Observer() { +} + +ControllerPairingController::ControllerPairingController() { +} + +ControllerPairingController::~ControllerPairingController() { +} + +} // namespace chromeos diff --git a/chromeos/pairing/controller_pairing_flow.h b/chromeos/pairing/controller_pairing_controller.h index 2d4621c..dfb0e05 100644 --- a/chromeos/pairing/controller_pairing_flow.h +++ b/chromeos/pairing/controller_pairing_controller.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_PAIRING_CONTROLLER_PAIRING_FLOW_H_ -#define CHROMEOS_PAIRING_CONTROLLER_PAIRING_FLOW_H_ +#ifndef CHROMEOS_PAIRING_CONTROLLER_PAIRING_CONTROLLER_H_ +#define CHROMEOS_PAIRING_CONTROLLER_PAIRING_CONTROLLER_H_ #include <string> #include <vector> @@ -21,7 +21,7 @@ class BrowserContext; namespace chromeos { -class CHROMEOS_EXPORT ControllerPairingFlow { +class CHROMEOS_EXPORT ControllerPairingController { public: enum Stage { STAGE_NONE, @@ -44,11 +44,11 @@ class CHROMEOS_EXPORT ControllerPairingFlow { Observer(); virtual ~Observer(); - // Called when flow has moved on from one stage to another. + // Called when pairing has moved on from one stage to another. virtual void PairingStageChanged(Stage new_stage) = 0; // Called when new device was discovered or existing device was lost. - // This notification is made only on |STAGE_SCANNING_FOR_DEVICES| stage. + // This notification is made only on |STAGE_DEVICES_DISCOVERY| stage. virtual void DiscoveredDevicesListChanged() = 0; private: @@ -57,17 +57,17 @@ class CHROMEOS_EXPORT ControllerPairingFlow { typedef std::vector<std::string> DeviceIdList; - ControllerPairingFlow(); - virtual ~ControllerPairingFlow(); + ControllerPairingController(); + virtual ~ControllerPairingController(); virtual void AddObserver(Observer* observer) = 0; virtual void RemoveObserver(Observer* observer) = 0; - // Returns current stage of flow. + // Returns current stage of pairing process. virtual Stage GetCurrentStage() = 0; - // Starts pairing flow. Can be called only on |STAGE_NONE| stage. - virtual void StartFlow() = 0; + // Starts pairing process. Can be called only on |STAGE_NONE| stage. + virtual void StartPairing() = 0; // Returns list of discovered devices. Can be called only on // |STAGE_DEVICES_DISCOVERY| stage. @@ -78,7 +78,8 @@ class CHROMEOS_EXPORT ControllerPairingFlow { virtual void ChooseDeviceForPairing(const std::string& device_id) = 0; // Rescan for devices to pair with. Can be called only on - // |STAGE_DEVICE_NOT_FOUND| stage. + // stages |STAGE_DEVICE_NOT_FOUND|, |STAGE_ESTABLISHING_CONNECTION_ERROR|, + // |STAGE_HOST_ENROLLMENT_ERROR|. virtual void RepeatDiscovery() = 0; // Returns pairing confirmation code. @@ -100,9 +101,9 @@ class CHROMEOS_EXPORT ControllerPairingFlow { virtual void StartSession() = 0; private: - DISALLOW_COPY_AND_ASSIGN(ControllerPairingFlow); + DISALLOW_COPY_AND_ASSIGN(ControllerPairingController); }; } // namespace chromeos -#endif // CHROMEOS_PAIRING_CONTROLLER_PAIRING_FLOW_H_ +#endif // CHROMEOS_PAIRING_CONTROLLER_PAIRING_CONTROLLER_H_ diff --git a/chromeos/pairing/controller_pairing_flow.cc b/chromeos/pairing/controller_pairing_flow.cc deleted file mode 100644 index 17f536b..0000000 --- a/chromeos/pairing/controller_pairing_flow.cc +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2014 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 "chromeos/pairing/controller_pairing_flow.h" - -namespace chromeos { - -ControllerPairingFlow::Observer::Observer() {} - -ControllerPairingFlow::Observer::~Observer() {} - -ControllerPairingFlow::ControllerPairingFlow() {} - -ControllerPairingFlow::~ControllerPairingFlow() {} - -} // namespace chromeos diff --git a/chromeos/pairing/fake_controller_pairing_flow.cc b/chromeos/pairing/fake_controller_pairing_controller.cc index ca5d0f2..6be3c90 100644 --- a/chromeos/pairing/fake_controller_pairing_flow.cc +++ b/chromeos/pairing/fake_controller_pairing_controller.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/pairing/fake_controller_pairing_flow.h" +#include "chromeos/pairing/fake_controller_pairing_controller.h" #include <map> @@ -16,7 +16,8 @@ namespace chromeos { -FakeControllerPairingFlow::FakeControllerPairingFlow(const std::string& config) +FakeControllerPairingController::FakeControllerPairingController( + const std::string& config) : current_stage_(STAGE_NONE), should_fail_on_connecting_(false), connection_lost_begin_(STAGE_NONE), @@ -26,11 +27,11 @@ FakeControllerPairingFlow::FakeControllerPairingFlow(const std::string& config) AddObserver(this); } -FakeControllerPairingFlow::~FakeControllerPairingFlow() { +FakeControllerPairingController::~FakeControllerPairingController() { RemoveObserver(this); } -void FakeControllerPairingFlow::ApplyConfig(const std::string& config) { +void FakeControllerPairingController::ApplyConfig(const std::string& config) { typedef std::vector<std::string> Tokens; base::StringPairs kv_pairs; @@ -103,21 +104,21 @@ void FakeControllerPairingFlow::ApplyConfig(const std::string& config) { << "Wrong 'code' format."; } -void FakeControllerPairingFlow::SetShouldFailOnConnecting() { +void FakeControllerPairingController::SetShouldFailOnConnecting() { should_fail_on_connecting_ = true; } -void FakeControllerPairingFlow::SetShouldLoseConnection(Stage stage_begin, - Stage stage_end) { +void FakeControllerPairingController::SetShouldLoseConnection(Stage stage_begin, + Stage stage_end) { connection_lost_begin_ = stage_begin; connection_lost_end_ = stage_end; } -void FakeControllerPairingFlow::SetEnrollmentShouldFail() { +void FakeControllerPairingController::SetEnrollmentShouldFail() { enrollment_should_fail_ = true; } -void FakeControllerPairingFlow::SetDiscoveryScenario( +void FakeControllerPairingController::SetDiscoveryScenario( const DiscoveryScenario& discovery_scenario) { discovery_scenario_ = discovery_scenario; // Check that scenario is valid. @@ -143,30 +144,31 @@ void FakeControllerPairingFlow::SetDiscoveryScenario( } } -void FakeControllerPairingFlow::AddObserver(Observer* observer) { +void FakeControllerPairingController::AddObserver(Observer* observer) { observers_.AddObserver(observer); } -void FakeControllerPairingFlow::RemoveObserver(Observer* observer) { +void FakeControllerPairingController::RemoveObserver(Observer* observer) { observers_.RemoveObserver(observer); } -ControllerPairingFlow::Stage FakeControllerPairingFlow::GetCurrentStage() { +ControllerPairingController::Stage +FakeControllerPairingController::GetCurrentStage() { return current_stage_; } -void FakeControllerPairingFlow::StartFlow() { +void FakeControllerPairingController::StartPairing() { CHECK(current_stage_ == STAGE_NONE); ChangeStage(STAGE_DEVICES_DISCOVERY); } -ControllerPairingFlow::DeviceIdList -FakeControllerPairingFlow::GetDiscoveredDevices() { +ControllerPairingController::DeviceIdList +FakeControllerPairingController::GetDiscoveredDevices() { CHECK(current_stage_ == STAGE_DEVICES_DISCOVERY); return DeviceIdList(discovered_devices_.begin(), discovered_devices_.end()); } -void FakeControllerPairingFlow::ChooseDeviceForPairing( +void FakeControllerPairingController::ChooseDeviceForPairing( const std::string& device_id) { CHECK(current_stage_ == STAGE_DEVICES_DISCOVERY); CHECK(discovered_devices_.count(device_id)); @@ -174,14 +176,14 @@ void FakeControllerPairingFlow::ChooseDeviceForPairing( ChangeStage(STAGE_ESTABLISHING_CONNECTION); } -void FakeControllerPairingFlow::RepeatDiscovery() { +void FakeControllerPairingController::RepeatDiscovery() { CHECK(current_stage_ == STAGE_DEVICE_NOT_FOUND || current_stage_ == STAGE_ESTABLISHING_CONNECTION_ERROR || current_stage_ == STAGE_HOST_ENROLLMENT_ERROR); ChangeStage(STAGE_DEVICES_DISCOVERY); } -std::string FakeControllerPairingFlow::GetConfirmationCode() { +std::string FakeControllerPairingController::GetConfirmationCode() { CHECK(current_stage_ == STAGE_WAITING_FOR_CODE_CONFIRMATION); if (confirmation_code_.empty()) { if (preset_confirmation_code_.empty()) { @@ -194,7 +196,8 @@ std::string FakeControllerPairingFlow::GetConfirmationCode() { return confirmation_code_; } -void FakeControllerPairingFlow::SetConfirmationCodeIsCorrect(bool correct) { +void FakeControllerPairingController::SetConfirmationCodeIsCorrect( + bool correct) { CHECK(current_stage_ == STAGE_WAITING_FOR_CODE_CONFIRMATION); if (correct) ChangeStage(STAGE_HOST_UPDATE_IN_PROGRESS); @@ -202,35 +205,36 @@ void FakeControllerPairingFlow::SetConfirmationCodeIsCorrect(bool correct) { ChangeStage(STAGE_DEVICES_DISCOVERY); } -void FakeControllerPairingFlow::OnAuthenticationDone( +void FakeControllerPairingController::OnAuthenticationDone( const chromeos::UserContext& user_context, content::BrowserContext* browser_context) { CHECK(current_stage_ == STAGE_WAITING_FOR_CREDENTIALS); ChangeStage(STAGE_HOST_ENROLLMENT_IN_PROGRESS); } -void FakeControllerPairingFlow::StartSession() { +void FakeControllerPairingController::StartSession() { CHECK(current_stage_ == STAGE_PAIRING_DONE); ChangeStage(STAGE_FINISHED); } -void FakeControllerPairingFlow::ChangeStage(Stage new_stage) { +void FakeControllerPairingController::ChangeStage(Stage new_stage) { if (current_stage_ == new_stage) return; current_stage_ = new_stage; FOR_EACH_OBSERVER(Observer, observers_, PairingStageChanged(new_stage)); } -void FakeControllerPairingFlow::ChangeStageLater(Stage new_stage) { +void FakeControllerPairingController::ChangeStageLater(Stage new_stage) { base::MessageLoop::current()->PostDelayedTask( FROM_HERE, - base::Bind(&FakeControllerPairingFlow::ChangeStage, + base::Bind(&FakeControllerPairingController::ChangeStage, base::Unretained(this), new_stage), async_duration_); } -void FakeControllerPairingFlow::ExecuteDiscoveryEvent(size_t event_position) { +void FakeControllerPairingController::ExecuteDiscoveryEvent( + size_t event_position) { if (current_stage_ != STAGE_DEVICES_DISCOVERY) return; CHECK(event_position < discovery_scenario_.size()); @@ -254,32 +258,33 @@ void FakeControllerPairingFlow::ExecuteDiscoveryEvent(size_t event_position) { } base::MessageLoop::current()->PostDelayedTask( FROM_HERE, - base::Bind(&FakeControllerPairingFlow::ExecuteDiscoveryEvent, + base::Bind(&FakeControllerPairingController::ExecuteDiscoveryEvent, base::Unretained(this), event_position), async_duration_); } -void FakeControllerPairingFlow::DeviceFound(const std::string& device_id) { +void FakeControllerPairingController::DeviceFound( + const std::string& device_id) { CHECK(current_stage_ == STAGE_DEVICES_DISCOVERY); discovered_devices_.insert(device_id); FOR_EACH_OBSERVER(Observer, observers_, DiscoveredDevicesListChanged()); } -void FakeControllerPairingFlow::DeviceLost(const std::string& device_id) { +void FakeControllerPairingController::DeviceLost(const std::string& device_id) { CHECK(current_stage_ == STAGE_DEVICES_DISCOVERY); discovered_devices_.erase(device_id); FOR_EACH_OBSERVER(Observer, observers_, DiscoveredDevicesListChanged()); } -void FakeControllerPairingFlow::PairingStageChanged(Stage new_stage) { +void FakeControllerPairingController::PairingStageChanged(Stage new_stage) { Stage next_stage = STAGE_NONE; switch (new_stage) { case STAGE_DEVICES_DISCOVERY: { discovered_devices_.clear(); base::MessageLoop::current()->PostDelayedTask( FROM_HERE, - base::Bind(&FakeControllerPairingFlow::ExecuteDiscoveryEvent, + base::Bind(&FakeControllerPairingController::ExecuteDiscoveryEvent, base::Unretained(this), 0), async_duration_); @@ -324,7 +329,7 @@ void FakeControllerPairingFlow::PairingStageChanged(Stage new_stage) { ChangeStageLater(next_stage); } -void FakeControllerPairingFlow::DiscoveredDevicesListChanged() { +void FakeControllerPairingController::DiscoveredDevicesListChanged() { } } // namespace chromeos diff --git a/chromeos/pairing/fake_controller_pairing_flow.h b/chromeos/pairing/fake_controller_pairing_controller.h index 7a06737..68d585d 100644 --- a/chromeos/pairing/fake_controller_pairing_flow.h +++ b/chromeos/pairing/fake_controller_pairing_controller.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_FLOW_H_ -#define CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_FLOW_H_ +#ifndef CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_CONTROLLER_H_ +#define CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_CONTROLLER_H_ #include <set> #include <utility> @@ -12,15 +12,15 @@ #include "base/observer_list.h" #include "base/time/time.h" #include "chromeos/chromeos_export.h" -#include "chromeos/pairing/controller_pairing_flow.h" +#include "chromeos/pairing/controller_pairing_controller.h" namespace chromeos { -class CHROMEOS_EXPORT FakeControllerPairingFlow - : public ControllerPairingFlow, - public ControllerPairingFlow::Observer { +class CHROMEOS_EXPORT FakeControllerPairingController + : public ControllerPairingController, + public ControllerPairingController::Observer { public: - typedef ControllerPairingFlow::Observer Observer; + typedef ControllerPairingController::Observer Observer; enum DiscoveryEventType { DEVICE_FOUND, DEVICE_LOST, NOTHING_FOUND }; @@ -37,10 +37,10 @@ class CHROMEOS_EXPORT FakeControllerPairingFlow // F-Device_1~F-Device_5~F-Device_3~L-Device_3~L-Device_1~F-Device_1 // * code - 6 digits or empty string. Default: empty string. If strings is // empty, random code is generated. - FakeControllerPairingFlow(const std::string& config); - virtual ~FakeControllerPairingFlow(); + explicit FakeControllerPairingController(const std::string& config); + virtual ~FakeControllerPairingController(); - // Applies given |config| to flow. + // Applies given |config| to controller. void ApplyConfig(const std::string& config); // Sets delay for asynchronous operations. like device searching or host @@ -64,11 +64,11 @@ class CHROMEOS_EXPORT FakeControllerPairingFlow // For default scenario refer to implementation. void SetDiscoveryScenario(const DiscoveryScenario& discovery_scenario); - // Overridden from ControllerPairingFlow: + // Overridden from ControllerPairingController: virtual void AddObserver(Observer* observer) OVERRIDE; virtual void RemoveObserver(Observer* observer) OVERRIDE; virtual Stage GetCurrentStage() OVERRIDE; - virtual void StartFlow() OVERRIDE; + virtual void StartPairing() OVERRIDE; virtual DeviceIdList GetDiscoveredDevices() OVERRIDE; virtual void ChooseDeviceForPairing(const std::string& device_id) OVERRIDE; virtual void RepeatDiscovery() OVERRIDE; @@ -86,11 +86,11 @@ class CHROMEOS_EXPORT FakeControllerPairingFlow void DeviceFound(const std::string& device_id); void DeviceLost(const std::string& device_id); - // Overridden from ui::ControllerPairingFlow::Observer: + // Overridden from ui::ControllerPairingController::Observer: virtual void PairingStageChanged(Stage new_stage) OVERRIDE; virtual void DiscoveredDevicesListChanged() OVERRIDE; - ObserverList<ControllerPairingFlow::Observer> observers_; + ObserverList<ControllerPairingController::Observer> observers_; Stage current_stage_; std::string confirmation_code_; std::string preset_confirmation_code_; @@ -103,9 +103,9 @@ class CHROMEOS_EXPORT FakeControllerPairingFlow Stage connection_lost_end_; bool enrollment_should_fail_; - DISALLOW_COPY_AND_ASSIGN(FakeControllerPairingFlow); + DISALLOW_COPY_AND_ASSIGN(FakeControllerPairingController); }; } // namespace chromeos -#endif // CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_FLOW_H_ +#endif // CHROMEOS_PAIRING_FAKE_CONTROLLER_PAIRING_CONTROLLER_H_ |