OLD | NEW |
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 #include "chrome/browser/history/history_backend.h" | 5 #include "chrome/browser/history/history_backend.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <list> | 9 #include <list> |
10 #include <map> | 10 #include <map> |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "chrome/browser/history/history_db_task.h" | 30 #include "chrome/browser/history/history_db_task.h" |
31 #include "chrome/browser/history/history_notifications.h" | 31 #include "chrome/browser/history/history_notifications.h" |
32 #include "chrome/browser/history/in_memory_history_backend.h" | 32 #include "chrome/browser/history/in_memory_history_backend.h" |
33 #include "chrome/browser/history/page_usage_data.h" | 33 #include "chrome/browser/history/page_usage_data.h" |
34 #include "chrome/browser/history/top_sites.h" | 34 #include "chrome/browser/history/top_sites.h" |
35 #include "chrome/browser/history/typed_url_syncable_service.h" | 35 #include "chrome/browser/history/typed_url_syncable_service.h" |
36 #include "chrome/browser/history/visit_filter.h" | 36 #include "chrome/browser/history/visit_filter.h" |
37 #include "chrome/common/chrome_constants.h" | 37 #include "chrome/common/chrome_constants.h" |
38 #include "chrome/common/importer/imported_favicon_usage.h" | 38 #include "chrome/common/importer/imported_favicon_usage.h" |
39 #include "chrome/common/url_constants.h" | 39 #include "chrome/common/url_constants.h" |
40 #include "components/bookmarks/browser/bookmark_service.h" | |
41 #include "components/favicon_base/select_favicon_frames.h" | 40 #include "components/favicon_base/select_favicon_frames.h" |
| 41 #include "components/history/core/browser/history_client.h" |
42 #include "grit/chromium_strings.h" | 42 #include "grit/chromium_strings.h" |
43 #include "grit/generated_resources.h" | 43 #include "grit/generated_resources.h" |
44 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 44 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
45 #include "sql/error_delegate_util.h" | 45 #include "sql/error_delegate_util.h" |
46 #include "url/gurl.h" | 46 #include "url/gurl.h" |
47 | 47 |
48 #if defined(OS_ANDROID) | 48 #if defined(OS_ANDROID) |
49 #include "chrome/browser/history/android/android_provider_backend.h" | 49 #include "chrome/browser/history/android/android_provider_backend.h" |
50 #endif | 50 #endif |
51 | 51 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 | 157 |
158 ~CommitLaterTask() {} | 158 ~CommitLaterTask() {} |
159 | 159 |
160 scoped_refptr<HistoryBackend> history_backend_; | 160 scoped_refptr<HistoryBackend> history_backend_; |
161 }; | 161 }; |
162 | 162 |
163 // HistoryBackend -------------------------------------------------------------- | 163 // HistoryBackend -------------------------------------------------------------- |
164 | 164 |
165 HistoryBackend::HistoryBackend(const base::FilePath& history_dir, | 165 HistoryBackend::HistoryBackend(const base::FilePath& history_dir, |
166 Delegate* delegate, | 166 Delegate* delegate, |
167 BookmarkService* bookmark_service) | 167 HistoryClient* history_client) |
168 : delegate_(delegate), | 168 : delegate_(delegate), |
169 history_dir_(history_dir), | 169 history_dir_(history_dir), |
170 scheduled_kill_db_(false), | 170 scheduled_kill_db_(false), |
171 expirer_(this, bookmark_service), | 171 expirer_(this, history_client), |
172 recent_redirects_(kMaxRedirectCount), | 172 recent_redirects_(kMaxRedirectCount), |
173 backend_destroy_message_loop_(NULL), | 173 backend_destroy_message_loop_(NULL), |
174 segment_queried_(false), | 174 segment_queried_(false), |
175 bookmark_service_(bookmark_service) { | 175 history_client_(history_client) { |
176 } | 176 } |
177 | 177 |
178 HistoryBackend::~HistoryBackend() { | 178 HistoryBackend::~HistoryBackend() { |
179 DCHECK(!scheduled_commit_.get()) << "Deleting without cleanup"; | 179 DCHECK(!scheduled_commit_.get()) << "Deleting without cleanup"; |
180 ReleaseDBTasks(); | 180 ReleaseDBTasks(); |
181 | 181 |
182 #if defined(OS_ANDROID) | 182 #if defined(OS_ANDROID) |
183 // Release AndroidProviderBackend before other objects. | 183 // Release AndroidProviderBackend before other objects. |
184 android_provider_backend_.reset(); | 184 android_provider_backend_.reset(); |
185 #endif | 185 #endif |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 // Get the first item in our database. | 658 // Get the first item in our database. |
659 db_->GetStartDate(&first_recorded_time_); | 659 db_->GetStartDate(&first_recorded_time_); |
660 | 660 |
661 // Start expiring old stuff. | 661 // Start expiring old stuff. |
662 expirer_.StartArchivingOldStuff(TimeDelta::FromDays(kArchiveDaysThreshold)); | 662 expirer_.StartArchivingOldStuff(TimeDelta::FromDays(kArchiveDaysThreshold)); |
663 | 663 |
664 #if defined(OS_ANDROID) | 664 #if defined(OS_ANDROID) |
665 if (thumbnail_db_) { | 665 if (thumbnail_db_) { |
666 android_provider_backend_.reset(new AndroidProviderBackend( | 666 android_provider_backend_.reset(new AndroidProviderBackend( |
667 GetAndroidCacheFileName(), db_.get(), thumbnail_db_.get(), | 667 GetAndroidCacheFileName(), db_.get(), thumbnail_db_.get(), |
668 bookmark_service_, delegate_.get())); | 668 history_client_, delegate_.get())); |
669 } | 669 } |
670 #endif | 670 #endif |
671 | 671 |
672 HISTOGRAM_TIMES("History.InitTime", | 672 HISTOGRAM_TIMES("History.InitTime", |
673 TimeTicks::Now() - beginning_time); | 673 TimeTicks::Now() - beginning_time); |
674 } | 674 } |
675 | 675 |
676 void HistoryBackend::OnMemoryPressure( | 676 void HistoryBackend::OnMemoryPressure( |
677 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { | 677 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { |
678 bool trim_aggressively = memory_pressure_level == | 678 bool trim_aggressively = memory_pressure_level == |
(...skipping 1355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2034 // TODO(pkotwicz): Pass in real pixel size. | 2034 // TODO(pkotwicz): Pass in real pixel size. |
2035 favicon_id = thumbnail_db_->AddFavicon( | 2035 favicon_id = thumbnail_db_->AddFavicon( |
2036 favicon_usage[i].favicon_url, | 2036 favicon_usage[i].favicon_url, |
2037 favicon_base::FAVICON, | 2037 favicon_base::FAVICON, |
2038 new base::RefCountedBytes(favicon_usage[i].png_data), | 2038 new base::RefCountedBytes(favicon_usage[i].png_data), |
2039 now, | 2039 now, |
2040 gfx::Size()); | 2040 gfx::Size()); |
2041 } | 2041 } |
2042 | 2042 |
2043 // Save the mapping from all the URLs to the favicon. | 2043 // Save the mapping from all the URLs to the favicon. |
2044 BookmarkService* bookmark_service = GetBookmarkService(); | 2044 HistoryClient* history_client = GetHistoryClient(); |
2045 for (std::set<GURL>::const_iterator url = favicon_usage[i].urls.begin(); | 2045 for (std::set<GURL>::const_iterator url = favicon_usage[i].urls.begin(); |
2046 url != favicon_usage[i].urls.end(); ++url) { | 2046 url != favicon_usage[i].urls.end(); ++url) { |
2047 URLRow url_row; | 2047 URLRow url_row; |
2048 if (!db_->GetRowForURL(*url, &url_row)) { | 2048 if (!db_->GetRowForURL(*url, &url_row)) { |
2049 // If the URL is present as a bookmark, add the url in history to | 2049 // If the URL is present as a bookmark, add the url in history to |
2050 // save the favicon mapping. This will match with what history db does | 2050 // save the favicon mapping. This will match with what history db does |
2051 // for regular bookmarked URLs with favicons - when history db is | 2051 // for regular bookmarked URLs with favicons - when history db is |
2052 // cleaned, we keep an entry in the db with 0 visits as long as that | 2052 // cleaned, we keep an entry in the db with 0 visits as long as that |
2053 // url is bookmarked. | 2053 // url is bookmarked. |
2054 if (bookmark_service && bookmark_service_->IsBookmarked(*url)) { | 2054 if (history_client && history_client->IsBookmarked(*url)) { |
2055 URLRow url_info(*url); | 2055 URLRow url_info(*url); |
2056 url_info.set_visit_count(0); | 2056 url_info.set_visit_count(0); |
2057 url_info.set_typed_count(0); | 2057 url_info.set_typed_count(0); |
2058 url_info.set_last_visit(base::Time()); | 2058 url_info.set_last_visit(base::Time()); |
2059 url_info.set_hidden(false); | 2059 url_info.set_hidden(false); |
2060 db_->AddURL(url_info); | 2060 db_->AddURL(url_info); |
2061 thumbnail_db_->AddIconMapping(*url, favicon_id); | 2061 thumbnail_db_->AddIconMapping(*url, favicon_id); |
2062 favicons_changed.insert(*url); | 2062 favicons_changed.insert(*url); |
2063 } | 2063 } |
2064 } else { | 2064 } else { |
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2767 // 2. Delete the original tables. Since tables can not share pages, we know | 2767 // 2. Delete the original tables. Since tables can not share pages, we know |
2768 // that any data we don't want to keep is now in an unused page. | 2768 // that any data we don't want to keep is now in an unused page. |
2769 // 3. Renaming the temporary tables to match the original. | 2769 // 3. Renaming the temporary tables to match the original. |
2770 // 4. Vacuuming the database to delete the unused pages. | 2770 // 4. Vacuuming the database to delete the unused pages. |
2771 // | 2771 // |
2772 // Since we are likely to have very few bookmarks and their dependencies | 2772 // Since we are likely to have very few bookmarks and their dependencies |
2773 // compared to all history, this is also much faster than just deleting from | 2773 // compared to all history, this is also much faster than just deleting from |
2774 // the original tables directly. | 2774 // the original tables directly. |
2775 | 2775 |
2776 // Get the bookmarked URLs. | 2776 // Get the bookmarked URLs. |
2777 std::vector<BookmarkService::URLAndTitle> starred_urls; | 2777 std::vector<URLAndTitle> starred_urls; |
2778 BookmarkService* bookmark_service = GetBookmarkService(); | 2778 HistoryClient* history_client = GetHistoryClient(); |
2779 if (bookmark_service) | 2779 if (history_client) |
2780 bookmark_service_->GetBookmarks(&starred_urls); | 2780 history_client->GetBookmarks(&starred_urls); |
2781 | 2781 |
2782 URLRows kept_urls; | 2782 URLRows kept_urls; |
2783 for (size_t i = 0; i < starred_urls.size(); i++) { | 2783 for (size_t i = 0; i < starred_urls.size(); i++) { |
2784 URLRow row; | 2784 URLRow row; |
2785 if (!db_->GetRowForURL(starred_urls[i].url, &row)) | 2785 if (!db_->GetRowForURL(starred_urls[i].url, &row)) |
2786 continue; | 2786 continue; |
2787 | 2787 |
2788 // Clear the last visit time so when we write these rows they are "clean." | 2788 // Clear the last visit time so when we write these rows they are "clean." |
2789 row.set_last_visit(Time()); | 2789 row.set_last_visit(Time()); |
2790 row.set_visit_count(0); | 2790 row.set_visit_count(0); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2906 // when there is no transaction open, and we assume that our long-running | 2906 // when there is no transaction open, and we assume that our long-running |
2907 // transaction is currently open. | 2907 // transaction is currently open. |
2908 db_->CommitTransaction(); | 2908 db_->CommitTransaction(); |
2909 db_->Vacuum(); | 2909 db_->Vacuum(); |
2910 db_->BeginTransaction(); | 2910 db_->BeginTransaction(); |
2911 db_->GetStartDate(&first_recorded_time_); | 2911 db_->GetStartDate(&first_recorded_time_); |
2912 | 2912 |
2913 return true; | 2913 return true; |
2914 } | 2914 } |
2915 | 2915 |
2916 BookmarkService* HistoryBackend::GetBookmarkService() { | 2916 HistoryClient* HistoryBackend::GetHistoryClient() { |
2917 if (bookmark_service_) | 2917 if (history_client_) |
2918 bookmark_service_->BlockTillLoaded(); | 2918 history_client_->BlockTillBookmarksLoaded(); |
2919 return bookmark_service_; | 2919 return history_client_; |
2920 } | 2920 } |
2921 | 2921 |
2922 void HistoryBackend::NotifyVisitObservers(const VisitRow& visit) { | 2922 void HistoryBackend::NotifyVisitObservers(const VisitRow& visit) { |
2923 BriefVisitInfo info; | 2923 BriefVisitInfo info; |
2924 info.url_id = visit.url_id; | 2924 info.url_id = visit.url_id; |
2925 info.time = visit.visit_time; | 2925 info.time = visit.visit_time; |
2926 info.transition = visit.transition; | 2926 info.transition = visit.transition; |
2927 // If we don't have a delegate yet during setup or shutdown, we will drop | 2927 // If we don't have a delegate yet during setup or shutdown, we will drop |
2928 // these notifications. | 2928 // these notifications. |
2929 if (delegate_) | 2929 if (delegate_) |
(...skipping 18 matching lines...) Expand all Loading... |
2948 int rank = kPageVisitStatsMaxTopSites; | 2948 int rank = kPageVisitStatsMaxTopSites; |
2949 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2949 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
2950 if (it != most_visited_urls_map_.end()) | 2950 if (it != most_visited_urls_map_.end()) |
2951 rank = (*it).second; | 2951 rank = (*it).second; |
2952 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2952 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
2953 rank, kPageVisitStatsMaxTopSites + 1); | 2953 rank, kPageVisitStatsMaxTopSites + 1); |
2954 } | 2954 } |
2955 #endif | 2955 #endif |
2956 | 2956 |
2957 } // namespace history | 2957 } // namespace history |
OLD | NEW |