root/chrome/browser/history/android/android_history_provider_service.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (c) 2012 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 CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_PROVIDER_SERVICE_H_
#define CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_PROVIDER_SERVICE_H_

#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "chrome/browser/common/cancelable_request.h"
#include "chrome/browser/history/android/android_history_types.h"
#include "sql/statement.h"

class Profile;

// This class provides the methods to communicate with history backend service
// for the Android content provider.
// The methods of this class must run on the UI thread to cooperate with the
// BookmarkModel task posted in the DB thread.
class AndroidHistoryProviderService : public CancelableRequestProvider {
 public:
  explicit AndroidHistoryProviderService(Profile* profile);
  virtual ~AndroidHistoryProviderService();

  // The callback definitions ------------------------------------------------
  typedef base::Callback<void(
                    Handle,                // handle
                    bool,                  // true if the query succeeded.
                    history::AndroidStatement*)>  // the result of query
                    QueryCallback;
  typedef CancelableRequest<QueryCallback> QueryRequest;

  typedef base::Callback<void(
                    Handle,                // handle
                    bool,                  // true if the update succeeded.
                    int)>                  // the number of row updated.
                    UpdateCallback;
  typedef CancelableRequest<UpdateCallback> UpdateRequest;

  typedef base::Callback<void(
                    Handle,                // handle
                    bool,                  // true if the insert succeeded.
                    int64)>                // the id of inserted row.
                    InsertCallback;
  typedef CancelableRequest<InsertCallback> InsertRequest;

  typedef base::Callback<void(
                    Handle,                // handle
                    bool,                  // true if the deletion succeeded.
                    int)>                  // the number of row deleted.
                    DeleteCallback;
  typedef CancelableRequest<DeleteCallback> DeleteRequest;

  typedef base::Callback<void(
                    Handle,                // handle
                    int)>                  // the new position.
                    MoveStatementCallback;
  typedef CancelableRequest<MoveStatementCallback> MoveStatementRequest;

  // History and Bookmarks ----------------------------------------------------
  //
  // Runs the given query on history backend, and invokes the |callback| to
  // return the result.
  //
  // |projections| is the vector of the result columns.
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for WHERE clause.
  // |sort_order| is the SQL ORDER clause.
  Handle QueryHistoryAndBookmarks(
      const std::vector<history::HistoryAndBookmarkRow::ColumnID>& projections,
      const std::string& selection,
      const std::vector<base::string16>& selection_args,
      const std::string& sort_order,
      CancelableRequestConsumerBase* consumer,
      const QueryCallback& callback);

  // Runs the given update and the number of the row updated is returned to the
  // |callback| on success.
  //
  // |row| is the value to update.
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for the WHERE clause.
  Handle UpdateHistoryAndBookmarks(
      const history::HistoryAndBookmarkRow& row,
      const std::string& selection,
      const std::vector<base::string16>& selection_args,
      CancelableRequestConsumerBase* consumer,
      const UpdateCallback& callback);

  // Deletes the specified rows and invokes the |callback| to return the number
  // of row deleted on success.
  //
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for the WHERE clause.
  //
  // if |selection| is empty all history and bookmarks are deleted.
  Handle DeleteHistoryAndBookmarks(
      const std::string& selection,
      const std::vector<base::string16>& selection_args,
      CancelableRequestConsumerBase* consumer,
      const DeleteCallback& callback);

  // Inserts the given values into history backend, and invokes the |callback|
  // to return the result.
  Handle InsertHistoryAndBookmark(const history::HistoryAndBookmarkRow& values,
                                  CancelableRequestConsumerBase* consumer,
                                  const InsertCallback& callback);

  // Deletes the matched history and invokes |callback| to return the number of
  // the row deleted from the |callback|.
  Handle DeleteHistory(const std::string& selection,
                       const std::vector<base::string16>& selection_args,
                       CancelableRequestConsumerBase* consumer,
                       const DeleteCallback& callback);

  // Statement ----------------------------------------------------------------
  // Moves the statement's current row from |current_pos| to |destination| in DB
  // thread. The new position is returned to the callback. The result supplied
  // the callback is constrained by the number of rows might.
  Handle MoveStatement(history::AndroidStatement* statement,
                       int current_pos,
                       int destination,
                       CancelableRequestConsumerBase* consumer,
                       const MoveStatementCallback& callback);

  // Closes the statement in db thread. The AndroidHistoryProviderService takes
  // the ownership of |statement|.
  void CloseStatement(history::AndroidStatement* statement);

  // Search term --------------------------------------------------------------
  // Inserts the given values and returns the SearchTermID of the inserted row
  // from the |callback| on success.
  Handle InsertSearchTerm(const history::SearchRow& row,
                          CancelableRequestConsumerBase* consumer,
                          const InsertCallback& callback);

  // Runs the given update and returns the number of the update rows from the
  // |callback| on success.
  //
  // |row| is the value need to update.
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for WHERE clause.
  Handle UpdateSearchTerms(const history::SearchRow& row,
                           const std::string& selection,
                           const std::vector<base::string16>& selection_args,
                           CancelableRequestConsumerBase* consumer,
                           const UpdateCallback& callback);

  // Deletes the matched rows and the number of deleted rows is returned from
  // the |callback| on success.
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for WHERE clause.
  //
  // if |selection| is empty all search be deleted.
  Handle DeleteSearchTerms(const std::string& selection,
                           const std::vector<base::string16>& selection_args,
                           CancelableRequestConsumerBase* consumer,
                           const DeleteCallback& callback);

  // Returns the result of the given query from the |callback|.
  // |projections| specifies the result columns, can not be empty, otherwise
  // NULL is returned.
  // |selection| is the SQL WHERE clause without 'WHERE'.
  // |selection_args| is the arguments for WHERE clause.
  // |sort_order| the SQL ORDER clause.
  Handle QuerySearchTerms(
      const std::vector<history::SearchRow::ColumnID>& projections,
      const std::string& selection,
      const std::vector<base::string16>& selection_args,
      const std::string& sort_order,
      CancelableRequestConsumerBase* consumer,
      const QueryCallback& callback);

 private:
  Profile* profile_;

  DISALLOW_COPY_AND_ASSIGN(AndroidHistoryProviderService);
};

#endif  // CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_PROVIDER_SERVICE_H_

/* [<][>][^][v][top][bottom][index][help] */