diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-15 00:17:53 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-15 00:17:53 +0000 |
commit | fb804132c4cd3ad50926a21a148954f67ac656bb (patch) | |
tree | 3bb90cf636c87ee51a5b587bdf4492efe1a399c2 /chrome/browser/dom_ui/new_tab_ui.cc | |
parent | 841b5d18b22145d0127cf72123b54c91a76fd64f (diff) | |
download | chromium_src-fb804132c4cd3ad50926a21a148954f67ac656bb.zip chromium_src-fb804132c4cd3ad50926a21a148954f67ac656bb.tar.gz chromium_src-fb804132c4cd3ad50926a21a148954f67ac656bb.tar.bz2 |
Few changes to the NTP remove thumbnails:
- some minor string changes
- there is now a Cancel button next to the Done button to restore the thumbnails removed during the current editing session
- link and favico are opacified as well in remove mode
- now using a dictionary instead of a list to store the URL blacklist for faster access
- now storing URL hashes instead of URLs (for privacy and also because the DictionaryValue breaks down keys on . characters)
BUG=None
TEST=Make sure removing thumbnails works as expected. Start removing thumbnails then click Cancel, verify that the thumbnails just removed are restored.
Review URL: http://codereview.chromium.org/69007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13723 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui/new_tab_ui.cc')
-rw-r--r-- | chrome/browser/dom_ui/new_tab_ui.cc | 86 |
1 files changed, 56 insertions, 30 deletions
diff --git a/chrome/browser/dom_ui/new_tab_ui.cc b/chrome/browser/dom_ui/new_tab_ui.cc index c4da817..cd9b5d9 100644 --- a/chrome/browser/dom_ui/new_tab_ui.cc +++ b/chrome/browser/dom_ui/new_tab_ui.cc @@ -246,13 +246,15 @@ void NewTabHTMLSource::StartDataRequest(const std::string& path, localized_strings.SetString(L"showhistoryurl", chrome::kChromeUIHistoryURL); localized_strings.SetString(L"editthumbnails", - l10n_util::GetString(IDS_NEW_TAB_EDIT_THUMBNAILS)); + l10n_util::GetString(IDS_NEW_TAB_REMOVE_THUMBNAILS)); localized_strings.SetString(L"restorethumbnails", l10n_util::GetString(IDS_NEW_TAB_RESTORE_THUMBNAILS_LINK)); localized_strings.SetString(L"editmodeheading", l10n_util::GetString(IDS_NEW_TAB_MOST_VISITED_EDIT_MODE_HEADING)); localized_strings.SetString(L"doneediting", - l10n_util::GetString(IDS_NEW_TAB_MOST_VISITED_DONE_EDITING_BUTTON)); + l10n_util::GetString(IDS_NEW_TAB_MOST_VISITED_DONE_REMOVING_BUTTON)); + localized_strings.SetString(L"cancelediting", + l10n_util::GetString(IDS_NEW_TAB_MOST_VISITED_CANCEL_REMOVING_BUTTON)); localized_strings.SetString(L"searchhistory", l10n_util::GetString(IDS_NEW_TAB_HISTORY_SEARCH)); localized_strings.SetString(L"recentlyclosed", @@ -354,6 +356,9 @@ class MostVisitedHandler : public DOMMessageHandler, // Callback for the "blacklistURLFromMostVisited" message. void HandleBlacklistURL(const Value* url); + // Callback for the "removeURLsFromMostVisitedBlacklist" message. + void HandleRemoveURLsFromBlacklist(const Value* url); + // Callback for the "clearMostVisitedURLsBlacklist" message. void HandleClearBlacklist(const Value* url); @@ -376,11 +381,8 @@ class MostVisitedHandler : public DOMMessageHandler, // Puts the passed URL in the blacklist (so it does not show as a thumbnail). void BlacklistURL(const GURL& url); - // Returns true if the passed URL has been blacklisted. - bool IsURLBlacklisted(const GURL& url); - - // Returns the URL blacklist. - ListValue* GetURLBlacklist(); + // Returns the key used in url_blacklist_ for the passed |url|. + std::wstring GetBlacklistKeyForURL(const std::string& url); // Our consumer for the history service. CancelableRequestConsumerTSimple<PageUsageData*> cancelable_consumer_; @@ -390,6 +392,11 @@ class MostVisitedHandler : public DOMMessageHandler, // was clicked on for metrics purposes. std::vector<GURL> most_visited_urls_; + // The URL blacklist: URLs we do not want to show in the thumbnails list. It + // is a dictionary for quick access (it associates a dummy boolean to the URL + // string). + DictionaryValue* url_blacklist_; + DISALLOW_COPY_AND_ASSIGN(MostVisitedHandler); }; @@ -403,9 +410,14 @@ MostVisitedHandler::MostVisitedHandler(DOMUI* dom_ui) // Also register ourselves for any most-visited item blacklisting. dom_ui_->RegisterMessageCallback("blacklistURLFromMostVisited", NewCallback(this, &MostVisitedHandler::HandleBlacklistURL)); + dom_ui_->RegisterMessageCallback("removeURLsFromMostVisitedBlacklist", + NewCallback(this, &MostVisitedHandler::HandleRemoveURLsFromBlacklist)); dom_ui_->RegisterMessageCallback("clearMostVisitedURLsBlacklist", NewCallback(this, &MostVisitedHandler::HandleClearBlacklist)); + url_blacklist_ = dom_ui_->GetProfile()->GetPrefs()-> + GetMutableDictionary(prefs::kNTPMostVisitedURLsBlacklist); + // Set up our sources for thumbnail and favicon data. Since we may be in // testing mode with no I/O thread, only add our handler when an I/O thread // exists. Ownership is passed to the ChromeURLDataManager. @@ -436,7 +448,7 @@ void MostVisitedHandler::HandleGetMostVisited(const Value* value) { const int kMostVisitedCount = 9; // Let's query for the number of items we want plus the blacklist size as // we'll be filtering-out the returned list with the blacklist URLs. - int result_count = kMostVisitedCount + GetURLBlacklist()->GetSize(); + int result_count = kMostVisitedCount + url_blacklist_->GetSize(); HistoryService* hs = dom_ui_->GetProfile()->GetHistoryService(Profile::EXPLICIT_ACCESS); hs->QuerySegmentUsageSince( @@ -462,8 +474,35 @@ void MostVisitedHandler::HandleBlacklistURL(const Value* value) { HandleGetMostVisited(NULL); } +void MostVisitedHandler::HandleRemoveURLsFromBlacklist(const Value* urls) { + if (!urls->IsType(Value::TYPE_LIST)) { + NOTREACHED(); + return; + } + const ListValue* list = static_cast<const ListValue*>(urls); + if (list->GetSize() == 0) { + NOTREACHED(); + return; + } + + for (ListValue::const_iterator iter = list->begin(); + iter != list->end(); ++iter) { + std::wstring url; + bool r = (*iter)->GetAsString(&url); + if (!r) { + NOTREACHED(); + return; + } + r = url_blacklist_->Remove(GetBlacklistKeyForURL(WideToUTF8(url)), NULL); + DCHECK(r) << "Unknown URL removed from the NTP Most Visited blacklist."; + } + + // Force a refresh of the thumbnails. + HandleGetMostVisited(NULL); +} + void MostVisitedHandler::HandleClearBlacklist(const Value* value) { - GetURLBlacklist()->Clear(); + url_blacklist_->Clear(); // Force a refresh of the thumbnails. HandleGetMostVisited(NULL); } @@ -477,7 +516,8 @@ void MostVisitedHandler::OnSegmentUsageAvailable( for (size_t i = 0; i < data->size(); ++i) { const PageUsageData& page = *(*data)[i]; GURL url = page.GetURL(); - if (IsURLBlacklisted(url)) + + if (url_blacklist_->HasKey(GetBlacklistKeyForURL(url.spec()))) continue; DictionaryValue* page_value = new DictionaryValue; SetURLTitleAndDirection(page_value, page.GetTitle(), page.GetURL()); @@ -502,33 +542,19 @@ void MostVisitedHandler::Observe(NotificationType type, } void MostVisitedHandler::BlacklistURL(const GURL& url) { - if (IsURLBlacklisted(url)) + std::wstring key = GetBlacklistKeyForURL(url.spec()); + if (url_blacklist_->HasKey(key)) return; - GetURLBlacklist()->Append(Value::CreateStringValue(url.spec())); -} - -bool MostVisitedHandler::IsURLBlacklisted(const GURL& url) { - std::string url_spec = url.spec(); - ListValue* blacklist = GetURLBlacklist(); - for (ListValue::const_iterator iter = blacklist->begin(); - iter != blacklist->end(); ++iter) { - std::string blacklisted_url; - bool success = (*iter)->GetAsString(&blacklisted_url); - DCHECK(success); - if (url_spec == blacklisted_url) - return true; - } - return false; + url_blacklist_->SetBoolean(key, true); } -ListValue* MostVisitedHandler::GetURLBlacklist() { - return dom_ui_->GetProfile()->GetPrefs()-> - GetMutableList(prefs::kNTPMostVisitedURLsBlacklist); +std::wstring MostVisitedHandler::GetBlacklistKeyForURL(const std::string& url) { + return ASCIIToWide(MD5String(url)); } // static void MostVisitedHandler::RegisterUserPrefs(PrefService* prefs) { - prefs->RegisterListPref(prefs::kNTPMostVisitedURLsBlacklist); + prefs->RegisterDictionaryPref(prefs::kNTPMostVisitedURLsBlacklist); } /////////////////////////////////////////////////////////////////////////////// |