Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(778)

Unified Diff: chrome/browser/chromeos/login/screens/device_disabled_screen.cc

Issue 676773002: Add device disabling to OOBE flow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/screens/device_disabled_screen.cc
diff --git a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
index 9812c75fb7294a483f116284ba6ae4905e5720e6..a251a66e284085162cd53b2f2dbd3c8608bbbb11 100644
--- a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
+++ b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
@@ -6,17 +6,30 @@
#include <string>
+#include "base/bind.h"
+#include "base/command_line.h"
#include "base/logging.h"
+#include "base/prefs/pref_service.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/chromeos/login/screens/screen_observer.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+#include "chrome/browser/chromeos/policy/enterprise_install_attributes.h"
+#include "chrome/browser/chromeos/policy/server_backed_device_state.h"
+#include "chrome/common/pref_names.h"
+#include "chromeos/chromeos_switches.h"
+#include "components/policy/core/common/cloud/cloud_policy_constants.h"
namespace chromeos {
DeviceDisabledScreen::DeviceDisabledScreen(ScreenObserver* observer,
DeviceDisabledScreenActor* actor)
: BaseScreen(observer),
- actor_(actor) {
+ showing_(false),
+ actor_(actor),
+ weak_factory_(this) {
DCHECK(actor_);
if (actor_)
actor_->SetDelegate(this);
@@ -31,11 +44,54 @@ void DeviceDisabledScreen::PrepareToShow() {
}
void DeviceDisabledScreen::Show() {
- if (actor_)
- actor_->Show();
+ if (!actor_)
Joao da Silva 2014/10/24 09:07:30 || showing_?
bartfab (slow) 2014/10/24 11:13:52 Done.
+ return;
+
+ bool is_device_disabled = false;
+ g_browser_process->local_state()->GetDictionary(
+ prefs::kServerBackedDeviceState)->GetBoolean(policy::kDeviceStateDisabled,
Nikita (slow) 2014/10/24 10:26:12 If device_mode is policy::DEVICE_MODE_PENDING then
bartfab (slow) 2014/10/24 11:13:52 The value of |is_device_disabled| is independent o
Nikita (slow) 2014/10/24 13:57:28 So if is_device_disabled is true and you proceed i
bartfab (slow) 2014/10/24 14:02:18 In theory, yes, it could happen. And we handled it
+ &is_device_disabled);
+ if (!is_device_disabled ||
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableDeviceDisabling)) {
+ // Skip the screen if the device is not marked as disabled or device
+ // disabling has been turned off by flag.
+ IndicateDeviceNotDisabled();
+ return;
+ }
+
+ policy::BrowserPolicyConnectorChromeOS* connector =
+ g_browser_process->platform_part()->browser_policy_connector_chromeos();
+ if (connector->GetDeviceMode() == policy::DEVICE_MODE_PENDING) {
+ // Ensure that the device mode is known before proceeding.
+ connector->GetInstallAttributes()->ReadImmutableAttributes(
+ base::Bind(&DeviceDisabledScreen::Show,
Nikita (slow) 2014/10/24 10:26:12 What would be the UI transition if this check resu
bartfab (slow) 2014/10/24 11:13:51 Yes, the previous screen will still be showing. On
+ weak_factory_.GetWeakPtr()));
+ return;
+ }
+
+ if (connector->GetDeviceMode() != policy::DEVICE_MODE_NOT_SET) {
+ // Skip the screen if the device is owned already. The device disabling
+ // screen should only be shown during OOBE.
Joao da Silva 2014/10/24 09:07:30 Just so I understand, how do we disable devices th
bartfab (slow) 2014/10/24 11:13:52 In this CL, we don't :). It will be done in a foll
+ IndicateDeviceNotDisabled();
+ return;
+ }
+
+ showing_ = true;
+
+ std::string message;
+ g_browser_process->local_state()->GetDictionary(
+ prefs::kServerBackedDeviceState)->GetString(
+ policy::kDeviceStateDisabledMessage,
+ &message);
+ actor_->Show(message);
}
void DeviceDisabledScreen::Hide() {
+ if (!showing_)
+ return;
+ showing_ = false;
+
if (actor_)
actor_->Hide();
}
@@ -49,4 +105,8 @@ void DeviceDisabledScreen::OnActorDestroyed(DeviceDisabledScreenActor* actor) {
actor_ = NULL;
Joao da Silva 2014/10/24 09:07:30 nullptr
bartfab (slow) 2014/10/24 11:13:51 Done.
}
+void DeviceDisabledScreen::IndicateDeviceNotDisabled() {
+ get_screen_observer()->OnExit(ScreenObserver::DEVICE_NOT_DISABLED);
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698