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

Unified Diff: chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc

Issue 156493004: Add the ability to show a demo app on OOBE if a machine is derelict. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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/ui/webui/chromeos/login/network_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
index e5132152220a8449e93fba00675a1f9809d025a2..25378b5329687c5f26918df9608358b5564cce45 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
@@ -6,19 +6,28 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/command_line.h"
#include "base/memory/weak_ptr.h"
+#include "base/prefs/pref_registry_simple.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
bartfab (slow) 2014/02/13 19:51:53 Nit: Not used.
rkc 2014/02/13 23:22:01 Done.
#include "chrome/browser/chromeos/base/locale_util.h"
+#include "chrome/browser/chromeos/idle_detector.h"
#include "chrome/browser/chromeos/input_method/input_method_util.h"
#include "chrome/browser/chromeos/login/input_events_blocker.h"
+#include "chrome/browser/chromeos/login/login_display_host_impl.h"
#include "chrome/browser/chromeos/login/screens/core_oobe_actor.h"
#include "chrome/browser/chromeos/system/input_device_settings.h"
#include "chrome/browser/chromeos/system/timezone_util.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.h"
+#include "chrome/common/pref_names.h"
+#include "chromeos/chromeos_switches.h"
#include "chromeos/ime/input_method_manager.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -39,6 +48,9 @@ const char kJsApiNetworkOnTimezoneChanged[] = "networkOnTimezoneChanged";
const char kUSlayout[] = "xkb:us::eng";
+const int64 kDerelectDetectionTimeoutSeconds = 8 * 60 * 60; // 8 hours.
bartfab (slow) 2014/02/13 19:51:53 Why is this an int64? int would have been entirely
rkc 2014/02/13 23:22:01 To keep the type consistent with what base::Time::
bartfab (slow) 2014/02/17 15:53:46 1) C++ will implicitly up-cast an |int| to an |int
+const int64 kDerelectIdleTimeoutSeconds = 5 * 60; // 5 minutes.
bartfab (slow) 2014/02/13 19:51:53 Why is this an int64? int would have been entirely
rkc 2014/02/13 23:22:01 Done.
+
} // namespace
namespace chromeos {
@@ -50,9 +62,11 @@ NetworkScreenHandler::NetworkScreenHandler(CoreOobeActor* core_oobe_actor)
screen_(NULL),
core_oobe_actor_(core_oobe_actor),
is_continue_enabled_(false),
+ is_derelict_(false),
show_on_init_(false),
weak_ptr_factory_(this) {
DCHECK(core_oobe_actor_);
+ SetupTimeouts();
}
NetworkScreenHandler::~NetworkScreenHandler() {
@@ -76,6 +90,7 @@ void NetworkScreenHandler::Show() {
}
ShowScreen(OobeUI::kScreenOobeNetwork, NULL);
+ StartIdleDetection();
}
void NetworkScreenHandler::Hide() {
@@ -159,9 +174,16 @@ void NetworkScreenHandler::RegisterMessages() {
&NetworkScreenHandler::HandleOnTimezoneChanged);
}
+
+// static
+void NetworkScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
+ registry->RegisterBooleanPref(prefs::kDerelictMachine, false);
+}
+
// NetworkScreenHandler, private: ----------------------------------------------
void NetworkScreenHandler::HandleOnExit() {
+ detector_.reset();
ClearErrors();
if (screen_)
screen_->OnContinuePressed();
@@ -237,6 +259,58 @@ void NetworkScreenHandler::OnSystemTimezoneChanged() {
CallJS("setTimezone", current_timezone_id);
}
+void NetworkScreenHandler::StartIdleDetection() {
+ if (!detector_.get()) {
+ detector_.reset(
+ new IdleDetector(base::Closure(),
+ base::Bind(&NetworkScreenHandler::OnIdle,
+ weak_ptr_factory_.GetWeakPtr())));
+ }
+
+ detector_->Start(
+ is_derelict_ ? derelict_idle_timeout_ : derelict_detection_timeout_);
+}
+
+void NetworkScreenHandler::OnIdle() {
+ if (is_derelict_) {
+ LoginDisplayHost* host = LoginDisplayHostImpl::default_host();
bartfab (slow) 2014/02/13 19:51:53 Nit: #include "chrome/browser/chromeos/login/login
rkc 2014/02/13 23:22:01 Done.
+ host->StartDemoAppLaunch();
+ } else {
+ is_derelict_ = true;
+ PrefService* prefs = g_browser_process->local_state();
+ prefs->SetBoolean(prefs::kDerelictMachine, true);
+
+ StartIdleDetection();
+ }
+}
+
+void NetworkScreenHandler::SetupTimeouts() {
+ CommandLine* cmdline = CommandLine::ForCurrentProcess();
+ DCHECK(cmdline);
bartfab (slow) 2014/02/13 19:51:53 Nit: #include "base/logging.h"
rkc 2014/02/13 23:22:01 Done.
+
+ PrefService* prefs = g_browser_process->local_state();
+ is_derelict_ = prefs->GetBoolean(prefs::kDerelictMachine);
+
+ int64 derelict_detection_timeout;
+ if (!cmdline->HasSwitch(switches::kDerelictDetectionTimeout) ||
+ !base::StringToInt64(
+ cmdline->GetSwitchValueASCII(switches::kDerelictDetectionTimeout),
+ &derelict_detection_timeout)) {
+ derelict_detection_timeout = kDerelectDetectionTimeoutSeconds;
+ }
+ derelict_detection_timeout_ =
+ base::TimeDelta::FromSeconds(derelict_detection_timeout);
+
+ int64 derelict_idle_timeout;
+ if (!cmdline->HasSwitch(switches::kDerelictIdleTimeout) ||
+ !base::StringToInt64(
+ cmdline->GetSwitchValueASCII(switches::kDerelictIdleTimeout),
+ &derelict_idle_timeout)) {
+ derelict_idle_timeout = kDerelectIdleTimeoutSeconds;
+ }
+ derelict_idle_timeout_ = base::TimeDelta::FromSeconds(derelict_idle_timeout);
+}
+
// static
base::ListValue* NetworkScreenHandler::GetLanguageList() {
const std::string app_locale = g_browser_process->GetApplicationLocale();

Powered by Google App Engine
This is Rietveld 408576698