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

Side by Side Diff: chrome/browser/chromeos/login/easy_unlock/easy_unlock_remove_keys_operation.cc

Issue 554043003: cros: Create cryptohome keys for Easy sign-in. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: support multiple get key op, create key first then trim extra, lazily create manager 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_remove_keys_oper ation.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_manager.h"
9 #include "chromeos/cryptohome/homedir_methods.h"
10 #include "google_apis/gaia/gaia_auth_util.h"
11
12 namespace chromeos {
13
14 EasyUnlockRemoveKeysOperation::EasyUnlockRemoveKeysOperation(
15 const UserContext& user_context,
16 size_t start_index,
17 const RemoveKeysCallback& callback)
18 : user_context_(user_context),
19 callback_(callback),
20 key_index_(start_index),
21 weak_ptr_factory_(this) {
22 // Must have the secret and callback.
23 DCHECK(!user_context_.GetKey()->GetSecret().empty());
24 DCHECK(!callback_.is_null());
25 }
26
27 EasyUnlockRemoveKeysOperation::~EasyUnlockRemoveKeysOperation() {
28 }
29
30 void EasyUnlockRemoveKeysOperation::Start() {
31 // TODO(xiyuan): Use ListKeyEx and delete by label instead of by index.
32 RemoveKey();
33 }
34
35 void EasyUnlockRemoveKeysOperation::RemoveKey() {
36 std::string canonicalized =
37 gaia::CanonicalizeEmail(user_context_.GetUserID());
38 cryptohome::Identification id(canonicalized);
39 const Key* const auth_key = user_context_.GetKey();
40 cryptohome::Authorization auth(auth_key->GetSecret(), auth_key->GetLabel());
41
42 cryptohome::HomedirMethods::GetInstance()->RemoveKeyEx(
43 id,
44 auth,
45 EasyUnlockKeyManager::GetKeyLabel(key_index_),
46 base::Bind(&EasyUnlockRemoveKeysOperation::OnKeyRemoved,
47 weak_ptr_factory_.GetWeakPtr()));
48 }
49
50 void EasyUnlockRemoveKeysOperation::OnKeyRemoved(
51 bool success,
52 cryptohome::MountError return_code) {
53 if (success) {
54 ++key_index_;
55 RemoveKey();
56 return;
57 }
58
59 // MOUNT_ERROR_KEY_FAILURE is considered as success. Other error codes are
60 // treated as failures.
61 if (return_code == cryptohome::MOUNT_ERROR_KEY_FAILURE) {
62 callback_.Run(true);
63 } else {
64 LOG(ERROR) << "Easy unlock remove keys operation failed, code="
65 << return_code;
66 callback_.Run(false);
67 }
68 }
69
70 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698