15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_CONSUMER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_CONSUMER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "base/task/cancelable_task_tracker.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct PasswordForm;
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace password_manager {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Reads from the PasswordStore are done asynchronously on a separate
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread. PasswordStoreConsumer provides the virtual callback method, which is
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// guaranteed to be executed on this (the UI) thread. It also provides the
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// base::CancelableTaskTracker member, which cancels any outstanding
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tasks upon destruction.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PasswordStoreConsumer {
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public:
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PasswordStoreConsumer();
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Called when the request is finished. If there are no results, it is called
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // with an empty vector.
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Note: The implementation owns all PasswordForms in the vector.
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void OnGetPasswordStoreResults(
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const std::vector<autofill::PasswordForm*>& results) = 0;
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The base::CancelableTaskTracker can be used for cancelling the
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // tasks associated with the consumer.
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::CancelableTaskTracker* cancelable_task_tracker() {
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return &cancelable_task_tracker_;
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::WeakPtr<PasswordStoreConsumer> GetWeakPtr() {
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return weak_ptr_factory_.GetWeakPtr();
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~PasswordStoreConsumer();
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::CancelableTaskTracker cancelable_task_tracker_;
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::WeakPtrFactory<PasswordStoreConsumer> weak_ptr_factory_;
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace password_manager
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_CONSUMER_H_
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)