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

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

Issue 577683002: Introduce EasyUnlockService class for signin profile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 3 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') | chrome/browser/signin/easy_unlock_service_factory.cc » ('j') | 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 ea4af8daf8983bb7e593ff6deca3c7bf7fb6c45f..68ffa44cb8aafd74bbf6292ebc5828aa37da6478 100644
--- a/chrome/browser/signin/easy_unlock_service.cc
+++ b/chrome/browser/signin/easy_unlock_service.cc
@@ -4,15 +4,11 @@
#include "chrome/browser/signin/easy_unlock_service.h"
-#include <string>
-
#include "base/bind.h"
#include "base/command_line.h"
#include "base/logging.h"
-#include "base/memory/ref_counted.h"
#include "base/metrics/field_trial.h"
#include "base/prefs/pref_service.h"
-#include "base/prefs/scoped_user_pref_update.h"
#include "base/values.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -20,10 +16,9 @@
#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
#include "chrome/browser/signin/easy_unlock_service_factory.h"
#include "chrome/browser/signin/easy_unlock_service_observer.h"
-#include "chrome/browser/signin/easy_unlock_toggle_flow.h"
#include "chrome/browser/signin/screenlock_bridge.h"
-#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "device/bluetooth/bluetooth_adapter.h"
@@ -34,23 +29,12 @@
#include "grit/browser_resources.h"
#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
-#include "components/user_manager/user_manager.h"
#endif
namespace {
-// Key name of the local device permit record dictonary in kEasyUnlockPairing.
-const char kKeyPermitAccess[] = "permitAccess";
-
-// Key name of the remote device list in kEasyUnlockPairing.
-const char kKeyDevices[] = "devices";
-
-// Key name of the phone public key in a device dictionary.
-const char kKeyPhoneId[] = "permitRecord.id";
-
extensions::ComponentLoader* GetComponentLoader(
content::BrowserContext* context) {
extensions::ExtensionSystem* extension_system =
@@ -129,7 +113,6 @@ class EasyUnlockService::PowerMonitor :
// chromeos::PowerManagerClient::Observer:
virtual void SuspendImminent() OVERRIDE {
service_->DisableAppIfLoaded();
- service_->screenlock_state_handler_.reset();
}
virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE {
@@ -145,7 +128,6 @@ class EasyUnlockService::PowerMonitor :
EasyUnlockService::EasyUnlockService(Profile* profile)
: profile_(profile),
bluetooth_detector_(new BluetoothDetector(this)),
- turn_off_flow_status_(IDLE),
weak_ptr_factory_(this) {
extensions::ExtensionSystem::Get(profile_)->ready().Post(
FROM_HERE,
@@ -177,24 +159,11 @@ void EasyUnlockService::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
-void EasyUnlockService::LaunchSetup() {
- ExtensionService* service =
- extensions::ExtensionSystem::Get(profile_)->extension_service();
- const extensions::Extension* extension =
- service->GetExtensionById(extension_misc::kEasyUnlockAppId, false);
-
- OpenApplication(AppLaunchParams(
- profile_, extension, extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW));
-}
-
bool EasyUnlockService::IsAllowed() {
-#if defined(OS_CHROMEOS)
- if (!user_manager::UserManager::Get()->IsLoggedInAsRegularUser())
- return false;
-
- if (!chromeos::ProfileHelper::IsPrimaryProfile(profile_))
+ if (!IsAllowedInternal())
return false;
+#if defined(OS_CHROMEOS)
if (!profile_->GetPrefs()->GetBoolean(prefs::kEasyUnlockAllowed))
return false;
@@ -221,60 +190,13 @@ EasyUnlockScreenlockStateHandler*
return NULL;
if (!screenlock_state_handler_) {
screenlock_state_handler_.reset(new EasyUnlockScreenlockStateHandler(
- ScreenlockBridge::GetAuthenticatedUserEmail(profile_),
- profile_->GetPrefs(),
+ GetUserEmail(),
+ GetType() == TYPE_REGULAR ? profile_->GetPrefs() : NULL,
ScreenlockBridge::Get()));
}
return screenlock_state_handler_.get();
}
-const base::DictionaryValue* EasyUnlockService::GetPermitAccess() const {
- const base::DictionaryValue* pairing_dict =
- profile_->GetPrefs()->GetDictionary(prefs::kEasyUnlockPairing);
- const base::DictionaryValue* permit_dict = NULL;
- if (pairing_dict &&
- pairing_dict->GetDictionary(kKeyPermitAccess, &permit_dict)) {
- return permit_dict;
- }
-
- return NULL;
-}
-
-void EasyUnlockService::SetPermitAccess(const base::DictionaryValue& permit) {
- DictionaryPrefUpdate pairing_update(profile_->GetPrefs(),
- prefs::kEasyUnlockPairing);
- pairing_update->SetWithoutPathExpansion(kKeyPermitAccess, permit.DeepCopy());
-}
-
-void EasyUnlockService::ClearPermitAccess() {
- DictionaryPrefUpdate pairing_update(profile_->GetPrefs(),
- prefs::kEasyUnlockPairing);
- pairing_update->RemoveWithoutPathExpansion(kKeyPermitAccess, NULL);
-}
-
-const base::ListValue* EasyUnlockService::GetRemoteDevices() const {
- const base::DictionaryValue* pairing_dict =
- profile_->GetPrefs()->GetDictionary(prefs::kEasyUnlockPairing);
- const base::ListValue* devices = NULL;
- if (pairing_dict && pairing_dict->GetList(kKeyDevices, &devices)) {
- return devices;
- }
-
- return NULL;
-}
-
-void EasyUnlockService::SetRemoteDevices(const base::ListValue& devices) {
- DictionaryPrefUpdate pairing_update(profile_->GetPrefs(),
- prefs::kEasyUnlockPairing);
- pairing_update->SetWithoutPathExpansion(kKeyDevices, devices.DeepCopy());
-}
-
-void EasyUnlockService::ClearRemoteDevices() {
- DictionaryPrefUpdate pairing_update(profile_->GetPrefs(),
- prefs::kEasyUnlockPairing);
- pairing_update->RemoveWithoutPathExpansion(kKeyDevices, NULL);
-}
-
void EasyUnlockService::AddObserver(EasyUnlockServiceObserver* observer) {
observers_.AddObserver(observer);
}
@@ -283,61 +205,6 @@ void EasyUnlockService::RemoveObserver(EasyUnlockServiceObserver* observer) {
observers_.RemoveObserver(observer);
}
-void EasyUnlockService::RunTurnOffFlow() {
- if (turn_off_flow_status_ == PENDING)
- return;
-
- SetTurnOffFlowStatus(PENDING);
-
- // Currently there should only be one registered phone.
- // TODO(xiyuan): Revisit this when server supports toggle for all or
- // there are multiple phones.
- const base::DictionaryValue* pairing_dict =
- profile_->GetPrefs()->GetDictionary(prefs::kEasyUnlockPairing);
- const base::ListValue* devices_list = NULL;
- const base::DictionaryValue* first_device = NULL;
- std::string phone_public_key;
- if (!pairing_dict || !pairing_dict->GetList(kKeyDevices, &devices_list) ||
- !devices_list || !devices_list->GetDictionary(0, &first_device) ||
- !first_device ||
- !first_device->GetString(kKeyPhoneId, &phone_public_key)) {
- LOG(WARNING) << "Bad easy unlock pairing data, wiping out local data";
- OnTurnOffFlowFinished(true);
- return;
- }
-
- turn_off_flow_.reset(new EasyUnlockToggleFlow(
- profile_,
- phone_public_key,
- false,
- base::Bind(&EasyUnlockService::OnTurnOffFlowFinished,
- base::Unretained(this))));
- turn_off_flow_->Start();
-}
-
-void EasyUnlockService::ResetTurnOffFlow() {
- turn_off_flow_.reset();
- SetTurnOffFlowStatus(IDLE);
-}
-
-void EasyUnlockService::Initialize() {
- registrar_.Init(profile_->GetPrefs());
- registrar_.Add(
- prefs::kEasyUnlockAllowed,
- base::Bind(&EasyUnlockService::OnPrefsChanged, base::Unretained(this)));
- OnPrefsChanged();
-
-#if defined(OS_CHROMEOS)
- // Only start Bluetooth detection for ChromeOS since the feature is
- // only offered on ChromeOS. Enabling this on non-ChromeOS platforms
- // previously introduced a performance regression: http://crbug.com/404482
- // Make sure not to reintroduce a performance regression if re-enabling on
- // additional platforms.
- // TODO(xiyuan): Revisit when non-chromeos platforms are supported.
- bluetooth_detector_->Initialize();
-#endif // defined(OS_CHROMEOS)
-}
-
void EasyUnlockService::LoadApp() {
DCHECK(IsAllowed());
@@ -358,9 +225,9 @@ void EasyUnlockService::LoadApp() {
if (!easy_unlock_path.empty()) {
extensions::ComponentLoader* loader = GetComponentLoader(profile_);
- if (!loader->Exists(extension_misc::kEasyUnlockAppId)) {
+ if (!loader->Exists(extension_misc::kEasyUnlockAppId))
loader->Add(IDR_EASY_UNLOCK_MANIFEST, easy_unlock_path);
- }
+
ExtensionService* extension_service =
extensions::ExtensionSystem::Get(profile_)->extension_service();
extension_service->EnableExtension(extension_misc::kEasyUnlockAppId);
@@ -369,6 +236,9 @@ void EasyUnlockService::LoadApp() {
}
void EasyUnlockService::DisableAppIfLoaded() {
+ // Make sure lock screen state set by the extension gets reset.
+ screenlock_state_handler_.reset();
+
extensions::ComponentLoader* loader = GetComponentLoader(profile_);
if (!loader->Exists(extension_misc::kEasyUnlockAppId))
return;
@@ -379,6 +249,18 @@ void EasyUnlockService::DisableAppIfLoaded() {
extensions::Extension::DISABLE_RELOAD);
}
+void EasyUnlockService::ReloadApp() {
+ // Make sure lock screen state set by the extension gets reset.
+ screenlock_state_handler_.reset();
+
+ if (GetComponentLoader(profile_)->Exists(extension_misc::kEasyUnlockAppId)) {
+ extensions::ExtensionSystem* extension_system =
+ extensions::ExtensionSystem::Get(profile_);
+ extension_system->extension_service()->ReloadExtension(
+ extension_misc::kEasyUnlockAppId);
+ }
+}
+
void EasyUnlockService::UpdateAppState() {
if (IsAllowed()) {
LoadApp();
@@ -389,48 +271,32 @@ void EasyUnlockService::UpdateAppState() {
#endif
} else {
DisableAppIfLoaded();
- // Reset the screenlock state handler to make sure Screenlock state set
- // by Easy Unlock app is reset.
- screenlock_state_handler_.reset();
-
#if defined(OS_CHROMEOS)
power_monitor_.reset();
#endif
}
}
-void EasyUnlockService::OnPrefsChanged() {
- UpdateAppState();
-}
-
-void EasyUnlockService::OnBluetoothAdapterPresentChanged() {
- UpdateAppState();
-}
-
-void EasyUnlockService::SetTurnOffFlowStatus(TurnOffFlowStatus status) {
- turn_off_flow_status_ = status;
+void EasyUnlockService::NotifyTurnOffOperationStatusChanged() {
FOR_EACH_OBSERVER(
EasyUnlockServiceObserver, observers_, OnTurnOffOperationStatusChanged());
}
-void EasyUnlockService::OnTurnOffFlowFinished(bool success) {
- turn_off_flow_.reset();
-
- if (!success) {
- SetTurnOffFlowStatus(FAIL);
- return;
- }
-
- ClearRemoteDevices();
- SetTurnOffFlowStatus(IDLE);
+void EasyUnlockService::Initialize() {
+ InitializeInternal();
- // Make sure lock screen state set by the extension gets reset.
- screenlock_state_handler_.reset();
+#if defined(OS_CHROMEOS)
+ // Only start Bluetooth detection for ChromeOS since the feature is
+ // only offered on ChromeOS. Enabling this on non-ChromeOS platforms
+ // previously introduced a performance regression: http://crbug.com/404482
+ // Make sure not to reintroduce a performance regression if re-enabling on
+ // additional platforms.
+ // TODO(xiyuan): Revisit when non-chromeos platforms are supported.
+ bluetooth_detector_->Initialize();
+#endif // defined(OS_CHROMEOS)
+}
- if (GetComponentLoader(profile_)->Exists(extension_misc::kEasyUnlockAppId)) {
- extensions::ExtensionSystem* extension_system =
- extensions::ExtensionSystem::Get(profile_);
- extension_system->extension_service()->ReloadExtension(
- extension_misc::kEasyUnlockAppId);
- }
+void EasyUnlockService::OnBluetoothAdapterPresentChanged() {
+ UpdateAppState();
}
+
« no previous file with comments | « chrome/browser/signin/easy_unlock_service.h ('k') | chrome/browser/signin/easy_unlock_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698