Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
| index 5e929095c25845510f586b4c8308b4dc99626fed..c2c597e742e239dca1d0caecd8c1244212a5dd79 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
| @@ -6,7 +6,13 @@ |
| #include <string> |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| +#include "base/callback.h" |
| #include "base/command_line.h" |
| +#include "base/file_util.h" |
| +#include "base/files/file_path.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/metrics/histogram.h" |
| #include "base/prefs/pref_service.h" |
| #include "base/values.h" |
| @@ -20,6 +26,7 @@ |
| #include "chromeos/dbus/power_manager_client.h" |
| #include "chromeos/dbus/session_manager_client.h" |
| #include "chromeos/dbus/update_engine_client.h" |
| +#include "content/public/browser/browser_thread.h" |
| #include "grit/browser_resources.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| @@ -34,6 +41,13 @@ const char kResetScreen[] = "reset"; |
| const int kErrorUIStateRollback = 7; |
| +static const char kRollbackFlagFile[] = "/tmp/enable_rollback_ui.flag"; |
|
Nikita (slow)
2014/05/22 09:51:32
nit: /tmp/.enable_rollback_ui
merkulova
2014/05/22 11:22:02
Done.
|
| + |
| +void CheckRollbackFlagFileExists(bool *file_exists) { |
| + DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); |
| + *file_exists = base::PathExists(base::FilePath(kRollbackFlagFile)); |
| +} |
| + |
| } // namespace |
| namespace chromeos { |
| @@ -94,6 +108,10 @@ void ResetScreenHandler::Show() { |
| return; |
| } |
| + ChooseAndApplyShowScenario(); |
| +} |
| + |
| +void ResetScreenHandler::ChooseAndApplyShowScenario() { |
| PrefService* prefs = g_browser_process->local_state(); |
| restart_required_ = !CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kFirstExecAfterBoot); |
| @@ -101,12 +119,34 @@ void ResetScreenHandler::Show() { |
| rollback_available_ = false; |
| if (!restart_required_) // First exec after boot. |
| reboot_was_requested_ = prefs->GetBoolean(prefs::kFactoryResetRequested); |
| - if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| + |
| + // Check Rollback flag-file. |
| + scoped_ptr<bool> file_exists(new bool(false)); |
| + base::Closure checkfile_closure = base::Bind( |
| + &CheckRollbackFlagFileExists, |
| + base::Unretained(file_exists.get())); |
| + base::Closure on_check_done = base::Bind( |
| + &ResetScreenHandler::OnRollbackFlagFileCheckDone, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + base::Passed(file_exists.Pass())); |
| + if (!content::BrowserThread::PostBlockingPoolTaskAndReply( |
| + FROM_HERE, |
|
Nikita (slow)
2014/05/22 09:51:32
nit: 4 spaces indent
merkulova
2014/05/22 11:22:02
Done.
|
| + checkfile_closure, |
| + on_check_done)) { |
| + LOG(WARNING) << "Failed to check flag file for Rollback reset option"; |
| + on_check_done.Run(); |
| + } |
| +} |
| + |
| +void ResetScreenHandler::OnRollbackFlagFileCheckDone( |
| + scoped_ptr<bool> file_exists) { |
| + if (!file_exists && !CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kEnableRollbackOption)) { |
| rollback_available_ = false; |
| ShowWithParams(); |
| } else if (!restart_required_ && reboot_was_requested_) { |
| // First exec after boot. |
| + PrefService* prefs = g_browser_process->local_state(); |
| rollback_available_ = prefs->GetBoolean(prefs::kRollbackRequested); |
| ShowWithParams(); |
| } else { |
| @@ -116,6 +156,7 @@ void ResetScreenHandler::Show() { |
| } |
| } |
| + |
|
Nikita (slow)
2014/05/22 09:51:32
nit: drop extra empty line
merkulova
2014/05/22 11:22:02
Done.
|
| void ResetScreenHandler::Hide() { |
| DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this); |
| } |