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