Index: chrome/browser/history/top_sites.cc |
diff --git a/chrome/browser/history/top_sites.cc b/chrome/browser/history/top_sites.cc |
index a95b71b66b54d019108f35b73202ef717e72f976..e6416dc6b5f3d5743c81268aa60f80eb0ef9568a 100644 |
--- a/chrome/browser/history/top_sites.cc |
+++ b/chrome/browser/history/top_sites.cc |
@@ -141,7 +141,6 @@ TopSites::TopSites(Profile* profile) |
thread_safe_cache_(new TopSitesCache()), |
profile_(profile), |
last_num_urls_changed_(0), |
- pinned_urls_(NULL), |
history_state_(HISTORY_LOADING), |
top_sites_state_(TOP_SITES_LOADING), |
loaded_(false) { |
@@ -156,17 +155,6 @@ TopSites::TopSites(Profile* profile) |
registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
content::NotificationService::AllSources()); |
} |
- |
- // We create update objects here to be sure that dictionaries are created |
- // in the user preferences. |
- DictionaryPrefUpdate(profile_->GetPrefs(), |
- prefs::kNtpMostVisitedPinnedURLs).Get(); |
- |
- // Now the dictionaries are guaranteed to exist and we can cache pointers |
- // to them. |
- pinned_urls_ = |
- profile_->GetPrefs()->GetDictionary(prefs::kNtpMostVisitedPinnedURLs); |
- DCHECK(pinned_urls_ != NULL); |
} |
void TopSites::Init(const FilePath& db_name) { |
@@ -314,7 +302,6 @@ void TopSites::MigrateFromHistory() { |
this, |
num_results_to_request_from_history()), |
&history_consumer_); |
- MigratePinnedURLs(); |
} |
void TopSites::FinishHistoryMigration(const ThumbnailMigration& data) { |
@@ -388,7 +375,6 @@ bool TopSites::HasBlacklistedItems() const { |
void TopSites::AddBlacklistedURL(const GURL& url) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- RemovePinnedURL(url); |
Value* dummy = Value::CreateNullValue(); |
{ |
DictionaryPrefUpdate update(profile_->GetPrefs(), |
@@ -432,62 +418,6 @@ void TopSites::ClearBlacklistedURLs() { |
NotifyTopSitesChanged(); |
} |
-void TopSites::AddPinnedURL(const GURL& url, size_t pinned_index) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- GURL old; |
- if (GetPinnedURLAtIndex(pinned_index, &old)) |
- RemovePinnedURL(old); |
- |
- if (IsURLPinned(url)) |
- RemovePinnedURL(url); |
- |
- Value* index = Value::CreateIntegerValue(pinned_index); |
- |
- { |
- DictionaryPrefUpdate update(profile_->GetPrefs(), |
- prefs::kNtpMostVisitedPinnedURLs); |
- DictionaryValue* pinned_urls = update.Get(); |
- pinned_urls->SetWithoutPathExpansion(GetURLString(url), index); |
- } |
- |
- ResetThreadSafeCache(); |
- NotifyTopSitesChanged(); |
-} |
- |
-bool TopSites::IsURLPinned(const GURL& url) { |
- int tmp; |
- return pinned_urls_->GetIntegerWithoutPathExpansion(GetURLString(url), &tmp); |
-} |
- |
-void TopSites::RemovePinnedURL(const GURL& url) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- { |
- DictionaryPrefUpdate update(profile_->GetPrefs(), |
- prefs::kNtpMostVisitedPinnedURLs); |
- DictionaryValue* pinned_urls = update.Get(); |
- pinned_urls->RemoveWithoutPathExpansion(GetURLString(url), NULL); |
- } |
- |
- ResetThreadSafeCache(); |
- NotifyTopSitesChanged(); |
-} |
- |
-bool TopSites::GetPinnedURLAtIndex(size_t index, GURL* url) { |
- for (DictionaryValue::key_iterator it = pinned_urls_->begin_keys(); |
- it != pinned_urls_->end_keys(); ++it) { |
- int current_index; |
- if (pinned_urls_->GetIntegerWithoutPathExpansion(*it, ¤t_index)) { |
- if (static_cast<size_t>(current_index) == index) { |
- *url = GURL(*it); |
- return true; |
- } |
- } |
- } |
- return false; |
-} |
- |
void TopSites::Shutdown() { |
profile_ = NULL; |
// Cancel all requests so that the service doesn't callback to us after we've |
@@ -698,84 +628,11 @@ bool TopSites::AddPrepopulatedPages(MostVisitedURLList* urls) { |
return added; |
} |
-void TopSites::MigratePinnedURLs() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- std::map<GURL, size_t> tmp_map; |
- for (DictionaryValue::key_iterator it = pinned_urls_->begin_keys(); |
- it != pinned_urls_->end_keys(); ++it) { |
- Value* value; |
- if (!pinned_urls_->GetWithoutPathExpansion(*it, &value)) |
- continue; |
- |
- if (value->IsType(DictionaryValue::TYPE_DICTIONARY)) { |
- DictionaryValue* dict = static_cast<DictionaryValue*>(value); |
- std::string url_string; |
- int index; |
- if (dict->GetString("url", &url_string) && |
- dict->GetInteger("index", &index)) |
- tmp_map[GURL(url_string)] = index; |
- } |
- } |
- |
- { |
- DictionaryPrefUpdate update(profile_->GetPrefs(), |
- prefs::kNtpMostVisitedPinnedURLs); |
- DictionaryValue* pinned_urls = update.Get(); |
- pinned_urls->Clear(); |
- } |
- |
- for (std::map<GURL, size_t>::iterator it = tmp_map.begin(); |
- it != tmp_map.end(); ++it) |
- AddPinnedURL(it->first, it->second); |
-} |
- |
-void TopSites::ApplyBlacklistAndPinnedURLs(const MostVisitedURLList& urls, |
- MostVisitedURLList* out) { |
- MostVisitedURLList urls_copy; |
- for (size_t i = 0; i < urls.size(); i++) { |
+void TopSites::ApplyBlacklist(const MostVisitedURLList& urls, |
+ MostVisitedURLList* out) { |
+ for (size_t i = 0; i < urls.size() && i < kTopSitesNumber; ++i) { |
if (!IsBlacklisted(urls[i].url)) |
- urls_copy.push_back(urls[i]); |
- } |
- |
- for (size_t pinned_index = 0; pinned_index < kTopSitesNumber; |
- pinned_index++) { |
- GURL url; |
- bool found = GetPinnedURLAtIndex(pinned_index, &url); |
- if (!found) |
- continue; |
- |
- DCHECK(!url.is_empty()); |
- int cur_index = IndexOf(urls_copy, url); |
- MostVisitedURL tmp; |
- if (cur_index < 0) { |
- // Pinned URL not in urls. |
- tmp.url = url; |
- } else { |
- tmp = urls_copy[cur_index]; |
- urls_copy.erase(urls_copy.begin() + cur_index); |
- } |
- if (pinned_index > out->size()) |
- out->resize(pinned_index); // Add empty URLs as fillers. |
- out->insert(out->begin() + pinned_index, tmp); |
- } |
- |
- // Add non-pinned URLs in the empty spots. |
- size_t current_url = 0; // Index into the remaining URLs in urls_copy. |
- for (size_t i = 0; i < kTopSitesNumber && current_url < urls_copy.size(); |
- i++) { |
- if (i == out->size()) { |
- out->push_back(urls_copy[current_url]); |
- current_url++; |
- } else if (i < out->size()) { |
- if ((*out)[i].url.is_empty()) { |
- // Replace the filler |
- (*out)[i] = urls_copy[current_url]; |
- current_url++; |
- } |
- } else { |
- NOTREACHED(); |
- } |
+ out->push_back(urls[i]); |
} |
} |
@@ -837,9 +694,7 @@ void TopSites::Observe(int type, |
MostVisitedURLList new_top_sites(cache_->top_sites()); |
for (std::set<size_t>::reverse_iterator i = indices_to_delete.rbegin(); |
i != indices_to_delete.rend(); i++) { |
- size_t index = *i; |
- RemovePinnedURL(new_top_sites[index].url); |
- new_top_sites.erase(new_top_sites.begin() + index); |
+ new_top_sites.erase(new_top_sites.begin() + *i); |
} |
SetTopSites(new_top_sites); |
} |
@@ -954,7 +809,7 @@ void TopSites::MoveStateToLoaded() { |
void TopSites::ResetThreadSafeCache() { |
base::AutoLock lock(lock_); |
MostVisitedURLList cached; |
- ApplyBlacklistAndPinnedURLs(cache_->top_sites(), &cached); |
+ ApplyBlacklist(cache_->top_sites(), &cached); |
thread_safe_cache_->SetTopSites(cached); |
} |