Chromium Code Reviews| 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 |