blob: 4260aa9e1e739fc19be112c9ebc5dbe91d6150e5 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_BROWSER_SYNC_SIGNIN_CONFIRMATION_HELPER_H_
#define COMPONENTS_BROWSER_SYNC_SIGNIN_CONFIRMATION_HELPER_H_
#include <stddef.h>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/task/cancelable_task_tracker.h"
namespace base {
class SequencedTaskRunner;
}
namespace history {
class HistoryService;
class QueryResults;
}
namespace browser_sync {
// Helper class for sync signin to check some asynchronous conditions. Call
// either CheckHasHistory or CheckHasTypedUrls or both, and |return_result|
// will be called with true if either returns true, otherwise false.
class SigninConfirmationHelper {
public:
SigninConfirmationHelper(history::HistoryService* history_service,
base::OnceCallback<void(bool)> return_result);
// This helper checks if there are history entries in the history service.
void CheckHasHistory(int max_entries);
// This helper checks if there are typed URLs in the history service.
void CheckHasTypedURLs();
private:
// Deletes itself.
~SigninConfirmationHelper();
// Callback helper function for CheckHasHistory.
void OnHistoryQueryResults(size_t max_entries,
history::QueryResults* results);
// Posts the given result to the origin sequence.
void PostResult(bool result);
// Calls |return_result_| if |result| == true or if it's the result of the
// last pending check.
void ReturnResult(bool result);
// The task runner for the sequence this object was constructed on.
const scoped_refptr<base::SequencedTaskRunner> origin_sequence_;
// Pointer to the history service.
history::HistoryService* history_service_;
// Used for async tasks.
base::CancelableTaskTracker task_tracker_;
// Keep track of how many async requests are pending.
int pending_requests_;
// Callback to pass the result back to the caller.
base::OnceCallback<void(bool)> return_result_;
DISALLOW_COPY_AND_ASSIGN(SigninConfirmationHelper);
};
} // namespace browser_sync
#endif // COMPONENTS_BROWSER_SYNC_SIGNIN_CONFIRMATION_HELPER_H_