summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd5
-rw-r--r--chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.cc26
-rw-r--r--chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.h1
-rw-r--r--chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h1
-rw-r--r--chrome/browser/chromeos/login/enrollment/mock_enterprise_enrollment_screen.h1
-rw-r--r--chrome/browser/policy/enterprise_metrics.h5
-rw-r--r--chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc6
-rw-r--r--chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h1
8 files changed, 36 insertions, 10 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 14ed3c8..ea6c4e5 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -15922,7 +15922,10 @@ Battery full
This device cannot be enrolled in the domain this user account belongs to.
</message>
<message name="IDS_ENTERPRISE_ENROLLMENT_MODE_ERROR" desc="Error message to show when the DM Server didn't send or send unsupported enrollment mode to the client.">
- The supplied enrollment mode is not supported by this version of the operating system. Please make sure you are running the newest version and try again.
+ The supplied enrollment mode is not supported by this version of the operating system. Please make sure you are running the newest version and try again.
+ </message>
+ <message name="IDS_ENTERPRISE_LOCKBOX_TIMEOUT_ERROR" desc="Error message to show when the initialization of the lockbox is taking too long.">
+ Oops! The initialization of the installation-time attributes has timed out. Please contact your support representative.
</message>
<message name="IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE" desc="The title on the enterprise enrollment dialog.">
Enterprise enrollment
diff --git a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.cc b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.cc
index 4de8851..9b50a20 100644
--- a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.cc
+++ b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.cc
@@ -27,6 +27,8 @@ namespace {
// Retry for InstallAttrs initialization every 500ms.
const int kLockRetryIntervalMs = 500;
+// Maximum time to retry InstallAttrs initialization before we give up.
+const int kLockRetryTimeoutMs = 10 * 60 * 1000; // 10 minutes.
} // namespace
@@ -37,6 +39,7 @@ EnterpriseEnrollmentScreen::EnterpriseEnrollmentScreen(
actor_(actor),
is_auto_enrollment_(false),
is_showing_(false),
+ lockbox_init_duration_(0),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
actor_->SetController(this);
// Init the TPM if it has not been done until now (in debug build we might
@@ -187,14 +190,21 @@ void EnterpriseEnrollmentScreen::WriteInstallAttributesData() {
return;
}
case policy::EnterpriseInstallAttributes::LOCK_NOT_READY: {
- // InstallAttributes not ready yet, retry later.
- LOG(WARNING) << "Install Attributes not ready yet will retry in "
- << kLockRetryIntervalMs << "ms.";
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&EnterpriseEnrollmentScreen::WriteInstallAttributesData,
- weak_ptr_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kLockRetryIntervalMs));
+ // We wait up to |kLockRetryTimeoutMs| milliseconds and if it hasn't
+ // succeeded by then show an error to the user and stop the enrollment.
+ if (lockbox_init_duration_ < kLockRetryTimeoutMs) {
+ // InstallAttributes not ready yet, retry later.
+ LOG(WARNING) << "Install Attributes not ready yet will retry in "
+ << kLockRetryIntervalMs << "ms.";
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&EnterpriseEnrollmentScreen::WriteInstallAttributesData,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kLockRetryIntervalMs));
+ lockbox_init_duration_ += kLockRetryIntervalMs;
+ } else {
+ actor_->ShowLockboxTimeoutError();
+ }
return;
}
case policy::EnterpriseInstallAttributes::LOCK_BACKEND_ERROR: {
diff --git a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.h b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.h
index 264329e..65b8b1e 100644
--- a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.h
+++ b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen.h
@@ -66,6 +66,7 @@ class EnterpriseEnrollmentScreen
bool is_auto_enrollment_;
bool is_showing_;
std::string user_;
+ int lockbox_init_duration_;
scoped_ptr<policy::CloudPolicySubsystem::ObserverRegistrar> registrar_;
base::WeakPtrFactory<EnterpriseEnrollmentScreen> weak_ptr_factory_;
diff --git a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h
index 7976adc..4172d48 100644
--- a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h
+++ b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h
@@ -72,6 +72,7 @@ class EnterpriseEnrollmentScreenActor {
virtual void ShowFatalEnrollmentError() = 0;
virtual void ShowAutoEnrollmentError() = 0;
virtual void ShowNetworkEnrollmentError() = 0;
+ virtual void ShowLockboxTimeoutError() = 0;
// Used for testing only.
virtual void SubmitTestCredentials(const std::string& email,
diff --git a/chrome/browser/chromeos/login/enrollment/mock_enterprise_enrollment_screen.h b/chrome/browser/chromeos/login/enrollment/mock_enterprise_enrollment_screen.h
index 22868aa..3ecf589 100644
--- a/chrome/browser/chromeos/login/enrollment/mock_enterprise_enrollment_screen.h
+++ b/chrome/browser/chromeos/login/enrollment/mock_enterprise_enrollment_screen.h
@@ -40,6 +40,7 @@ class MockEnterpriseEnrollmentScreenActor
MOCK_METHOD0(ShowFatalEnrollmentError, void());
MOCK_METHOD0(ShowAutoEnrollmentError, void());
MOCK_METHOD0(ShowNetworkEnrollmentError, void());
+ MOCK_METHOD0(ShowLockboxTimeoutError, void());
MOCK_METHOD2(SubmitTestCredentials, void(const std::string& email,
const std::string& password));
};
diff --git a/chrome/browser/policy/enterprise_metrics.h b/chrome/browser/policy/enterprise_metrics.h
index 357cd38..5e12b5c 100644
--- a/chrome/browser/policy/enterprise_metrics.h
+++ b/chrome/browser/policy/enterprise_metrics.h
@@ -131,7 +131,7 @@ enum MetricEnrollment {
kMetricEnrollmentAutoFailed,
// Auto-enrollment was retried after having failed before.
kMetricEnrollmentAutoRetried,
- // Auto-enrollment was cancelled through the opt-out dialog.
+ // Auto-enrollment was canceled through the opt-out dialog.
kMetricEnrollmentAutoCancelled,
// Auto-enrollment succeeded.
kMetricEnrollmentAutoOK,
@@ -141,6 +141,9 @@ enum MetricEnrollment {
// Auto-enrollment is not supported for the mode supplied by the server.
// This presently means trying to auto-enroll in kiosk mode.
kMetricEnrollmentAutoEnrollmentNotSupported,
+ // The lockbox initialization has taken too long to complete and the
+ // enrollment has been canceled because of that.
+ kMetricLockboxTimeoutError,
kMetricEnrollmentSize // Must be the last.
};
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
index db91c9c..9950066 100644
--- a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
@@ -239,6 +239,12 @@ void EnterpriseOAuthEnrollmentScreenHandler::ShowNetworkEnrollmentError() {
NotifyObservers(false);
}
+void EnterpriseOAuthEnrollmentScreenHandler::ShowLockboxTimeoutError() {
+ UMAFailure(policy::kMetricLockboxTimeoutError);
+ ShowError(IDS_ENTERPRISE_LOCKBOX_TIMEOUT_ERROR, true);
+ NotifyObservers(false);
+}
+
void EnterpriseOAuthEnrollmentScreenHandler::SubmitTestCredentials(
const std::string& email,
const std::string& password) {
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h
index e9b0f53..041a402 100644
--- a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h
@@ -49,6 +49,7 @@ class EnterpriseOAuthEnrollmentScreenHandler
virtual void ShowFatalEnrollmentError() OVERRIDE;
virtual void ShowAutoEnrollmentError() OVERRIDE;
virtual void ShowNetworkEnrollmentError() OVERRIDE;
+ virtual void ShowLockboxTimeoutError() OVERRIDE;
virtual void SubmitTestCredentials(const std::string& email,
const std::string& password) OVERRIDE;