Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 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/history/android/android_history_provider_service.h"
      6 
      7 #include "chrome/browser/history/history_backend.h"
      8 #include "chrome/browser/history/history_service.h"
      9 #include "chrome/browser/history/history_service_factory.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 
     12 using history::HistoryBackend;
     13 
     14 AndroidHistoryProviderService::AndroidHistoryProviderService(Profile* profile)
     15     : profile_(profile) {
     16 }
     17 
     18 AndroidHistoryProviderService::~AndroidHistoryProviderService() {
     19 }
     20 
     21 AndroidHistoryProviderService::Handle
     22 AndroidHistoryProviderService::QueryHistoryAndBookmarks(
     23     const std::vector<history::HistoryAndBookmarkRow::ColumnID>& projections,
     24     const std::string& selection,
     25     const std::vector<string16>& selection_args,
     26     const std::string& sort_order,
     27     CancelableRequestConsumerBase* consumer,
     28     const QueryCallback& callback) {
     29   QueryRequest* request = new QueryRequest(callback);
     30   AddRequest(request, consumer);
     31   HistoryService* hs =
     32       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
     33   if (hs) {
     34     hs->Schedule(HistoryService::PRIORITY_NORMAL,
     35             &HistoryBackend::QueryHistoryAndBookmarks, NULL, request,
     36             projections, selection, selection_args, sort_order);
     37   } else {
     38     request->ForwardResultAsync(request->handle(), false, 0);
     39   }
     40   return request->handle();
     41 }
     42 
     43 AndroidHistoryProviderService::Handle
     44 AndroidHistoryProviderService::UpdateHistoryAndBookmarks(
     45     const history::HistoryAndBookmarkRow& row,
     46     const std::string& selection,
     47     const std::vector<string16>& selection_args,
     48     CancelableRequestConsumerBase* consumer,
     49     const UpdateCallback& callback) {
     50   UpdateRequest* request = new UpdateRequest(callback);
     51   AddRequest(request, consumer);
     52   HistoryService* hs =
     53       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
     54   if (hs) {
     55     hs->Schedule(HistoryService::PRIORITY_NORMAL,
     56             &HistoryBackend::UpdateHistoryAndBookmarks, NULL, request, row,
     57             selection, selection_args);
     58   } else {
     59     request->ForwardResultAsync(request->handle(), false, 0);
     60   }
     61   return request->handle();
     62 }
     63 
     64 AndroidHistoryProviderService::Handle
     65 AndroidHistoryProviderService::DeleteHistoryAndBookmarks(
     66     const std::string& selection,
     67     const std::vector<string16>& selection_args,
     68     CancelableRequestConsumerBase* consumer,
     69     const DeleteCallback& callback) {
     70   DeleteRequest* request = new DeleteRequest(callback);
     71   AddRequest(request, consumer);
     72   HistoryService* hs =
     73       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
     74   if (hs) {
     75     hs->Schedule(HistoryService::PRIORITY_NORMAL,
     76             &HistoryBackend::DeleteHistoryAndBookmarks, NULL, request,
     77             selection, selection_args);
     78   } else {
     79     request->ForwardResultAsync(request->handle(), false, 0);
     80   }
     81   return request->handle();
     82 }
     83 
     84 AndroidHistoryProviderService::Handle
     85 AndroidHistoryProviderService::InsertHistoryAndBookmark(
     86     const history::HistoryAndBookmarkRow& values,
     87     CancelableRequestConsumerBase* consumer,
     88     const InsertCallback& callback) {
     89   InsertRequest* request = new InsertRequest(callback);
     90   AddRequest(request, consumer);
     91   HistoryService* hs =
     92       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
     93   if (hs) {
     94     hs->Schedule(HistoryService::PRIORITY_NORMAL,
     95             &HistoryBackend::InsertHistoryAndBookmark, NULL, request, values);
     96   } else {
     97     request->ForwardResultAsync(request->handle(), false, 0);
     98   }
     99   return request->handle();
    100 }
    101 
    102 AndroidHistoryProviderService::Handle
    103 AndroidHistoryProviderService::DeleteHistory(
    104     const std::string& selection,
    105     const std::vector<string16>& selection_args,
    106     CancelableRequestConsumerBase* consumer,
    107     const DeleteCallback& callback) {
    108   DeleteRequest* request = new DeleteRequest(callback);
    109   AddRequest(request, consumer);
    110   HistoryService* hs =
    111       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    112   if (hs) {
    113     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    114             &HistoryBackend::DeleteHistory, NULL, request, selection,
    115             selection_args);
    116   } else {
    117     request->ForwardResultAsync(request->handle(), false, 0);
    118   }
    119   return request->handle();
    120 }
    121 
    122 AndroidHistoryProviderService::Handle
    123 AndroidHistoryProviderService::MoveStatement(
    124     history::AndroidStatement* statement,
    125     int current_pos,
    126     int destination,
    127     CancelableRequestConsumerBase* consumer,
    128     const MoveStatementCallback& callback) {
    129   MoveStatementRequest* request = new MoveStatementRequest(callback);
    130   AddRequest(request, consumer);
    131   HistoryService* hs =
    132       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    133   if (hs) {
    134     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    135             &HistoryBackend::MoveStatement, NULL, request, statement,
    136             current_pos, destination);
    137   } else {
    138     request->ForwardResultAsync(request->handle(), current_pos);
    139   }
    140   return request->handle();
    141 }
    142 
    143 void AndroidHistoryProviderService::CloseStatement(
    144     history::AndroidStatement* statement) {
    145   HistoryService* hs =
    146       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    147   if (hs) {
    148     hs->ScheduleAndForget(HistoryService::PRIORITY_NORMAL,
    149             &HistoryBackend::CloseStatement, statement);
    150   } else {
    151     delete statement;
    152   }
    153 }
    154 
    155 AndroidHistoryProviderService::Handle
    156 AndroidHistoryProviderService::InsertSearchTerm(
    157     const history::SearchRow& row,
    158     CancelableRequestConsumerBase* consumer,
    159     const InsertCallback& callback) {
    160   InsertRequest* request = new InsertRequest(callback);
    161   AddRequest(request, consumer);
    162   HistoryService* hs =
    163       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    164   if (hs) {
    165     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    166             &HistoryBackend::InsertSearchTerm, NULL, request, row);
    167   } else {
    168     request->ForwardResultAsync(request->handle(), false, 0);
    169   }
    170   return request->handle();
    171 }
    172 
    173 AndroidHistoryProviderService::Handle
    174 AndroidHistoryProviderService::UpdateSearchTerms(
    175     const history::SearchRow& row,
    176     const std::string& selection,
    177     const std::vector<string16>& selection_args,
    178     CancelableRequestConsumerBase* consumer,
    179     const UpdateCallback& callback) {
    180   UpdateRequest* request = new UpdateRequest(callback);
    181   AddRequest(request, consumer);
    182   HistoryService* hs =
    183       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    184   if (hs) {
    185     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    186             &HistoryBackend::UpdateSearchTerms, NULL, request, row, selection,
    187             selection_args);
    188   } else {
    189     request->ForwardResultAsync(request->handle(), false, 0);
    190   }
    191   return request->handle();
    192 }
    193 
    194 AndroidHistoryProviderService::Handle
    195 AndroidHistoryProviderService::DeleteSearchTerms(
    196     const std::string& selection,
    197     const std::vector<string16>& selection_args,
    198     CancelableRequestConsumerBase* consumer,
    199     const DeleteCallback& callback) {
    200   DeleteRequest* request = new DeleteRequest(callback);
    201   AddRequest(request, consumer);
    202   HistoryService* hs =
    203       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    204   if (hs) {
    205     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    206             &HistoryBackend::DeleteSearchTerms, NULL, request, selection,
    207             selection_args);
    208   } else {
    209     request->ForwardResultAsync(request->handle(), false, 0);
    210   }
    211   return request->handle();
    212 }
    213 
    214 AndroidHistoryProviderService::Handle
    215 AndroidHistoryProviderService::QuerySearchTerms(
    216     const std::vector<history::SearchRow::ColumnID>& projections,
    217     const std::string& selection,
    218     const std::vector<string16>& selection_args,
    219     const std::string& sort_order,
    220     CancelableRequestConsumerBase* consumer,
    221     const QueryCallback& callback) {
    222   QueryRequest* request = new QueryRequest(callback);
    223   AddRequest(request, consumer);
    224   HistoryService* hs =
    225       HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
    226   if (hs) {
    227     hs->Schedule(HistoryService::PRIORITY_NORMAL,
    228             &HistoryBackend::QuerySearchTerms, NULL, request, projections,
    229             selection, selection_args, sort_order);
    230   } else {
    231     request->ForwardResultAsync(request->handle(), false, 0);
    232   }
    233   return request->handle();
    234 }
    235