summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/screens/base_screen.h3
-rw-r--r--chrome/browser/chromeos/login/screens/controller_pairing_screen.cc228
-rw-r--r--chrome/browser/chromeos/login/screens/controller_pairing_screen.h69
-rw-r--r--chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.cc51
-rw-r--r--chrome/browser/chromeos/login/screens/controller_pairing_screen_actor.h86
-rw-r--r--chrome/browser/chromeos/login/screens/screen_manager.cc1
-rw-r--r--chrome/browser/chromeos/login/screens/screen_observer.h1
-rw-r--r--chrome/browser/chromeos/login/ui/oobe_display.h16
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.cc41
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.h10
-rw-r--r--chrome/browser/chromeos/login/wizard_controller_browsertest.cc5
-rw-r--r--chrome/browser/resources/chromeos/login/login_resources.html1
-rw-r--r--chrome/browser/resources/chromeos/login/oobe.js2
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.css28
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.html58
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_controller_pairing.js171
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screens.html1
-rw-r--r--chrome/browser/resources/login/screen.js5
-rw-r--r--chrome/browser/ui/webui/chromeos/login/base_screen_handler.h6
-rw-r--r--chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc93
-rw-r--r--chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h46
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc75
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.h7
-rw-r--r--chrome/chrome_browser_chromeos.gypi4
-rw-r--r--chrome/chrome_browser_ui.gypi2
-rw-r--r--chromeos/chromeos.gyp8
-rw-r--r--chromeos/chromeos_switches.cc4
-rw-r--r--chromeos/chromeos_switches.h9
-rw-r--r--chromeos/pairing/controller_pairing_controller.cc21
-rw-r--r--chromeos/pairing/controller_pairing_controller.h (renamed from chromeos/pairing/controller_pairing_flow.h)27
-rw-r--r--chromeos/pairing/controller_pairing_flow.cc17
-rw-r--r--chromeos/pairing/fake_controller_pairing_controller.cc (renamed from chromeos/pairing/fake_controller_pairing_flow.cc)67
-rw-r--r--chromeos/pairing/fake_controller_pairing_controller.h (renamed from chromeos/pairing/fake_controller_pairing_flow.h)32
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_