history_types.cc revision 513209b27ff55e2841eac0e4120199c23acce758
13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 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 Murdochusing base::Time; 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing base::TimeDelta; 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace history { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URLRow ---------------------------------------------------------------------- 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow() { 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow(const GURL& url) : url_(url) { 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will not set the URL, so our initialization above will stay. 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::URLRow(const GURL& url, URLID id) : url_(url) { 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will not set the URL, so our initialization above will stay. 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Initialize(); 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initialize will zero the id_, so set it here. 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_ = id; 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow::~URLRow() { 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRow& URLRow::operator=(const URLRow& other) { 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_ = other.id_; 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url_ = other.url_; 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick title_ = other.title_; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_count_ = other.visit_count_; 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick typed_count_ = other.typed_count_; 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick last_visit_ = other.last_visit_; 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick hidden_ = other.hidden_; 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick favicon_id_ = other.favicon_id_; 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *this; 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRow::Swap(URLRow* other) { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(id_, other->id_); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_.Swap(&other->url_); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title_.swap(other->title_); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visit_count_, other->visit_count_); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(typed_count_, other->typed_count_); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(last_visit_, other->last_visit_); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(hidden_, other->hidden_); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(favicon_id_, other->favicon_id_); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRow::Initialize() { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch id_ = 0; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visit_count_ = false; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_count_ = false; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch last_visit_ = Time(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch hidden_ = false; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch favicon_id_ = 0; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// VisitRow -------------------------------------------------------------------- 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochVisitRow::VisitRow() 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : visit_id(0), 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(0), 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch referring_visit(0), 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transition(PageTransition::LINK), 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch segment_id(0), 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_indexed(false) { 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochVisitRow::VisitRow(URLID arg_url_id, 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Time arg_visit_time, 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VisitID arg_referring_visit, 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageTransition::Type arg_transition, 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SegmentID arg_segment_id) 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : visit_id(0), 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(arg_url_id), 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visit_time(arg_visit_time), 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch referring_visit(arg_referring_visit), 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transition(arg_transition), 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch segment_id(arg_segment_id), 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_indexed(false) { 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickVisitRow::~VisitRow() { 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Favicons ------------------------------------------------------------------- 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 100731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickImportedFavIconUsage::ImportedFavIconUsage() { 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 103731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickImportedFavIconUsage::~ImportedFavIconUsage() { 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// StarredEntry ---------------------------------------------------------------- 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochStarredEntry::StarredEntry() 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : id(0), 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch parent_group_id(0), 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch group_id(0), 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visual_order(0), 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type(URL), 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_id(0) { 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickStarredEntry::~StarredEntry() { 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid StarredEntry::Swap(StarredEntry* other) { 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(id, other->id); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title.swap(other->title); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(date_added, other->date_added); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(parent_group_id, other->parent_group_id); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(group_id, other->group_id); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visual_order, other->visual_order); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(type, other->type); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.Swap(&other->url); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(url_id, other->url_id); 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(date_group_modified, other->date_group_modified); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URLResult ------------------------------------------------------------------- 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult() { 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult(const GURL& url, base::Time visit_time) 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : URLRow(url), 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_time_(visit_time) { 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::URLResult(const GURL& url, 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const Snippet::MatchPositions& title_matches) 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : URLRow(url) { 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick title_match_positions_ = title_matches; 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLResult::~URLResult() { 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLResult::Swap(URLResult* other) { 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLRow::Swap(other); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(visit_time_, other->visit_time_); 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch snippet_.Swap(&other->snippet_); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch title_match_positions_.swap(other->title_match_positions_); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// QueryResults ---------------------------------------------------------------- 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochQueryResults::QueryResults() : reached_beginning_(false) { 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochQueryResults::~QueryResults() { 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Free all the URL objects. 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch STLDeleteContainerPointers(results_.begin(), results_.end()); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst size_t* QueryResults::MatchesForURL(const GURL& url, 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t* num_matches) const { 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::const_iterator found = url_to_results_.find(url); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found == url_to_results_.end()) { 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (num_matches) 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *num_matches = 0; 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // All entries in the map should have at least one index, otherwise it 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // shouldn't be in the map. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(found->second->size() > 0); 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (num_matches) 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *num_matches = found->second->size(); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return &found->second->front(); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::Swap(QueryResults* other) { 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(first_time_searched_, other->first_time_searched_); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(reached_beginning_, other->reached_beginning_); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.swap(other->results_); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_.swap(other->url_to_results_); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AppendURLBySwapping(URLResult* result) { 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLResult* new_result = new URLResult; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_result->Swap(result); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(new_result); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddURLUsageAtIndex(new_result->url(), results_.size() - 1); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AppendResultsBySwapping(QueryResults* other, 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool remove_dupes) { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (remove_dupes) { 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete all entries in the other array that are already in this one. 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < results_.size(); i++) 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->DeleteURL(results_[i]->url()); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (first_time_searched_ > other->first_time_searched_) 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(first_time_searched_, other->first_time_searched_); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (reached_beginning_ != other->reached_beginning_) 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::swap(reached_beginning_, other->reached_beginning_); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < other->results_.size(); i++) { 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Just transfer pointer ownership. 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(other->results_[i]); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddURLUsageAtIndex(results_.back()->url(), results_.size() - 1); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We just took ownership of all the results in the input vector. 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->results_.clear(); 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch other->url_to_results_.clear(); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::DeleteURL(const GURL& url) { 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete all instances of this URL. We re-query each time since each 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // mutation will cause the indices to change. 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch while (const size_t* match_indices = MatchesForURL(url, NULL)) 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DeleteRange(*match_indices, *match_indices); 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::DeleteRange(size_t begin, size_t end) { 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(begin <= end && begin < size() && end < size()); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First delete the pointers in the given range and store all the URLs that 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // were modified. We will delete references to these later. 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<GURL> urls_modified; 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = begin; i <= end; i++) { 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch urls_modified.insert(results_[i]->url()); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete results_[i]; 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_[i] = NULL; 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now just delete that range in the vector en masse (the STL ending is 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // exclusive, while ours is inclusive, hence the +1). 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.erase(results_.begin() + begin, results_.begin() + end + 1); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete the indicies referencing the deleted entries. 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (std::set<GURL>::const_iterator url = urls_modified.begin(); 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url != urls_modified.end(); ++url) { 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::iterator found = url_to_results_.find(*url); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found == url_to_results_.end()) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch continue; 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Need a signed loop type since we do -- which may take us to -1. 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int match = 0; match < static_cast<int>(found->second->size()); 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match++) { 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found->second[match] >= begin && found->second[match] <= end) { 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Remove this referece from the list. 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found->second->erase(found->second->begin() + match); 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match--; 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Clear out an empty lists if we just made one. 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found->second->empty()) 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_.erase(found); 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Shift all other indices over to account for the removed ones. 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AdjustResultMap(end + 1, std::numeric_limits<size_t>::max(), 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch -static_cast<ptrdiff_t>(end - begin + 1)); 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AddURLUsageAtIndex(const GURL& url, size_t index) { 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLToResultIndices::iterator found = url_to_results_.find(url); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found != url_to_results_.end()) { 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL is already in the list, so we can just append the new index. 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found->second->push_back(index); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Need to add a new entry for this URL. 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StackVector<size_t, 4> new_list; 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_list->push_back(index); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_to_results_[url] = new_list; 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid QueryResults::AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta) { 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (URLToResultIndices::iterator i = url_to_results_.begin(); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch i != url_to_results_.end(); ++i) { 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t match = 0; match < i->second->size(); match++) { 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t match_index = i->second[match]; 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (match_index >= begin && match_index <= end) 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch i->second[match] += delta; 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// QueryOptions ---------------------------------------------------------------- 304731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 305731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickQueryOptions::QueryOptions() : max_count(0) {} 306731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 307731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid QueryOptions::SetRecentDayRange(int days_ago) { 308731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick end_time = base::Time::Now(); 309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick begin_time = end_time - base::TimeDelta::FromDays(days_ago); 310731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 311731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 312731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// KeywordSearchTermVisit ----------------------------------------------------- 313731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 314731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickKeywordSearchTermVisit::KeywordSearchTermVisit() {} 315731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 316731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickKeywordSearchTermVisit::~KeywordSearchTermVisit() {} 317731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 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 338731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// HistoryAddPageArgs --------------------------------------------------------- 339731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHistoryAddPageArgs::HistoryAddPageArgs( 3413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& arg_url, 3423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::Time arg_time, 3433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const void* arg_id_scope, 3443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int32 arg_page_id, 3453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& arg_referrer, 3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const history::RedirectList& arg_redirects, 3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PageTransition::Type arg_transition, 3483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VisitSource arg_source, 3493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool arg_did_replace_entry) 3503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : url(arg_url), 3513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick time(arg_time), 3523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick id_scope(arg_id_scope), 3533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick page_id(arg_page_id), 3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick referrer(arg_referrer), 3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick redirects(arg_redirects), 3563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick transition(arg_transition), 3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_source(arg_source), 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick did_replace_entry(arg_did_replace_entry) { 3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 361731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickHistoryAddPageArgs::~HistoryAddPageArgs() {} 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHistoryAddPageArgs* HistoryAddPageArgs::Clone() const { 3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return new HistoryAddPageArgs( 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url, time, id_scope, page_id, referrer, redirects, transition, 3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick visit_source, did_replace_entry); 3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 369513209b27ff55e2841eac0e4120199c23acce758Ben MurdochMostVisitedThumbnails::MostVisitedThumbnails() { 370513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace history 373