Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: chrome/browser/history/history_backend.h

Issue 10802066: Adds support for saving favicon size into history database. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as requested Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 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_BACKEND_H_ 5 #ifndef CHROME_BROWSER_HISTORY_HISTORY_BACKEND_H_
6 #define CHROME_BROWSER_HISTORY_HISTORY_BACKEND_H_ 6 #define CHROME_BROWSER_HISTORY_HISTORY_BACKEND_H_
7 7
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/file_path.h" 11 #include "base/file_path.h"
12 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
13 #include "base/memory/mru_cache.h" 13 #include "base/memory/mru_cache.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "chrome/browser/cancelable_request.h" 15 #include "chrome/browser/cancelable_request.h"
16 #include "chrome/browser/history/archived_database.h" 16 #include "chrome/browser/history/archived_database.h"
17 #include "chrome/browser/history/expire_history_backend.h" 17 #include "chrome/browser/history/expire_history_backend.h"
18 #include "chrome/browser/history/history_database.h" 18 #include "chrome/browser/history/history_database.h"
19 #include "chrome/browser/history/history_marshaling.h" 19 #include "chrome/browser/history/history_marshaling.h"
20 #include "chrome/browser/history/history_types.h" 20 #include "chrome/browser/history/history_types.h"
21 #include "chrome/browser/history/text_database_manager.h" 21 #include "chrome/browser/history/text_database_manager.h"
22 #include "chrome/browser/history/thumbnail_database.h" 22 #include "chrome/browser/history/thumbnail_database.h"
23 #include "chrome/browser/history/visit_tracker.h" 23 #include "chrome/browser/history/visit_tracker.h"
24 #include "chrome/browser/search_engines/template_url_id.h" 24 #include "chrome/browser/search_engines/template_url_id.h"
25 #include "sql/init_status.h" 25 #include "sql/init_status.h"
26 #include "ui/base/layout.h"
26 27
27 class BookmarkService; 28 class BookmarkService;
28 class TestingProfile; 29 class TestingProfile;
29 struct ThumbnailScore; 30 struct ThumbnailScore;
30 31
31 namespace content { 32 namespace content {
32 struct DownloadPersistentStoreInfo; 33 struct DownloadPersistentStoreInfo;
33 } 34 }
34 35
35 namespace history { 36 namespace history {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 // 242 //
242 // Exposed for testing reasons. 243 // Exposed for testing reasons.
243 void GetPageThumbnailDirectly( 244 void GetPageThumbnailDirectly(
244 const GURL& page_url, 245 const GURL& page_url,
245 scoped_refptr<base::RefCountedBytes>* data); 246 scoped_refptr<base::RefCountedBytes>* data);
246 247
247 void MigrateThumbnailsDatabase(); 248 void MigrateThumbnailsDatabase();
248 249
249 // Favicon ------------------------------------------------------------------- 250 // Favicon -------------------------------------------------------------------
250 251
251 void GetFavicon(scoped_refptr<GetFaviconRequest> request, 252 void GetFavicons(scoped_refptr<GetFaviconRequest> request,
252 const GURL& icon_url, 253 const std::vector<GURL>& icon_urls,
253 int icon_types); 254 int icon_types,
255 int desired_size_in_dip,
256 const std::vector<ui::ScaleFactor>& desired_scale_factors);
254 257
255 void GetFaviconForURL(scoped_refptr<GetFaviconRequest> request, 258 void GetFaviconsForURL(
256 const GURL& page_url, 259 scoped_refptr<GetFaviconRequest> request,
257 int icon_types); 260 const GURL& page_url,
261 int icon_types,
262 int desired_size_in_dip,
263 const std::vector<ui::ScaleFactor>& desired_scale_factors);
258 264
259 void GetFaviconForID(scoped_refptr<GetFaviconRequest> request, FaviconID id); 265 void GetFaviconForID(
266 scoped_refptr<GetFaviconRequest> request,
267 FaviconID favicon_id,
268 int desired_size_in_dip,
269 ui::ScaleFactor desired_scale_factor);
260 270
261 void SetFavicon(const GURL& page_url, 271 void UpdateFaviconMappingsAndFetch(
262 const GURL& icon_url, 272 scoped_refptr<GetFaviconRequest> request,
263 scoped_refptr<base::RefCountedMemory> data, 273 const GURL& page_url,
264 IconType icon_type); 274 const std::vector<GURL>& icon_urls,
275 int icon_types,
276 int desired_size_in_dip,
277 const std::vector<ui::ScaleFactor>& desired_scale_factors);
265 278
266 void UpdateFaviconMappingAndFetch(scoped_refptr<GetFaviconRequest> request, 279 void MergeFavicon(
267 const GURL& page_url, 280 const GURL& page_url,
268 const GURL& icon_url, 281 const GURL& icon_url,
269 IconType icon_type); 282 IconType icon_type,
283 scoped_refptr<base::RefCountedMemory> bitmap_data,
284 const gfx::Size& pixel_size);
270 285
271 void SetFaviconOutOfDateForPage(const GURL& page_url); 286 void SetFavicons(
287 const GURL& page_url,
288 IconType icon_type,
289 const std::vector<FaviconBitmapData>& favicon_bitmap_data,
290 const IconURLSizesMap& icon_url_sizes);
272 291
273 void CloneFavicon(const GURL& old_page_url, const GURL& new_page_url); 292 void SetFaviconsOutOfDateForPage(const GURL& page_url);
293
294 void CloneFavicons(const GURL& old_page_url, const GURL& new_page_url);
274 295
275 void SetImportedFavicons( 296 void SetImportedFavicons(
276 const std::vector<ImportedFaviconUsage>& favicon_usage); 297 const std::vector<ImportedFaviconUsage>& favicon_usage);
277 298
278 // Downloads ----------------------------------------------------------------- 299 // Downloads -----------------------------------------------------------------
279 300
280 void GetNextDownloadId(scoped_refptr<DownloadNextIdRequest> request); 301 void GetNextDownloadId(scoped_refptr<DownloadNextIdRequest> request);
281 void QueryDownloads(scoped_refptr<DownloadQueryRequest> request); 302 void QueryDownloads(scoped_refptr<DownloadQueryRequest> request);
282 void CleanUpInProgressEntries(); 303 void CleanUpInProgressEntries();
283 void UpdateDownload(const content::DownloadPersistentStoreInfo& data); 304 void UpdateDownload(const content::DownloadPersistentStoreInfo& data);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 friend class HistoryTest; // So the unit tests can poke our innards. 473 friend class HistoryTest; // So the unit tests can poke our innards.
453 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAll); 474 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAll);
454 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAllThenAddData); 475 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAllThenAddData);
455 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, ImportedFaviconsTest); 476 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, ImportedFaviconsTest);
456 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, URLsNoLongerBookmarked); 477 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, URLsNoLongerBookmarked);
457 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, StripUsernamePasswordTest); 478 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, StripUsernamePasswordTest);
458 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteThumbnailsDatabaseTest); 479 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteThumbnailsDatabaseTest);
459 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageVisitSource); 480 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageVisitSource);
460 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageArgsSource); 481 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageArgsSource);
461 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddVisitsSource); 482 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddVisitsSource);
483 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetMostRecentVisits);
462 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsSource); 484 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsSource);
463 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsTransitions); 485 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsTransitions);
464 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationVisitSource); 486 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationVisitSource);
465 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationIconMapping); 487 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationIconMapping);
466 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconMapping); 488 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
467 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddOrUpdateIconMapping); 489 SetFaviconMappingsForPageAndRedirects);
468 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetSameFaviconURLForTwoPages); 490 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
469 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetMostRecentVisits); 491 SetFaviconMappingsForPageDuplicates);
470 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconForURL); 492 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFavicons);
493 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
494 SetFaviconsSameFaviconURLForTwoPages);
495 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconsDeleteBitmaps);
496 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconsReplaceBitmapData);
497 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, IsMergeValid);
498 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MergeFaviconPageURLNotInDB);
499 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MergeFaviconPageURLInDB);
500 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
501 UpdateFaviconMappingsAndFetchMultipleIconTypes);
502 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBEmpty);
503 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
504 GetFaviconsFromDBSelectClosestMatch);
505 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBSingleIconURL);
506 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBIconType);
507 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBExpired);
471 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, 508 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
472 CloneFaviconIsRestrictedToSameDomain); 509 CloneFaviconIsRestrictedToSameDomain);
473 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, QueryFilteredURLs); 510 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, QueryFilteredURLs);
474 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, UpdateVisitDuration); 511 FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, UpdateVisitDuration);
475 512
476 friend class ::TestingProfile; 513 friend class ::TestingProfile;
477 514
478 // Computes the name of the specified database on disk. 515 // Computes the name of the specified database on disk.
479 FilePath GetThumbnailFileName() const; 516 FilePath GetThumbnailFileName() const;
480 517
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 // Update the segment information. This is called internally when a page is 609 // Update the segment information. This is called internally when a page is
573 // added. Return the segment id of the segment that has been updated. 610 // added. Return the segment id of the segment that has been updated.
574 SegmentID UpdateSegments(const GURL& url, 611 SegmentID UpdateSegments(const GURL& url,
575 VisitID from_visit, 612 VisitID from_visit,
576 VisitID visit_id, 613 VisitID visit_id,
577 content::PageTransition transition_type, 614 content::PageTransition transition_type,
578 const base::Time ts); 615 const base::Time ts);
579 616
580 // Favicons ------------------------------------------------------------------ 617 // Favicons ------------------------------------------------------------------
581 618
582 // Used by both UpdateFaviconMappingAndFetch and GetFavicon. 619 // Used by both UpdateFaviconMappingsAndFetch and GetFavicons.
583 // If page_url is non-null and SetFavicon has previously been invoked for 620 // If |page_url| is non-null, the icon urls for |page_url| (and all
584 // icon_url the favicon url for page_url (and all redirects) is set to 621 // redirects) are set to the subset of |icon_urls| for which icons are
585 // icon_url. 622 // already stored in the database.
586 // Only a single type can be given in icon_type when page_url is specified. 623 // |icon_types| can be multiple icon types only if |icon_types| is
587 void UpdateFaviconMappingAndFetchImpl( 624 // TOUCH_ICON | TOUCH_PRECOMPOSED_ICON.
625 // If multiple icon types are specified, |page_url| will be mapped to the
626 // icon URLs of the largest type available in the database.
627 void UpdateFaviconMappingsAndFetchImpl(
628 scoped_refptr<GetFaviconRequest> request,
588 const GURL* page_url, 629 const GURL* page_url,
589 const GURL& icon_url, 630 const std::vector<GURL>& icon_urls,
590 scoped_refptr<GetFaviconRequest> request, 631 int icon_types,
591 int icon_type); 632 int desired_size_in_dip,
633 const std::vector<ui::ScaleFactor>& desired_scale_factors);
592 634
593 // Sets the favicon url id for page_url to id. This will also broadcast 635 // Returns true if it is valid to map |page_url| to |icon_url| and set a
594 // notifications as necessary. 636 // favicon bitmap of |pixel_size| at |icon_url|. If the merge is valid,
595 void SetFaviconMapping(const GURL& page_url, 637 // |merge_pixel_size| is set to the pixel size to use for adding / setting
596 FaviconID id, 638 // the favicon bitmap for the merge to be valid.
597 IconType icon_type); 639 bool IsMergeValid(const GURL& page_url,
640 const GURL& icon_url,
641 IconType icon_type,
642 const gfx::Size& pixel_size,
643 gfx::Size* merge_pixe_size);
598 644
599 // Updates the FaviconID associated with the url of a page. If there is an 645 // Set the favicon bitmaps for the favicon at |icon_id|.
600 // existing mapping between |page_url| and |id| this does nothing and returns 646 void SetFaviconBitmaps(
601 // false. If the mapping needs to be added or updated, true is returned. If 647 FaviconID icon_id,
602 // there is an existing mapping but it does not map to |id|, then the |id| of 648 const std::vector<FaviconBitmapData>& favicon_bitmap_data);
603 // the replaced FaviconID is set in |replaced_icon_id|. 649
604 bool AddOrUpdateIconMapping(const GURL& page_url, 650 // Returns true if |favicon_bitmap_data| and |icon_url_sizes| passed to
605 FaviconID id, 651 // SetFavicons are valid.
michaelbai 2012/09/04 21:18:53 You may explain what the valid params for SetFavic
pkotwicz 2012/09/05 22:39:26 Done.
606 IconType icon_type, 652 bool ValidateSetFaviconsParams(
607 FaviconID* replaced_icon_id); 653 const std::vector<FaviconBitmapData>& favicon_bitmap_data,
654 const IconURLSizesMap& icon_url_sizes) const;
655
656 // Sets the sizes that the thumbnail database knows that the favicon at
657 // |icon_id| is available from the web. See history_types.h for a more
658 // detailed description of FaviconSizes.
659 void SetFaviconSizes(FaviconID icon_id, const FaviconSizes& sizes);
660
661 // Returns true if there are favicons for |page_url| and one of the types in
662 // |icon_types|.
663 // |favicon_bitmap_results| is set to the favicon bitmaps which most closely
664 // match |desired_dip_size| and |desired_scale_factors|.
665 // If |icon_types| contains multiple icon types and there are several matched
666 // icon types in the database, results will only returned for a single icon
667 // type in the priority of TOUCH_PRECOMPOSED_ICON, TOUCH_ICON, and FAVICON.
668 // See the comment for GetFaviconResultsForBestMatch() for more details on how
669 // |favicon_bitmap_results| is constructed.
670 // |icon_url_sizes| is set to a mapping of all the icon URLs which are mapped
671 // to |page_url| to the sizes of the favicon bitmaps available at each icon
672 // URL on the web.
673 bool GetFaviconsFromDB(
674 const GURL& page_url,
675 int icon_types,
676 const int desired_size_in_dip,
677 const std::vector<ui::ScaleFactor>& desired_scale_factors,
678 std::vector<FaviconBitmapResult>* favicon_bitmap_results,
679 IconURLSizesMap* icon_url_sizes);
680
681 // Returns the favicon bitmaps which most closly match |desired_dip_size| and
682 // |desired_scale_factors| in |favicon_bitmap_results|. Goodness is computed
683 // on a per favicon id basis, thus all of |favicon_bitmap_results| are
684 // guaranteed to be for the same FaviconID. |favicon_bitmap_results| may not
685 // contain all the favicon bitmaps for the selected FaviconID which are in
686 // the database.
687 // Returns true on success.
688 bool GetFaviconBitmapResultsForBestMatch(
689 const std::vector<FaviconID>& candidate_favicon_ids,
690 int desired_size_in_dip,
691 const std::vector<ui::ScaleFactor>& desired_scale_factors,
692 std::vector<FaviconBitmapResult>* favicon_bitmap_results);
693
694 // Build mapping of the icon URLs for |favicon_ids| to the sizes of the
695 // favicon bitmaps available at each icon URL on the web. Favicon bitmaps
696 // may not be cached in the thumbnail database for any of the sizes in the
697 // returned map. See history_types.h for a more detailed description of
698 // IconURLSizesMap.
699 // Returns true if map was successfully built.
700 bool BuildIconURLSizesMap(const std::vector<FaviconID>& favicon_ids,
701 IconURLSizesMap* icon_url_sizes);
702
703 // Define type used solely in SetFaviconMappingsForPageAndRedirects.
704 typedef std::map<GURL, FaviconID> IconURLFaviconIDMap;
705
706 // Maps the favicon ids in |icon_url_id_map| to |page_url| (and all
707 // redirects) for |icon_type|. This will also broadcast notifications as
708 // necessary.
709 void SetFaviconMappingsForPageAndRedirects(
710 const GURL& page_url,
711 IconType icon_type,
712 const IconURLFaviconIDMap& icon_url_id_map);
713
714 // Maps the favicon ids in |icon_url_id_map| to |page_url| for |icon_type|.
715 // Returns true if the function changed some of the mappings to |page_url|.
716 bool SetFaviconMappingsForPage(const GURL& page_url,
717 IconType icon_type,
718 const IconURLFaviconIDMap& icon_url_id_map);
608 719
609 // Generic stuff ------------------------------------------------------------- 720 // Generic stuff -------------------------------------------------------------
610 721
611 // Processes the next scheduled HistoryDBTask, scheduling this method 722 // Processes the next scheduled HistoryDBTask, scheduling this method
612 // to be invoked again if there are more tasks that need to run. 723 // to be invoked again if there are more tasks that need to run.
613 void ProcessDBTaskImpl(); 724 void ProcessDBTaskImpl();
614 725
615 // Release all tasks in history_db_tasks_ and clears it. 726 // Release all tasks in history_db_tasks_ and clears it.
616 void ReleaseDBTasks(); 727 void ReleaseDBTasks();
617 728
(...skipping 23 matching lines...) Expand all
641 // set of URLs in the URL table (these should correspond to the bookmarked 752 // set of URLs in the URL table (these should correspond to the bookmarked
642 // URLs). 753 // URLs).
643 // 754 //
644 // The IDs of the URLs may change. 755 // The IDs of the URLs may change.
645 bool ClearAllMainHistory(const URLRows& kept_urls); 756 bool ClearAllMainHistory(const URLRows& kept_urls);
646 757
647 // Returns the BookmarkService, blocking until it is loaded. This may return 758 // Returns the BookmarkService, blocking until it is loaded. This may return
648 // NULL during testing. 759 // NULL during testing.
649 BookmarkService* GetBookmarkService(); 760 BookmarkService* GetBookmarkService();
650 761
651 // If there is a favicon for |page_url| and one of the types in |icon_types|,
652 // |favicon| is set appropriately and true is returned.
653 bool GetFaviconFromDB(
654 const GURL& page_url,
655 int icon_types,
656 std::vector<FaviconBitmapResult>* favicon_bitmap_results);
657
658 // Get favicon by the given |favicon_id|, the |favicon| is set appropriately
659 // and true if returned on success, otherwise false is returned.
660 bool GetFaviconFromDB(
661 FaviconID favicon_id,
662 std::vector<FaviconBitmapResult>* favicon_bitmap_results);
663
664 // Notify any observers of an addition to the visit database. 762 // Notify any observers of an addition to the visit database.
665 void NotifyVisitObservers(const VisitRow& visit); 763 void NotifyVisitObservers(const VisitRow& visit);
666 764
667 // Data ---------------------------------------------------------------------- 765 // Data ----------------------------------------------------------------------
668 766
669 // Delegate. See the class definition above for more information. This will 767 // Delegate. See the class definition above for more information. This will
670 // be NULL before Init is called and after Cleanup, but is guaranteed 768 // be NULL before Init is called and after Cleanup, but is guaranteed
671 // non-NULL in between. 769 // non-NULL in between.
672 scoped_ptr<Delegate> delegate_; 770 scoped_ptr<Delegate> delegate_;
673 771
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 // Used to provide the Android ContentProvider APIs. 857 // Used to provide the Android ContentProvider APIs.
760 scoped_ptr<AndroidProviderBackend> android_provider_backend_; 858 scoped_ptr<AndroidProviderBackend> android_provider_backend_;
761 #endif 859 #endif
762 860
763 DISALLOW_COPY_AND_ASSIGN(HistoryBackend); 861 DISALLOW_COPY_AND_ASSIGN(HistoryBackend);
764 }; 862 };
765 863
766 } // namespace history 864 } // namespace history
767 865
768 #endif // CHROME_BROWSER_HISTORY_HISTORY_BACKEND_H_ 866 #endif // CHROME_BROWSER_HISTORY_HISTORY_BACKEND_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698