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

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..ece694cfd96ed3889f4ad36111d31b7837717263 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"
#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.
+const int64 kDerelectIdleTimeoutSeconds = 5 * 60; // 5 minutes.
+
} // 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,17 @@ void NetworkScreenHandler::RegisterMessages() {
&NetworkScreenHandler::HandleOnTimezoneChanged);
}
+
+// static
+void NetworkScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
+ registry->RegisterBooleanPref(prefs::kDerelictMachine, false);
+}
+
+
xiyuan 2014/02/11 03:42:45 nit: nuke one empty line
rkc 2014/02/11 04:35:57 Done.
// NetworkScreenHandler, private: ----------------------------------------------
void NetworkScreenHandler::HandleOnExit() {
+ detector_.reset();
ClearErrors();
if (screen_)
screen_->OnContinuePressed();
@@ -237,6 +260,64 @@ void NetworkScreenHandler::OnSystemTimezoneChanged() {
CallJS("setTimezone", current_timezone_id);
}
+void NetworkScreenHandler::StartIdleDetection() {
+ if (!detector_.get()) {
+ detector_.reset(
+ new IdleDetector(base::Bind(&base::DoNothing),
xiyuan 2014/02/11 03:42:45 Think we should use a base::Closure() instead of D
rkc 2014/02/11 04:35:57 Done.
+ base::Bind(&NetworkScreenHandler::OnIdle,
+ weak_ptr_factory_.GetWeakPtr())));
+ }
+
+ if (is_derelict_) {
+ detector_->Start(derelict_idle_timeout_);
+ } else {
+ detector_->Start(derelict_detection_timeout_);
xiyuan 2014/02/11 03:42:45 nit: simplify to detector_->Start(is_derelict_ ? d
rkc 2014/02/11 04:35:57 Done.
+ }
+}
+
+void NetworkScreenHandler::OnIdle() {
+ if (is_derelict_) {
+ LoginDisplayHost* host = LoginDisplayHostImpl::default_host();
+ host->StartDemoAppLaunch();
+ } else {
+ is_derelict_ = true;
+ PrefService* prefs = g_browser_process->local_state();
+ prefs->SetBoolean(prefs::kDerelictMachine, true);
+
+ StartIdleDetection();
+ }
+}
+
+void NetworkScreenHandler::SetupTimeouts() {
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ DCHECK(command_line);
+
+ PrefService* prefs = g_browser_process->local_state();
+ DCHECK(prefs);
+ is_derelict_ = prefs->GetBoolean(prefs::kDerelictMachine);
+
+ int64 derelict_detection_timeout;
+ if (command_line->HasSwitch(switches::kDerelictDetectionTimeout)) {
+ base::StringToInt64(
xiyuan 2014/02/11 03:42:45 nit: Handle StringToInt64 failure.
rkc 2014/02/11 04:35:57 Handled here and below. Done.
+ command_line->GetSwitchValueASCII(switches::kDerelictDetectionTimeout),
+ &derelict_detection_timeout);
+ } else {
+ derelict_detection_timeout = kDerelectDetectionTimeoutSeconds;
+ }
+ derelict_detection_timeout_ =
+ base::TimeDelta::FromSeconds(derelict_detection_timeout);
+
+ int64 derelict_idle_timeout;
+ if (command_line->HasSwitch(switches::kDerelictIdleTimeout)) {
+ base::StringToInt64(
+ command_line->GetSwitchValueASCII(switches::kDerelictIdleTimeout),
+ &derelict_idle_timeout);
+ } else {
+ 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();
@@ -313,6 +394,7 @@ base::ListValue* NetworkScreenHandler::GetInputMethods() {
input_method->SetString("title",
util->GetInputMethodLongName(*us_eng_descriptor));
input_methods_list->Append(input_method);
+ input_methods_list->Append(input_method);
xiyuan 2014/02/11 03:42:45 This does not look like intended.
rkc 2014/02/11 04:35:57 Weird, not sure where that came from. Fixed.
}
return input_methods_list;
}

Powered by Google App Engine
This is Rietveld 408576698