1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_types.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <limits> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace history { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URLRow ---------------------------------------------------------------------- 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow() { 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow(const GURL& url) : url_(url) { 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will not set the URL, so our initialization above will stay. 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow(const GURL& url, URLID id) : url_(url) { 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will not set the URL, so our initialization above will stay. 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will zero the id_, so set it here. 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_ = id; 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::~URLRow() { 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow& URLRow::operator=(const URLRow& other) { 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_ = other.id_; 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url_ = other.url_; 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick title_ = other.title_; 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_count_ = other.visit_count_; 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick typed_count_ = other.typed_count_; 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick last_visit_ = other.last_visit_; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick hidden_ = other.hidden_; 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *this; 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRow::Swap(URLRow* other) { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(id_, other->id_); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_.Swap(&other->url_); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title_.swap(other->title_); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visit_count_, other->visit_count_); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(typed_count_, other->typed_count_); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(last_visit_, other->last_visit_); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(hidden_, other->hidden_); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRow::Initialize() { 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch id_ = 0; 5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen visit_count_ = 0; 5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen typed_count_ = 0; 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen last_visit_ = base::Time(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch hidden_ = false; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// VisitRow -------------------------------------------------------------------- 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochVisitRow::VisitRow() 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : visit_id(0), 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(0), 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch referring_visit(0), 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transition(PageTransition::LINK), 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch segment_id(0), 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_indexed(false) { 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochVisitRow::VisitRow(URLID arg_url_id, 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time arg_visit_time, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VisitID arg_referring_visit, 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageTransition::Type arg_transition, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SegmentID arg_segment_id) 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : visit_id(0), 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(arg_url_id), 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visit_time(arg_visit_time), 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch referring_visit(arg_referring_visit), 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transition(arg_transition), 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch segment_id(arg_segment_id), 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_indexed(false) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickVisitRow::~VisitRow() { 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Favicons ------------------------------------------------------------------- 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenImportedFaviconUsage::ImportedFaviconUsage() { 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenImportedFaviconUsage::~ImportedFaviconUsage() { 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// StarredEntry ---------------------------------------------------------------- 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochStarredEntry::StarredEntry() 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : id(0), 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen parent_folder_id(0), 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen folder_id(0), 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visual_order(0), 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type(URL), 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(0) { 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickStarredEntry::~StarredEntry() { 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid StarredEntry::Swap(StarredEntry* other) { 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(id, other->id); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title.swap(other->title); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(date_added, other->date_added); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::swap(parent_folder_id, other->parent_folder_id); 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::swap(folder_id, other->folder_id); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visual_order, other->visual_order); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(type, other->type); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.Swap(&other->url); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(url_id, other->url_id); 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::swap(date_folder_modified, other->date_folder_modified); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URLResult ------------------------------------------------------------------- 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult() { 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1323345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult(const GURL& url, base::Time visit_time) 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : URLRow(url), 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_time_(visit_time) { 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult(const GURL& url, 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const Snippet::MatchPositions& title_matches) 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : URLRow(url) { 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick title_match_positions_ = title_matches; 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::~URLResult() { 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid URLResult::SwapResult(URLResult* other) { 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLRow::Swap(other); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visit_time_, other->visit_time_); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch snippet_.Swap(&other->snippet_); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title_match_positions_.swap(other->title_match_positions_); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// QueryResults ---------------------------------------------------------------- 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochQueryResults::QueryResults() : reached_beginning_(false) { 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochQueryResults::~QueryResults() { 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Free all the URL objects. 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch STLDeleteContainerPointers(results_.begin(), results_.end()); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst size_t* QueryResults::MatchesForURL(const GURL& url, 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t* num_matches) const { 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::const_iterator found = url_to_results_.find(url); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found == url_to_results_.end()) { 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (num_matches) 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *num_matches = 0; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // All entries in the map should have at least one index, otherwise it 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // shouldn't be in the map. 174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(!found->second->empty()); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (num_matches) 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *num_matches = found->second->size(); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return &found->second->front(); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::Swap(QueryResults* other) { 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(first_time_searched_, other->first_time_searched_); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(reached_beginning_, other->reached_beginning_); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.swap(other->results_); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_.swap(other->url_to_results_); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AppendURLBySwapping(URLResult* result) { 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLResult* new_result = new URLResult; 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new_result->SwapResult(result); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(new_result); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddURLUsageAtIndex(new_result->url(), results_.size() - 1); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AppendResultsBySwapping(QueryResults* other, 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool remove_dupes) { 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (remove_dupes) { 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete all entries in the other array that are already in this one. 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < results_.size(); i++) 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->DeleteURL(results_[i]->url()); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (first_time_searched_ > other->first_time_searched_) 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(first_time_searched_, other->first_time_searched_); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (reached_beginning_ != other->reached_beginning_) 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(reached_beginning_, other->reached_beginning_); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < other->results_.size(); i++) { 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Just transfer pointer ownership. 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(other->results_[i]); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddURLUsageAtIndex(results_.back()->url(), results_.size() - 1); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We just took ownership of all the results in the input vector. 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->results_.clear(); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->url_to_results_.clear(); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::DeleteURL(const GURL& url) { 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete all instances of this URL. We re-query each time since each 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // mutation will cause the indices to change. 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch while (const size_t* match_indices = MatchesForURL(url, NULL)) 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DeleteRange(*match_indices, *match_indices); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::DeleteRange(size_t begin, size_t end) { 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(begin <= end && begin < size() && end < size()); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First delete the pointers in the given range and store all the URLs that 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // were modified. We will delete references to these later. 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<GURL> urls_modified; 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = begin; i <= end; i++) { 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch urls_modified.insert(results_[i]->url()); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete results_[i]; 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_[i] = NULL; 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now just delete that range in the vector en masse (the STL ending is 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // exclusive, while ours is inclusive, hence the +1). 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.erase(results_.begin() + begin, results_.begin() + end + 1); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete the indicies referencing the deleted entries. 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (std::set<GURL>::const_iterator url = urls_modified.begin(); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url != urls_modified.end(); ++url) { 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::iterator found = url_to_results_.find(*url); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found == url_to_results_.end()) { 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch continue; 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Need a signed loop type since we do -- which may take us to -1. 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int match = 0; match < static_cast<int>(found->second->size()); 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match++) { 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found->second[match] >= begin && found->second[match] <= end) { 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Remove this referece from the list. 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found->second->erase(found->second->begin() + match); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match--; 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Clear out an empty lists if we just made one. 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found->second->empty()) 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_.erase(found); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Shift all other indices over to account for the removed ones. 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AdjustResultMap(end + 1, std::numeric_limits<size_t>::max(), 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch -static_cast<ptrdiff_t>(end - begin + 1)); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AddURLUsageAtIndex(const GURL& url, size_t index) { 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::iterator found = url_to_results_.find(url); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found != url_to_results_.end()) { 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL is already in the list, so we can just append the new index. 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found->second->push_back(index); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Need to add a new entry for this URL. 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StackVector<size_t, 4> new_list; 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_list->push_back(index); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_[url] = new_list; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta) { 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (URLToResultIndices::iterator i = url_to_results_.begin(); 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch i != url_to_results_.end(); ++i) { 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t match = 0; match < i->second->size(); match++) { 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t match_index = i->second[match]; 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (match_index >= begin && match_index <= end) 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch i->second[match] += delta; 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 297731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// QueryOptions ---------------------------------------------------------------- 298731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 299731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickQueryOptions::QueryOptions() : max_count(0) {} 300731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 301731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid QueryOptions::SetRecentDayRange(int days_ago) { 302731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick end_time = base::Time::Now(); 303731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick begin_time = end_time - base::TimeDelta::FromDays(days_ago); 304731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 305731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 306731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// KeywordSearchTermVisit ----------------------------------------------------- 307731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 308731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickKeywordSearchTermVisit::KeywordSearchTermVisit() {} 309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 310731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickKeywordSearchTermVisit::~KeywordSearchTermVisit() {} 311731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// KeywordSearchTermRow -------------------------------------------------------- 3133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 3143f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenKeywordSearchTermRow::KeywordSearchTermRow() : keyword_id(0), url_id(0) {} 3153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 3163f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenKeywordSearchTermRow::~KeywordSearchTermRow() {} 3173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 318731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// MostVisitedURL -------------------------------------------------------------- 319731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 320731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickMostVisitedURL::MostVisitedURL() {} 321731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 322731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickMostVisitedURL::MostVisitedURL(const GURL& in_url, 323731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& in_favicon_url, 324731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const string16& in_title) 325731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : url(in_url), 326731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick favicon_url(in_favicon_url), 327731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick title(in_title) { 328731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 329731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 330731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickMostVisitedURL::~MostVisitedURL() {} 331731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 332731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Images --------------------------------------------------------------------- 333731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 334731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickImages::Images() {} 335731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 336731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickImages::~Images() {} 337731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 33821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// TopSitesDelta -------------------------------------------------------------- 33921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 34021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTopSitesDelta::TopSitesDelta() {} 34121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 34221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTopSitesDelta::~TopSitesDelta() {} 34321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 344731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// HistoryAddPageArgs --------------------------------------------------------- 345731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHistoryAddPageArgs::HistoryAddPageArgs( 3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& arg_url, 3483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::Time arg_time, 3493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const void* arg_id_scope, 3503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int32 arg_page_id, 3513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& arg_referrer, 3523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const history::RedirectList& arg_redirects, 3533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PageTransition::Type arg_transition, 3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VisitSource arg_source, 3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool arg_did_replace_entry) 3563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : url(arg_url), 3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick time(arg_time), 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_scope(arg_id_scope), 3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick page_id(arg_page_id), 3603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick referrer(arg_referrer), 3613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick redirects(arg_redirects), 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick transition(arg_transition), 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_source(arg_source), 3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick did_replace_entry(arg_did_replace_entry) { 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 367731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickHistoryAddPageArgs::~HistoryAddPageArgs() {} 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHistoryAddPageArgs* HistoryAddPageArgs::Clone() const { 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return new HistoryAddPageArgs( 3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url, time, id_scope, page_id, referrer, redirects, transition, 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_source, did_replace_entry); 3733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 37521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenThumbnailMigration::ThumbnailMigration() {} 37621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 37721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenThumbnailMigration::~ThumbnailMigration() {} 37821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 37921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenMostVisitedThumbnails::MostVisitedThumbnails() {} 38021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 38121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenMostVisitedThumbnails::~MostVisitedThumbnails() {} 382513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 383dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Autocomplete thresholds ----------------------------------------------------- 384dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 385dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst int kLowQualityMatchTypedLimit = 1; 386dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst int kLowQualityMatchVisitLimit = 3; 387dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst int kLowQualityMatchAgeLimitInDays = 3; 388dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 389dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbase::Time AutocompleteAgeThreshold() { 390dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return (base::Time::Now() - 391dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::TimeDelta::FromDays(kLowQualityMatchAgeLimitInDays)); 392dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 393dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 394dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool RowQualifiesAsSignificant(const URLRow& row, 395dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const base::Time& threshold) { 396dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const base::Time& real_threshold = 397dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen threshold.is_null() ? AutocompleteAgeThreshold() : threshold; 398dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return (row.typed_count() > kLowQualityMatchTypedLimit) || 399dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen (row.visit_count() > kLowQualityMatchVisitLimit) || 400dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen (row.last_visit() >= real_threshold); 401dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 402dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// IconMapping ---------------------------------------------------------------- 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIconMapping::IconMapping() 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : mapping_id(0), 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon_id(0), 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon_type(INVALID_ICON) { 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIconMapping::~IconMapping() {} 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenFaviconData::FaviconData() 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : known_icon(false), 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expired(false), 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon_type(history::INVALID_ICON) { 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenFaviconData::~FaviconData() {} 421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool FaviconData::is_valid() { 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return known_icon && image_data.get() && image_data->size(); 424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace history 427