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)