| Index: chrome/browser/history/top_sites_impl.cc
|
| diff --git a/chrome/browser/history/top_sites_impl.cc b/chrome/browser/history/top_sites_impl.cc
|
| index 9eb3a00694f7a060f98cdb30e5dfadc134aca212..40f78fce1bd49afb2299049a584dc73725f7eefb 100644
|
| --- a/chrome/browser/history/top_sites_impl.cc
|
| +++ b/chrome/browser/history/top_sites_impl.cc
|
| @@ -607,6 +607,39 @@ bool TopSitesImpl::loaded() const {
|
| return loaded_;
|
| }
|
|
|
| +bool TopSitesImpl::AddForcedURL(const GURL& url, const base::Time& time) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + size_t num_forced = cache_->GetNumForcedURLs();
|
| + MostVisitedURLList new_list(cache_->top_sites());
|
| + MostVisitedURL new_url;
|
| +
|
| + if (cache_->IsKnownURL(url)) {
|
| + size_t index = cache_->GetURLIndex(url);
|
| + // Do nothing if we currently have that URL as non-forced.
|
| + if (new_list[index].last_forced_time.is_null())
|
| + return false;
|
| +
|
| + // Update the |last_forced_time| of the already existing URL. Delete it and
|
| + // reinsert it at the right location.
|
| + new_url = new_list[index];
|
| + new_list.erase(new_list.begin() + index);
|
| + num_forced--;
|
| + } else {
|
| + new_url.url = url;
|
| + new_url.redirects.push_back(url);
|
| + }
|
| + new_url.last_forced_time = time;
|
| + // Add forced URLs and sort. Added to the end of the list of forced URLs
|
| + // since this is almost always where it needs to go, unless the user's local
|
| + // clock is fiddled with.
|
| + MostVisitedURLList::iterator mid = new_list.begin() + num_forced;
|
| + new_list.insert(mid, new_url);
|
| + mid = new_list.begin() + num_forced; // Mid was invalidated.
|
| + std::inplace_merge(new_list.begin(), mid, mid + 1, ForcedURLComparator);
|
| + SetTopSites(new_list);
|
| + return true;
|
| +}
|
| +
|
| bool TopSitesImpl::AddPrepopulatedPages(MostVisitedURLList* urls,
|
| size_t num_forced_urls) {
|
| bool added = false;
|
|
|