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

Unified Diff: chrome/browser/signin/easy_unlock_service.cc

Issue 644873002: Easy Unlock Show connecting user pod icon when waking up from sleep (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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
« no previous file with comments | « chrome/browser/signin/easy_unlock_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/easy_unlock_service.cc
diff --git a/chrome/browser/signin/easy_unlock_service.cc b/chrome/browser/signin/easy_unlock_service.cc
index f6deed01809333a3491ef95fa5b6b8ff78b61db5..ad20ddedcad7e274d9e9b6aa8b1513db73d1cfc8 100644
--- a/chrome/browser/signin/easy_unlock_service.cc
+++ b/chrome/browser/signin/easy_unlock_service.cc
@@ -11,6 +11,8 @@
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
#include "base/prefs/scoped_user_pref_update.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/component_loader.h"
@@ -143,7 +145,10 @@ class EasyUnlockService::BluetoothDetector
class EasyUnlockService::PowerMonitor
: public chromeos::PowerManagerClient::Observer {
public:
- explicit PowerMonitor(EasyUnlockService* service) : service_(service) {
+ explicit PowerMonitor(EasyUnlockService* service)
+ : service_(service),
+ waking_up_(false),
+ weak_ptr_factory_(this) {
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
AddObserver(this);
}
@@ -153,17 +158,33 @@ class EasyUnlockService::PowerMonitor
RemoveObserver(this);
}
+ bool waking_up() const { return waking_up_; }
+
private:
// chromeos::PowerManagerClient::Observer:
virtual void SuspendImminent() override {
- service_->DisableAppIfLoaded();
+ service_->PrepareForSuspend();
}
virtual void SuspendDone(const base::TimeDelta& sleep_duration) override {
- service_->LoadApp();
+ waking_up_ = true;
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&PowerMonitor::ResetWakingUp,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(5));
+ service_->UpdateAppState();
+ // Note that |this| may get deleted after |UpdateAppState| is called.
+ }
+
+ void ResetWakingUp() {
+ waking_up_ = false;
+ service_->UpdateAppState();
}
EasyUnlockService* service_;
+ bool waking_up_;
+ base::WeakPtrFactory<PowerMonitor> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(PowerMonitor);
};
@@ -423,9 +444,6 @@ void EasyUnlockService::LoadApp() {
}
void EasyUnlockService::DisableAppIfLoaded() {
- // Make sure lock screen state set by the extension gets reset.
- ResetScreenlockState();
-
extensions::ComponentLoader* loader = GetComponentLoader(profile_);
if (!loader->Exists(extension_misc::kEasyUnlockAppId))
return;
@@ -458,14 +476,27 @@ void EasyUnlockService::UpdateAppState() {
LoadApp();
#if defined(OS_CHROMEOS)
- if (!power_monitor_)
- power_monitor_.reset(new PowerMonitor(this));
+ if (!power_monitor_)
+ power_monitor_.reset(new PowerMonitor(this));
#endif
} else {
- DisableAppIfLoaded();
+ bool bluetooth_waking_up = false;
+#if defined(OS_CHROMEOS)
+ // If the service is not allowed due to bluetooth not being detected just
+ // after system suspend is done, give bluetooth more time to be detected
+ // before disabling the app (and resetting screenlock state).
+ bluetooth_waking_up =
+ power_monitor_.get() && power_monitor_->waking_up() &&
+ !bluetooth_detector_->IsPresent();
+#endif
+
+ if (!bluetooth_waking_up) {
+ DisableAppIfLoaded();
+ ResetScreenlockState();
#if defined(OS_CHROMEOS)
- power_monitor_.reset();
+ power_monitor_.reset();
#endif
+ }
}
}
@@ -569,3 +600,11 @@ void EasyUnlockService::OnCryptohomeKeysFetchedForChecking(
}
#endif
+void EasyUnlockService::PrepareForSuspend() {
+ DisableAppIfLoaded();
+ if (screenlock_state_handler_ && screenlock_state_handler_->IsActive()) {
+ UpdateScreenlockState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+ }
+}
+
« no previous file with comments | « chrome/browser/signin/easy_unlock_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698