15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)#include "chrome/browser/history/history_backend.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/android/android_provider_backend.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidURLID HistoryBackend::InsertHistoryAndBookmark( 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryAndBookmarkRow& row) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidURLID id = 0; 14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = android_provider_backend_->InsertHistoryAndBookmark(row); 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return id; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidStatement* HistoryBackend::QueryHistoryAndBookmarks( 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<HistoryAndBookmarkRow::ColumnID>& projections, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& selection_args, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sort_order) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidStatement* statement = NULL; 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statement = android_provider_backend_->QueryHistoryAndBookmarks( 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) projections, selection, selection_args, sort_order); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return statement; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::UpdateHistoryAndBookmarks( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryAndBookmarkRow& row, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& selection_args) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = 0; 37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) { 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch android_provider_backend_->UpdateHistoryAndBookmarks( 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch row, selection, selection_args, &count); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return count; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteHistoryAndBookmarks( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& selection_args) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = 0; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (android_provider_backend_) { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) android_provider_backend_->DeleteHistoryAndBookmarks( 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) selection, selection_args, &count); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return count; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteHistory( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& selection_args) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = 0; 59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) { 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) android_provider_backend_->DeleteHistory(selection, selection_args, &count); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return count; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Statement ------------------------------------------------------------------- 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::MoveStatement(history::AndroidStatement* statement, 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int current_pos, 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int destination) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LE(-1, current_pos); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LE(-1, destination); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cur = current_pos; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current_pos > destination) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statement->statement()->Reset(false); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = -1; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; cur < destination; ++cur) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!statement->statement()->Step()) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return cur; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryBackend::CloseStatement(AndroidStatement* statement) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete statement; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Search Term ----------------------------------------------------------------- 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92116680a4aac90f2aa7413d9095a592090648e557Ben MurdochSearchTermID HistoryBackend::InsertSearchTerm(const SearchRow& row) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchTermID id = 0; 94b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = android_provider_backend_->InsertSearchTerm(row); 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return id; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::UpdateSearchTerms( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SearchRow& row, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16> selection_args) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = 0; 104b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) { 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch android_provider_backend_->UpdateSearchTerms( 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch row, selection, selection_args, &count); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return count; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteSearchTerms( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16> selection_args) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = 0; 115b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (android_provider_backend_) { 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) android_provider_backend_->DeleteSearchTerms( 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) selection, selection_args, &count); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return count; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidStatement* HistoryBackend::QuerySearchTerms( 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<SearchRow::ColumnID>& projections, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& selection, 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& selection_args, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sort_order) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidStatement* statement = NULL; 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (android_provider_backend_) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statement = android_provider_backend_->QuerySearchTerms(projections, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection, selection_args, sort_order); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return statement; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace history 136