OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/top_sites.h" | 5 #include "chrome/browser/history/top_sites.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 } | 363 } |
364 } | 364 } |
365 pinned_urls_->Clear(); | 365 pinned_urls_->Clear(); |
366 for (std::map<GURL, size_t>::iterator it = tmp_map.begin(); | 366 for (std::map<GURL, size_t>::iterator it = tmp_map.begin(); |
367 it != tmp_map.end(); ++it) | 367 it != tmp_map.end(); ++it) |
368 AddPinnedURL(it->first, it->second); | 368 AddPinnedURL(it->first, it->second); |
369 } | 369 } |
370 | 370 |
371 void TopSites::ApplyBlacklistAndPinnedURLs(const MostVisitedURLList& urls, | 371 void TopSites::ApplyBlacklistAndPinnedURLs(const MostVisitedURLList& urls, |
372 MostVisitedURLList* out) { | 372 MostVisitedURLList* out) { |
| 373 MostVisitedURLList urls_copy; |
373 for (size_t i = 0; i < urls.size(); i++) { | 374 for (size_t i = 0; i < urls.size(); i++) { |
374 if (!IsBlacklisted(urls[i].url)) | 375 if (!IsBlacklisted(urls[i].url)) |
375 out->push_back(urls[i]); | 376 urls_copy.push_back(urls[i]); |
376 } | 377 } |
377 | 378 |
378 for (DictionaryValue::key_iterator it = pinned_urls_->begin_keys(); | 379 for (size_t pinned_index = 0; pinned_index < kTopSitesShown; pinned_index++) { |
379 it != pinned_urls_->end_keys(); ++it) { | 380 GURL url; |
380 GURL url(WideToASCII(*it)); | 381 bool found = GetPinnedURLAtIndex(pinned_index, &url); |
| 382 if (!found) |
| 383 continue; |
381 | 384 |
382 int index = IndexOf(*out, url); | 385 DCHECK(!url.is_empty()); |
383 if (index == -1) { | 386 int cur_index = IndexOf(urls_copy, url); |
384 if (url.is_empty()) { | 387 MostVisitedURL tmp; |
385 MigratePinnedURLs(); | 388 if (cur_index < 0) { |
386 out->clear(); | 389 // Pinned URL not in urls. |
387 ApplyBlacklistAndPinnedURLs(urls, out); | 390 tmp.url = url; |
388 return; | 391 } else { |
| 392 tmp = urls_copy[cur_index]; |
| 393 urls_copy.erase(urls_copy.begin() + cur_index); |
| 394 } |
| 395 if (pinned_index > out->size()) |
| 396 out->resize(pinned_index); // Add empty URLs as fillers. |
| 397 out->insert(out->begin() + pinned_index, tmp); |
| 398 } |
| 399 |
| 400 // Add non-pinned URLs in the empty spots. |
| 401 size_t current_url = 0; // Index into the remaining URLs in urls_copy. |
| 402 for (size_t i = 0; i < kTopSitesShown && current_url < urls_copy.size(); |
| 403 i++) { |
| 404 if (i == out->size()) { |
| 405 out->push_back(urls_copy[current_url]); |
| 406 current_url++; |
| 407 } else if (i < out->size()) { |
| 408 if ((*out)[i].url.is_empty()) { |
| 409 // Replace the filler |
| 410 (*out)[i] = urls_copy[current_url]; |
| 411 current_url++; |
389 } | 412 } |
390 LOG(INFO) << "Unknown url: " << url.spec(); | 413 } else { |
391 continue; | 414 NOTREACHED(); |
392 } | |
393 | |
394 size_t pinned_index = 0; | |
395 bool result = GetIndexOfPinnedURL(url, &pinned_index); | |
396 DCHECK(result) << url.spec(); | |
397 if (static_cast<int>(pinned_index) != index) { | |
398 MostVisitedURL tmp = (*out)[index]; | |
399 out->erase(out->begin() + index); | |
400 if (pinned_index > out->size()) | |
401 out->resize(pinned_index); // Add empty URLs as fillers. | |
402 out->insert(out->begin() + pinned_index, tmp); | |
403 } | 415 } |
404 } | 416 } |
405 } | 417 } |
406 | 418 |
407 std::wstring TopSites::GetURLString(const GURL& url) { | 419 std::wstring TopSites::GetURLString(const GURL& url) { |
408 return ASCIIToWide(GetCanonicalURL(url).spec()); | 420 return ASCIIToWide(GetCanonicalURL(url).spec()); |
409 } | 421 } |
410 | 422 |
411 std::wstring TopSites::GetURLHash(const GURL& url) { | 423 std::wstring TopSites::GetURLHash(const GURL& url) { |
412 return ASCIIToWide(MD5String(GetCanonicalURL(url).spec())); | 424 return ASCIIToWide(MD5String(GetCanonicalURL(url).spec())); |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 NewCallback(this, &TopSites::OnTopSitesAvailable)); | 655 NewCallback(this, &TopSites::OnTopSitesAvailable)); |
644 } else { | 656 } else { |
645 LOG(INFO) << "History Service not available."; | 657 LOG(INFO) << "History Service not available."; |
646 } | 658 } |
647 } | 659 } |
648 } | 660 } |
649 | 661 |
650 void TopSites::StartMigration() { | 662 void TopSites::StartMigration() { |
651 migration_in_progress_ = true; | 663 migration_in_progress_ = true; |
652 StartQueryForMostVisited(); | 664 StartQueryForMostVisited(); |
| 665 MigratePinnedURLs(); |
653 } | 666 } |
654 | 667 |
655 void TopSites::AddBlacklistedURL(const GURL& url) { | 668 void TopSites::AddBlacklistedURL(const GURL& url) { |
656 RemovePinnedURL(url); | 669 RemovePinnedURL(url); |
657 Value* dummy = Value::CreateNullValue(); | 670 Value* dummy = Value::CreateNullValue(); |
658 blacklist_->SetWithoutPathExpansion(GetURLHash(url), dummy); | 671 blacklist_->SetWithoutPathExpansion(GetURLHash(url), dummy); |
659 } | 672 } |
660 | 673 |
661 bool TopSites::IsBlacklisted(const GURL& url) { | 674 bool TopSites::IsBlacklisted(const GURL& url) { |
662 bool result = blacklist_->HasKey(GetURLHash(url)); | 675 bool result = blacklist_->HasKey(GetURLHash(url)); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
826 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::DB)); | 839 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::DB)); |
827 db_.reset(new TopSitesDatabaseImpl()); | 840 db_.reset(new TopSitesDatabaseImpl()); |
828 file_util::Delete(db_path_, false); | 841 file_util::Delete(db_path_, false); |
829 if (!db_->Init(db_path_)) { | 842 if (!db_->Init(db_path_)) { |
830 NOTREACHED() << "Failed to initialize database."; | 843 NOTREACHED() << "Failed to initialize database."; |
831 return; | 844 return; |
832 } | 845 } |
833 } | 846 } |
834 | 847 |
835 } // namespace history | 848 } // namespace history |
OLD | NEW |