| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_ | 5 #ifndef COMPONENTS_HISTORY_CORE_BROWSER_URL_ROW_H_ |
| 6 #define CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_ | 6 #define COMPONENTS_HISTORY_CORE_BROWSER_URL_ROW_H_ |
| 7 | |
| 8 #include <deque> | |
| 9 #include <map> | |
| 10 #include <set> | |
| 11 #include <string> | |
| 12 #include <vector> | |
| 13 | 7 |
| 14 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 15 #include "base/containers/stack_container.h" | |
| 16 #include "base/memory/ref_counted_memory.h" | |
| 17 #include "base/memory/scoped_vector.h" | |
| 18 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 19 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| 20 #include "chrome/common/ref_counted_util.h" | |
| 21 #include "components/favicon_base/favicon_types.h" | |
| 22 #include "components/history/core/browser/keyword_id.h" | |
| 23 #include "components/history/core/common/thumbnail_score.h" | |
| 24 #include "components/query_parser/snippet.h" | 11 #include "components/query_parser/snippet.h" |
| 25 #include "content/public/common/page_transition_types.h" | |
| 26 #include "ui/gfx/image/image.h" | |
| 27 #include "ui/gfx/size.h" | |
| 28 #include "url/gurl.h" | 12 #include "url/gurl.h" |
| 29 | 13 |
| 30 class PageUsageData; | |
| 31 | |
| 32 namespace history { | 14 namespace history { |
| 33 | 15 |
| 34 // Forward declaration for friend statements. | |
| 35 class HistoryBackend; | |
| 36 class URLDatabase; | |
| 37 | |
| 38 // Structure to hold redirect lists for URLs. For a redirect chain | |
| 39 // A -> B -> C, and entry in the map would look like "A => {B -> C}". | |
| 40 typedef std::map<GURL, scoped_refptr<RefCountedVector<GURL> > > RedirectMap; | |
| 41 | |
| 42 // Container for a list of URLs. | |
| 43 typedef std::vector<GURL> RedirectList; | |
| 44 | |
| 45 typedef int64 FaviconBitmapID; // Identifier for a bitmap in a favicon. | |
| 46 typedef int64 SegmentID; // URL segments for the most visited view. | |
| 47 typedef int64 IconMappingID; // For page url and icon mapping. | |
| 48 | |
| 49 // Identifier for a context to scope page ids. | |
| 50 typedef const void* ContextID; | |
| 51 | |
| 52 // URLRow --------------------------------------------------------------------- | |
| 53 | |
| 54 typedef int64 URLID; | 16 typedef int64 URLID; |
| 55 | 17 |
| 56 // Holds all information globally associated with one URL (one row in the | 18 // Holds all information globally associated with one URL (one row in the |
| 57 // URL table). | 19 // URL table). |
| 58 // | 20 // |
| 59 // This keeps track of dirty bits, which are currently unused: | 21 // This keeps track of dirty bits, which are currently unused: |
| 60 // | 22 // |
| 61 // TODO(brettw) the dirty bits are broken in a number of respects. First, the | 23 // TODO(brettw) the dirty bits are broken in a number of respects. First, the |
| 62 // database will want to update them on a const object, so they need to be | 24 // database will want to update them on a const object, so they need to be |
| 63 // mutable. | 25 // mutable. |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 base::Time last_visit_; | 150 base::Time last_visit_; |
| 189 | 151 |
| 190 // Indicates this entry should now be shown in typical UI or queries, this | 152 // Indicates this entry should now be shown in typical UI or queries, this |
| 191 // is usually for subframes. | 153 // is usually for subframes. |
| 192 bool hidden_; | 154 bool hidden_; |
| 193 | 155 |
| 194 // We support the implicit copy constuctor and operator=. | 156 // We support the implicit copy constuctor and operator=. |
| 195 }; | 157 }; |
| 196 typedef std::vector<URLRow> URLRows; | 158 typedef std::vector<URLRow> URLRows; |
| 197 | 159 |
| 198 // The enumeration of all possible sources of visits is listed below. | |
| 199 // The source will be propagated along with a URL or a visit item | |
| 200 // and eventually be stored in the history database, | |
| 201 // visit_source table specifically. | |
| 202 // Different from page transition types, they describe the origins of visits. | |
| 203 // (Warning): Please don't change any existing values while it is ok to add | |
| 204 // new values when needed. | |
| 205 enum VisitSource { | |
| 206 SOURCE_SYNCED = 0, // Synchronized from somewhere else. | |
| 207 SOURCE_BROWSED = 1, // User browsed. | |
| 208 SOURCE_EXTENSION = 2, // Added by an extension. | |
| 209 SOURCE_FIREFOX_IMPORTED = 3, | |
| 210 SOURCE_IE_IMPORTED = 4, | |
| 211 SOURCE_SAFARI_IMPORTED = 5, | |
| 212 }; | |
| 213 | |
| 214 typedef int64 VisitID; | |
| 215 // Structure to hold the mapping between each visit's id and its source. | |
| 216 typedef std::map<VisitID, VisitSource> VisitSourceMap; | |
| 217 | |
| 218 // VisitRow ------------------------------------------------------------------- | |
| 219 | |
| 220 // Holds all information associated with a specific visit. A visit holds time | |
| 221 // and referrer information for one time a URL is visited. | |
| 222 class VisitRow { | |
| 223 public: | |
| 224 VisitRow(); | |
| 225 VisitRow(URLID arg_url_id, | |
| 226 base::Time arg_visit_time, | |
| 227 VisitID arg_referring_visit, | |
| 228 content::PageTransition arg_transition, | |
| 229 SegmentID arg_segment_id); | |
| 230 ~VisitRow(); | |
| 231 | |
| 232 // ID of this row (visit ID, used a a referrer for other visits). | |
| 233 VisitID visit_id; | |
| 234 | |
| 235 // Row ID into the URL table of the URL that this page is. | |
| 236 URLID url_id; | |
| 237 | |
| 238 base::Time visit_time; | |
| 239 | |
| 240 // Indicates another visit that was the referring page for this one. | |
| 241 // 0 indicates no referrer. | |
| 242 VisitID referring_visit; | |
| 243 | |
| 244 // A combination of bits from PageTransition. | |
| 245 content::PageTransition transition; | |
| 246 | |
| 247 // The segment id (see visitsegment_database.*). | |
| 248 // If 0, the segment id is null in the table. | |
| 249 SegmentID segment_id; | |
| 250 | |
| 251 // Record how much time a user has this visit starting from the user | |
| 252 // opened this visit to the user closed or ended this visit. | |
| 253 // This includes both active and inactive time as long as | |
| 254 // the visit was present. | |
| 255 base::TimeDelta visit_duration; | |
| 256 | |
| 257 // Compares two visits based on dates, for sorting. | |
| 258 bool operator<(const VisitRow& other) { | |
| 259 return visit_time < other.visit_time; | |
| 260 } | |
| 261 | |
| 262 // We allow the implicit copy constuctor and operator=. | |
| 263 }; | |
| 264 | |
| 265 // We pass around vectors of visits a lot | |
| 266 typedef std::vector<VisitRow> VisitVector; | |
| 267 | |
| 268 // The basic information associated with a visit (timestamp, type of visit), | |
| 269 // used by HistoryBackend::AddVisits() to create new visits for a URL. | |
| 270 typedef std::pair<base::Time, content::PageTransition> VisitInfo; | |
| 271 | |
| 272 // PageVisit ------------------------------------------------------------------ | |
| 273 | |
| 274 // Represents a simplified version of a visit for external users. Normally, | |
| 275 // views are only interested in the time, and not the other information | |
| 276 // associated with a VisitRow. | |
| 277 struct PageVisit { | |
| 278 URLID page_id; | |
| 279 base::Time visit_time; | |
| 280 }; | |
| 281 | |
| 282 // URLResult ------------------------------------------------------------------- | |
| 283 | 160 |
| 284 class URLResult : public URLRow { | 161 class URLResult : public URLRow { |
| 285 public: | 162 public: |
| 286 URLResult(); | 163 URLResult(); |
| 287 URLResult(const GURL& url, base::Time visit_time); | 164 URLResult(const GURL& url, base::Time visit_time); |
| 288 // Constructor that create a URLResult from the specified URL and title match | 165 // Constructor that create a URLResult from the specified URL and title match |
| 289 // positions from title_matches. | 166 // positions from title_matches. |
| 290 URLResult(const GURL& url, | 167 URLResult(const GURL& url, |
| 291 const query_parser::Snippet::MatchPositions& title_matches); | 168 const query_parser::Snippet::MatchPositions& title_matches); |
| 292 explicit URLResult(const URLRow& url_row); | 169 explicit URLResult(const URLRow& url_row); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 322 // These values are typically set by HistoryBackend. | 199 // These values are typically set by HistoryBackend. |
| 323 query_parser::Snippet snippet_; | 200 query_parser::Snippet snippet_; |
| 324 query_parser::Snippet::MatchPositions title_match_positions_; | 201 query_parser::Snippet::MatchPositions title_match_positions_; |
| 325 | 202 |
| 326 // Whether a managed user was blocked when attempting to visit this URL. | 203 // Whether a managed user was blocked when attempting to visit this URL. |
| 327 bool blocked_visit_; | 204 bool blocked_visit_; |
| 328 | 205 |
| 329 // We support the implicit copy constructor and operator=. | 206 // We support the implicit copy constructor and operator=. |
| 330 }; | 207 }; |
| 331 | 208 |
| 332 // QueryResults ---------------------------------------------------------------- | |
| 333 | |
| 334 // Encapsulates the results of a history query. It supports an ordered list of | |
| 335 // URLResult objects, plus an efficient way of looking up the index of each time | |
| 336 // a given URL appears in those results. | |
| 337 class QueryResults { | |
| 338 public: | |
| 339 typedef std::vector<URLResult*> URLResultVector; | |
| 340 | |
| 341 QueryResults(); | |
| 342 ~QueryResults(); | |
| 343 | |
| 344 // Indicates the first time that the query includes results for (queries are | |
| 345 // clipped at the beginning, so it will always include to the end of the time | |
| 346 // queried). | |
| 347 // | |
| 348 // If the number of results was clipped as a result of the max count, this | |
| 349 // will be the time of the first query returned. If there were fewer results | |
| 350 // than we were allowed to return, this represents the first date considered | |
| 351 // in the query (this will be before the first result if there was time | |
| 352 // queried with no results). | |
| 353 // | |
| 354 // TODO(brettw): bug 1203054: This field is not currently set properly! Do | |
| 355 // not use until the bug is fixed. | |
| 356 base::Time first_time_searched() const { return first_time_searched_; } | |
| 357 void set_first_time_searched(base::Time t) { first_time_searched_ = t; } | |
| 358 // Note: If you need end_time_searched, it can be added. | |
| 359 | |
| 360 void set_reached_beginning(bool reached) { reached_beginning_ = reached; } | |
| 361 bool reached_beginning() { return reached_beginning_; } | |
| 362 | |
| 363 size_t size() const { return results_.size(); } | |
| 364 bool empty() const { return results_.empty(); } | |
| 365 | |
| 366 URLResult& back() { return *results_.back(); } | |
| 367 const URLResult& back() const { return *results_.back(); } | |
| 368 | |
| 369 URLResult& operator[](size_t i) { return *results_[i]; } | |
| 370 const URLResult& operator[](size_t i) const { return *results_[i]; } | |
| 371 | |
| 372 URLResultVector::const_iterator begin() const { return results_.begin(); } | |
| 373 URLResultVector::const_iterator end() const { return results_.end(); } | |
| 374 URLResultVector::const_reverse_iterator rbegin() const { | |
| 375 return results_.rbegin(); | |
| 376 } | |
| 377 URLResultVector::const_reverse_iterator rend() const { | |
| 378 return results_.rend(); | |
| 379 } | |
| 380 | |
| 381 // Returns a pointer to the beginning of an array of all matching indices | |
| 382 // for entries with the given URL. The array will be |*num_matches| long. | |
| 383 // |num_matches| can be NULL if the caller is not interested in the number of | |
| 384 // results (commonly it will only be interested in the first one and can test | |
| 385 // the pointer for NULL). | |
| 386 // | |
| 387 // When there is no match, it will return NULL and |*num_matches| will be 0. | |
| 388 const size_t* MatchesForURL(const GURL& url, size_t* num_matches) const; | |
| 389 | |
| 390 // Swaps the current result with another. This allows ownership to be | |
| 391 // efficiently transferred without copying. | |
| 392 void Swap(QueryResults* other); | |
| 393 | |
| 394 // Adds the given result to the map, using swap() on the members to avoid | |
| 395 // copying (there are a lot of strings and vectors). This means the parameter | |
| 396 // object will be cleared after this call. | |
| 397 void AppendURLBySwapping(URLResult* result); | |
| 398 | |
| 399 // Removes all instances of the given URL from the result set. | |
| 400 void DeleteURL(const GURL& url); | |
| 401 | |
| 402 // Deletes the given range of items in the result set. | |
| 403 void DeleteRange(size_t begin, size_t end); | |
| 404 | |
| 405 private: | |
| 406 // Maps the given URL to a list of indices into results_ which identify each | |
| 407 // time an entry with that URL appears. Normally, each URL will have one or | |
| 408 // very few indices after it, so we optimize this to use statically allocated | |
| 409 // memory when possible. | |
| 410 typedef std::map<GURL, base::StackVector<size_t, 4> > URLToResultIndices; | |
| 411 | |
| 412 // Inserts an entry into the |url_to_results_| map saying that the given URL | |
| 413 // is at the given index in the results_. | |
| 414 void AddURLUsageAtIndex(const GURL& url, size_t index); | |
| 415 | |
| 416 // Adds |delta| to each index in url_to_results_ in the range [begin,end] | |
| 417 // (this is inclusive). This is used when inserting or deleting. | |
| 418 void AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta); | |
| 419 | |
| 420 base::Time first_time_searched_; | |
| 421 | |
| 422 // Whether the query reaches the beginning of the database. | |
| 423 bool reached_beginning_; | |
| 424 | |
| 425 // The ordered list of results. The pointers inside this are owned by this | |
| 426 // QueryResults object. | |
| 427 ScopedVector<URLResult> results_; | |
| 428 | |
| 429 // Maps URLs to entries in results_. | |
| 430 URLToResultIndices url_to_results_; | |
| 431 | |
| 432 DISALLOW_COPY_AND_ASSIGN(QueryResults); | |
| 433 }; | |
| 434 | |
| 435 // QueryOptions ---------------------------------------------------------------- | |
| 436 | |
| 437 struct QueryOptions { | |
| 438 QueryOptions(); | |
| 439 | |
| 440 // The time range to search for matches in. The beginning is inclusive and | |
| 441 // the ending is exclusive. Either one (or both) may be null. | |
| 442 // | |
| 443 // This will match only the one recent visit of a URL. For text search | |
| 444 // queries, if the URL was visited in the given time period, but has also | |
| 445 // been visited more recently than that, it will not be returned. When the | |
| 446 // text query is empty, this will return the most recent visit within the | |
| 447 // time range. | |
| 448 base::Time begin_time; | |
| 449 base::Time end_time; | |
| 450 | |
| 451 // Sets the query time to the last |days_ago| days to the present time. | |
| 452 void SetRecentDayRange(int days_ago); | |
| 453 | |
| 454 // The maximum number of results to return. The results will be sorted with | |
| 455 // the most recent first, so older results may not be returned if there is not | |
| 456 // enough room. When 0, this will return everything (the default). | |
| 457 int max_count; | |
| 458 | |
| 459 enum DuplicateHandling { | |
| 460 // Omit visits for which there is a more recent visit to the same URL. | |
| 461 // Each URL in the results will appear only once. | |
| 462 REMOVE_ALL_DUPLICATES, | |
| 463 | |
| 464 // Omit visits for which there is a more recent visit to the same URL on | |
| 465 // the same day. Each URL will appear no more than once per day, where the | |
| 466 // day is defined by the local timezone. | |
| 467 REMOVE_DUPLICATES_PER_DAY, | |
| 468 | |
| 469 // Return all visits without deduping. | |
| 470 KEEP_ALL_DUPLICATES | |
| 471 }; | |
| 472 | |
| 473 // Allows the caller to specify how duplicate URLs in the result set should | |
| 474 // be handled. The default is REMOVE_DUPLICATES. | |
| 475 DuplicateHandling duplicate_policy; | |
| 476 | |
| 477 // Helpers to get the effective parameters values, since a value of 0 means | |
| 478 // "unspecified". | |
| 479 int EffectiveMaxCount() const; | |
| 480 int64 EffectiveBeginTime() const; | |
| 481 int64 EffectiveEndTime() const; | |
| 482 }; | |
| 483 | |
| 484 // QueryURLResult ------------------------------------------------------------- | |
| 485 | |
| 486 // QueryURLResult encapsulate the result of a call to HistoryBackend::QueryURL. | |
| 487 struct QueryURLResult { | |
| 488 QueryURLResult(); | |
| 489 ~QueryURLResult(); | |
| 490 | |
| 491 // Indicates whether the call to HistoryBackend::QueryURL was successfull | |
| 492 // or not. If false, then both |row| and |visits| fields are undefined. | |
| 493 bool success; | |
| 494 URLRow row; | |
| 495 VisitVector visits; | |
| 496 }; | |
| 497 | |
| 498 // KeywordSearchTermVisit ----------------------------------------------------- | |
| 499 | |
| 500 // KeywordSearchTermVisit is returned from GetMostRecentKeywordSearchTerms. It | |
| 501 // gives the time and search term of the keyword visit. | |
| 502 struct KeywordSearchTermVisit { | |
| 503 KeywordSearchTermVisit(); | |
| 504 ~KeywordSearchTermVisit(); | |
| 505 | |
| 506 base::string16 term; // The search term that was used. | |
| 507 int visits; // The visit count. | |
| 508 base::Time time; // The time of the most recent visit. | |
| 509 }; | |
| 510 | |
| 511 // KeywordSearchTermRow -------------------------------------------------------- | |
| 512 | |
| 513 // Used for URLs that have a search term associated with them. | |
| 514 struct KeywordSearchTermRow { | |
| 515 KeywordSearchTermRow(); | |
| 516 ~KeywordSearchTermRow(); | |
| 517 | |
| 518 KeywordID keyword_id; // ID of the keyword. | |
| 519 URLID url_id; // ID of the url. | |
| 520 base::string16 term; // The search term that was used. | |
| 521 }; | |
| 522 | |
| 523 // MostVisitedURL -------------------------------------------------------------- | |
| 524 | |
| 525 // Holds the per-URL information of the most visited query. | |
| 526 struct MostVisitedURL { | |
| 527 MostVisitedURL(); | |
| 528 MostVisitedURL(const GURL& url, const base::string16& title); | |
| 529 MostVisitedURL(const GURL& url, | |
| 530 const base::string16& title, | |
| 531 const base::Time& last_forced_time); | |
| 532 ~MostVisitedURL(); | |
| 533 | |
| 534 GURL url; | |
| 535 base::string16 title; | |
| 536 | |
| 537 // If this is a URL for which we want to force a thumbnail, records the last | |
| 538 // time it was forced so we can evict it when more recent URLs are requested. | |
| 539 // If it's not a forced thumbnail, keep a time of 0. | |
| 540 base::Time last_forced_time; | |
| 541 | |
| 542 RedirectList redirects; | |
| 543 | |
| 544 bool operator==(const MostVisitedURL& other) { | |
| 545 return url == other.url; | |
| 546 } | |
| 547 }; | |
| 548 | |
| 549 // FilteredURL ----------------------------------------------------------------- | |
| 550 | |
| 551 // Holds the per-URL information of the filterd url query. | |
| 552 struct FilteredURL { | |
| 553 struct ExtendedInfo { | |
| 554 ExtendedInfo(); | |
| 555 // The absolute number of visits. | |
| 556 unsigned int total_visits; | |
| 557 // The number of visits, as seen by the Most Visited NTP pane. | |
| 558 unsigned int visits; | |
| 559 // The total number of seconds that the page was open. | |
| 560 int64 duration_opened; | |
| 561 // The time when the page was last visited. | |
| 562 base::Time last_visit_time; | |
| 563 }; | |
| 564 | |
| 565 FilteredURL(); | |
| 566 explicit FilteredURL(const PageUsageData& data); | |
| 567 ~FilteredURL(); | |
| 568 | |
| 569 GURL url; | |
| 570 base::string16 title; | |
| 571 double score; | |
| 572 ExtendedInfo extended_info; | |
| 573 }; | |
| 574 | |
| 575 // Navigation ----------------------------------------------------------------- | |
| 576 | |
| 577 // Marshalling structure for AddPage. | |
| 578 struct HistoryAddPageArgs { | |
| 579 // The default constructor is equivalent to: | |
| 580 // | |
| 581 // HistoryAddPageArgs( | |
| 582 // GURL(), base::Time(), NULL, 0, GURL(), | |
| 583 // history::RedirectList(), content::PAGE_TRANSITION_LINK, | |
| 584 // SOURCE_BROWSED, false) | |
| 585 HistoryAddPageArgs(); | |
| 586 HistoryAddPageArgs(const GURL& url, | |
| 587 base::Time time, | |
| 588 ContextID context_id, | |
| 589 int32 page_id, | |
| 590 const GURL& referrer, | |
| 591 const history::RedirectList& redirects, | |
| 592 content::PageTransition transition, | |
| 593 VisitSource source, | |
| 594 bool did_replace_entry); | |
| 595 ~HistoryAddPageArgs(); | |
| 596 | |
| 597 GURL url; | |
| 598 base::Time time; | |
| 599 | |
| 600 ContextID context_id; | |
| 601 int32 page_id; | |
| 602 | |
| 603 GURL referrer; | |
| 604 history::RedirectList redirects; | |
| 605 content::PageTransition transition; | |
| 606 VisitSource visit_source; | |
| 607 bool did_replace_entry; | |
| 608 }; | |
| 609 | |
| 610 // TopSites ------------------------------------------------------------------- | |
| 611 | |
| 612 typedef std::vector<MostVisitedURL> MostVisitedURLList; | |
| 613 typedef std::vector<FilteredURL> FilteredURLList; | |
| 614 | |
| 615 // Used by TopSites to store the thumbnails. | |
| 616 struct Images { | |
| 617 Images(); | |
| 618 ~Images(); | |
| 619 | |
| 620 scoped_refptr<base::RefCountedMemory> thumbnail; | |
| 621 ThumbnailScore thumbnail_score; | |
| 622 | |
| 623 // TODO(brettw): this will eventually store the favicon. | |
| 624 // scoped_refptr<base::RefCountedBytes> favicon; | |
| 625 }; | |
| 626 | |
| 627 struct MostVisitedURLWithRank { | |
| 628 MostVisitedURL url; | |
| 629 int rank; | |
| 630 }; | |
| 631 | |
| 632 typedef std::vector<MostVisitedURLWithRank> MostVisitedURLWithRankList; | |
| 633 | |
| 634 struct TopSitesDelta { | |
| 635 TopSitesDelta(); | |
| 636 ~TopSitesDelta(); | |
| 637 | |
| 638 MostVisitedURLList deleted; | |
| 639 MostVisitedURLWithRankList added; | |
| 640 MostVisitedURLWithRankList moved; | |
| 641 }; | |
| 642 | |
| 643 typedef std::map<GURL, scoped_refptr<base::RefCountedBytes> > URLToThumbnailMap; | |
| 644 | |
| 645 // Used when migrating most visited thumbnails out of history and into topsites. | |
| 646 struct ThumbnailMigration { | |
| 647 ThumbnailMigration(); | |
| 648 ~ThumbnailMigration(); | |
| 649 | |
| 650 MostVisitedURLList most_visited; | |
| 651 URLToThumbnailMap url_to_thumbnail_map; | |
| 652 }; | |
| 653 | |
| 654 typedef std::map<GURL, Images> URLToImagesMap; | |
| 655 | |
| 656 class MostVisitedThumbnails | |
| 657 : public base::RefCountedThreadSafe<MostVisitedThumbnails> { | |
| 658 public: | |
| 659 MostVisitedThumbnails(); | |
| 660 | |
| 661 MostVisitedURLList most_visited; | |
| 662 URLToImagesMap url_to_images_map; | |
| 663 | |
| 664 private: | |
| 665 friend class base::RefCountedThreadSafe<MostVisitedThumbnails>; | |
| 666 virtual ~MostVisitedThumbnails(); | |
| 667 | |
| 668 DISALLOW_COPY_AND_ASSIGN(MostVisitedThumbnails); | |
| 669 }; | |
| 670 | |
| 671 // Autocomplete thresholds ----------------------------------------------------- | |
| 672 | |
| 673 // Constants which specify, when considered altogether, 'significant' | |
| 674 // history items. These are used to filter out insignificant items | |
| 675 // for consideration as autocomplete candidates. | |
| 676 extern const int kLowQualityMatchTypedLimit; | |
| 677 extern const int kLowQualityMatchVisitLimit; | |
| 678 extern const int kLowQualityMatchAgeLimitInDays; | |
| 679 | |
| 680 // Returns the date threshold for considering an history item as significant. | |
| 681 base::Time AutocompleteAgeThreshold(); | |
| 682 | |
| 683 // Return true if |row| qualifies as an autocomplete candidate. If |time_cache| | |
| 684 // is_null() then this function determines a new time threshold each time it is | |
| 685 // called. Since getting system time can be costly (such as for cases where | |
| 686 // this function will be called in a loop over many history items), you can | |
| 687 // provide a non-null |time_cache| by simply initializing |time_cache| with | |
| 688 // AutocompleteAgeThreshold() (or any other desired time in the past). | |
| 689 bool RowQualifiesAsSignificant(const URLRow& row, const base::Time& threshold); | |
| 690 | |
| 691 // Favicons ------------------------------------------------------------------- | |
| 692 | |
| 693 // Used for the mapping between the page and icon. | |
| 694 struct IconMapping { | |
| 695 IconMapping(); | |
| 696 ~IconMapping(); | |
| 697 | |
| 698 // The unique id of the mapping. | |
| 699 IconMappingID mapping_id; | |
| 700 | |
| 701 // The url of a web page. | |
| 702 GURL page_url; | |
| 703 | |
| 704 // The unique id of the icon. | |
| 705 favicon_base::FaviconID icon_id; | |
| 706 | |
| 707 // The url of the icon. | |
| 708 GURL icon_url; | |
| 709 | |
| 710 // The type of icon. | |
| 711 favicon_base::IconType icon_type; | |
| 712 }; | |
| 713 | |
| 714 // Defines a favicon bitmap and its associated pixel size. | |
| 715 struct FaviconBitmapIDSize { | |
| 716 FaviconBitmapIDSize(); | |
| 717 ~FaviconBitmapIDSize(); | |
| 718 | |
| 719 // The unique id of the favicon bitmap. | |
| 720 FaviconBitmapID bitmap_id; | |
| 721 | |
| 722 // The pixel dimensions of the associated bitmap. | |
| 723 gfx::Size pixel_size; | |
| 724 }; | |
| 725 | |
| 726 // Defines a favicon bitmap stored in the history backend. | |
| 727 struct FaviconBitmap { | |
| 728 FaviconBitmap(); | |
| 729 ~FaviconBitmap(); | |
| 730 | |
| 731 // The unique id of the bitmap. | |
| 732 FaviconBitmapID bitmap_id; | |
| 733 | |
| 734 // The id of the favicon to which the bitmap belongs to. | |
| 735 favicon_base::FaviconID icon_id; | |
| 736 | |
| 737 // Time at which |bitmap_data| was last updated. | |
| 738 base::Time last_updated; | |
| 739 | |
| 740 // The bits of the bitmap. | |
| 741 scoped_refptr<base::RefCountedMemory> bitmap_data; | |
| 742 | |
| 743 // The pixel dimensions of bitmap_data. | |
| 744 gfx::Size pixel_size; | |
| 745 }; | |
| 746 | |
| 747 // Abbreviated information about a visit. | |
| 748 struct BriefVisitInfo { | |
| 749 URLID url_id; | |
| 750 base::Time time; | |
| 751 content::PageTransition transition; | |
| 752 }; | |
| 753 | |
| 754 // An observer of VisitDatabase. | |
| 755 class VisitDatabaseObserver { | |
| 756 public: | |
| 757 virtual ~VisitDatabaseObserver(); | |
| 758 virtual void OnAddVisit(const BriefVisitInfo& info) = 0; | |
| 759 }; | |
| 760 | |
| 761 struct ExpireHistoryArgs { | |
| 762 ExpireHistoryArgs(); | |
| 763 ~ExpireHistoryArgs(); | |
| 764 | |
| 765 // Sets |begin_time| and |end_time| to the beginning and end of the day (in | |
| 766 // local time) on which |time| occurs. | |
| 767 void SetTimeRangeForOneDay(base::Time time); | |
| 768 | |
| 769 std::set<GURL> urls; | |
| 770 base::Time begin_time; | |
| 771 base::Time end_time; | |
| 772 }; | |
| 773 | |
| 774 } // namespace history | 209 } // namespace history |
| 775 | 210 |
| 776 #endif // CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_ | 211 #endif // COMPONENTS_HISTORY_CORE_BROWSER_URL_ROW_H_ |
| OLD | NEW |