Chromium Code Reviews| Index: chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc |
| diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc |
| index d38cf288a3f6112aed53a9c59d2bf552573c830c..d443c5bc185399165667496fef5e941cdee68b57 100644 |
| --- a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc |
| +++ b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.h" |
| #include "base/memory/ptr_util.h" |
| +#include "chrome/browser/chromeos/login/quick_unlock/pin_backend.h" |
| #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" |
| #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" |
| #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| @@ -45,16 +46,22 @@ const int kMinLengthForNonWeakPin = 2; |
| const char* kMostCommonPins[] = {"1212", "1004", "2000", "6969", |
| "1122", "1313", "2001", "1010"}; |
| -// Returns the active set of quick unlock modes. |
| -QuickUnlockModeList ComputeActiveModes(Profile* profile) { |
| - QuickUnlockModeList modes; |
| - |
| - chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = |
| - chromeos::quick_unlock::QuickUnlockFactory::GetForProfile(profile); |
| - if (quick_unlock_storage && quick_unlock_storage->pin_storage()->IsPinSet()) |
| - modes.push_back(quick_unlock_private::QUICK_UNLOCK_MODE_PIN); |
| +using ActiveModeCallback = base::Callback<void(const QuickUnlockModeList&)>; |
| - return modes; |
| +// Returns the active set of quick unlock modes. |
| +void ComputeActiveModes(Profile* profile, const ActiveModeCallback& result) { |
| + user_manager::User* user = |
| + chromeos::ProfileHelper::Get()->GetUserByProfile(profile); |
| + chromeos::quick_unlock::PinBackend::IsSet( |
| + user->GetAccountId(), |
| + base::Bind( |
| + [](const ActiveModeCallback& result, bool is_set) { |
| + QuickUnlockModeList modes; |
| + if (is_set) |
| + modes.push_back(quick_unlock_private::QUICK_UNLOCK_MODE_PIN); |
| + result.Run(modes); |
| + }, |
| + result)); |
| } |
| // Returns true if |a| and |b| contain the same elements. The elements do not |
| @@ -197,9 +204,17 @@ QuickUnlockPrivateGetActiveModesFunction:: |
| ExtensionFunction::ResponseAction |
| QuickUnlockPrivateGetActiveModesFunction::Run() { |
| - const QuickUnlockModeList modes = |
| - ComputeActiveModes(chrome_details_.GetProfile()); |
| - return RespondNow(ArgumentList(GetActiveModes::Results::Create(modes))); |
| + ComputeActiveModes( |
| + chrome_details_.GetProfile(), |
| + base::Bind(&QuickUnlockPrivateGetActiveModesFunction::OnGetActiveModes, |
| + this)); |
| + |
| + return RespondLater(); |
| +} |
| + |
| +void QuickUnlockPrivateGetActiveModesFunction::OnGetActiveModes( |
| + const std::vector<api::quick_unlock_private::QuickUnlockMode>& modes) { |
| + Respond(ArgumentList(GetActiveModes::Results::Create(modes))); |
| } |
| // quickUnlockPrivate.checkCredential |
| @@ -362,12 +377,18 @@ void QuickUnlockPrivateSetModesFunction::OnAuthFailure( |
| void QuickUnlockPrivateSetModesFunction::OnAuthSuccess( |
| const chromeos::UserContext& user_context) { |
| - const QuickUnlockModeList initial_modes = |
| - ComputeActiveModes(chrome_details_.GetProfile()); |
| - ApplyModeChange(); |
| - const QuickUnlockModeList updated_modes = |
| - ComputeActiveModes(chrome_details_.GetProfile()); |
| + ComputeActiveModes( |
| + chrome_details_.GetProfile(), |
| + base::Bind( |
| + &QuickUnlockPrivateSetModesFunction::OnGetActiveModesAfterAuthSuccess, |
| + base::Unretained(this), user_context)); |
| +} |
| +void QuickUnlockPrivateSetModesFunction::OnGetActiveModesAfterAuthSuccess( |
| + const chromeos::UserContext& user_context, |
| + const std::vector<api::quick_unlock_private::QuickUnlockMode>& |
| + initial_modes) { |
| + std::vector<QuickUnlockMode> updated_modes = ApplyModeChange(user_context); |
| if (!AreModesEqual(initial_modes, updated_modes)) |
| FireEvent(updated_modes); |
| @@ -375,7 +396,9 @@ void QuickUnlockPrivateSetModesFunction::OnAuthSuccess( |
| Release(); // Balanced in Run(). |
| } |
| -void QuickUnlockPrivateSetModesFunction::ApplyModeChange() { |
| +std::vector<QuickUnlockMode> |
| +QuickUnlockPrivateSetModesFunction::ApplyModeChange( |
| + const chromeos::UserContext& user_context) { |
| // This function is setup so it is easy to add another quick unlock mode while |
| // following all of the invariants, which are: |
| // |
| @@ -383,6 +406,8 @@ void QuickUnlockPrivateSetModesFunction::ApplyModeChange() { |
| // 2: If a credential for an unlock type is empty, it should not be touched. |
| // 3: Otherwise, the credential should be set to the new value. |
| + std::vector<QuickUnlockMode> newly_active_modes; |
| + |
| bool update_pin = true; |
| std::string pin_credential; |
| @@ -394,22 +419,25 @@ void QuickUnlockPrivateSetModesFunction::ApplyModeChange() { |
| if (mode == quick_unlock_private::QUICK_UNLOCK_MODE_PIN) { |
| update_pin = !credential.empty(); |
| pin_credential = credential; |
| + newly_active_modes.push_back(QuickUnlockMode::QUICK_UNLOCK_MODE_PIN); |
| } |
| } |
| // Apply changes. |
| if (update_pin) { |
| - Profile* profile = chrome_details_.GetProfile(); |
| - chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = |
| - chromeos::quick_unlock::QuickUnlockFactory::GetForProfile(profile); |
| - |
| if (pin_credential.empty()) { |
| - quick_unlock_storage->pin_storage()->RemovePin(); |
| + chromeos::quick_unlock::PinBackend::Remove(user_context); |
| } else { |
| - quick_unlock_storage->pin_storage()->SetPin(pin_credential); |
| + chromeos::quick_unlock::PinBackend::Set(user_context, pin_credential); |
| + |
| + Profile* profile = chrome_details_.GetProfile(); |
| + chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = |
| + chromeos::quick_unlock::QuickUnlockFactory::GetForProfile(profile); |
| quick_unlock_storage->MarkStrongAuth(); |
| } |
| } |
| + |
| + return newly_active_modes; |
|
achuithb
2017/05/13 01:01:57
So that can only be empty or have the QUICK_UNLOCK
jdufault
2017/06/06 18:17:05
Yep.
|
| } |
| // Triggers a quickUnlockPrivate.onActiveModesChanged change event. |