Chromium Code Reviews| Index: components/ntp_tiles/webui/site_tiles_internals_message_handler.cc |
| diff --git a/components/ntp_tiles/webui/site_tiles_internals_message_handler.cc b/components/ntp_tiles/webui/site_tiles_internals_message_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..66632d07a417871b1e78c3505eca963e23611673 |
| --- /dev/null |
| +++ b/components/ntp_tiles/webui/site_tiles_internals_message_handler.cc |
| @@ -0,0 +1,167 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "components/ntp_tiles/webui/site_tiles_internals_message_handler.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/callback.h" |
| +#include "base/files/file_util.h" |
| +#include "base/logging.h" |
| +#include "base/memory/ptr_util.h" |
| +#include "base/task_runner_util.h" |
| +#include "base/values.h" |
| +#include "components/ntp_tiles/most_visited_sites.h" |
| +#include "components/ntp_tiles/pref_names.h" |
| +#include "components/ntp_tiles/webui/site_tiles_internals_message_handler_client.h" |
| +#include "components/prefs/pref_service.h" |
| +#include "components/url_formatter/url_fixer.h" |
| +#include "url/gurl.h" |
| + |
| +namespace ntp_tiles { |
| + |
| +SiteTilesInternalsMessageHandlerClient:: |
| + SiteTilesInternalsMessageHandlerClient() = default; |
| +SiteTilesInternalsMessageHandlerClient:: |
| + ~SiteTilesInternalsMessageHandlerClient() = default; |
| + |
| +SiteTilesInternalsMessageHandler::SiteTilesInternalsMessageHandler() |
| + : site_count_(8), weak_ptr_factory_(this) {} |
| + |
| +SiteTilesInternalsMessageHandler::~SiteTilesInternalsMessageHandler() = default; |
| + |
| +void SiteTilesInternalsMessageHandler::RegisterMessages( |
| + SiteTilesInternalsMessageHandlerClient* client) { |
| + client_ = client; |
| + |
| + client_->RegisterMessageCallback( |
| + "registerForEvents", |
| + base::Bind(&SiteTilesInternalsMessageHandler::HandleRegisterForEvents, |
| + base::Unretained(this))); |
| + |
| + client_->RegisterMessageCallback( |
| + "update", base::Bind(&SiteTilesInternalsMessageHandler::HandleUpdate, |
| + base::Unretained(this))); |
| + |
| + client_->RegisterMessageCallback( |
| + "getFavicon", |
|
Marc Treib
2016/12/09 10:52:11
This doesn't seem to be used yet?
sfiera
2016/12/09 17:35:28
Removed.
As you can see, this CL started out more
|
| + base::Bind(&SiteTilesInternalsMessageHandler::HandleGetFavicon, |
| + base::Unretained(this))); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::HandleRegisterForEvents( |
| + const base::ListValue* args) { |
| + DCHECK(args->empty()); |
| + |
| + SendSourceInfo(); |
| + |
| + most_visited_sites_ = client_->MakeMostVisitedSites(); |
| + most_visited_sites_->SetMostVisitedURLsObserver(this, site_count_); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::HandleUpdate( |
| + const base::ListValue* args) { |
| + const base::DictionaryValue* dict; |
| + DCHECK_EQ(1u, args->GetSize()); |
| + DCHECK(args->GetDictionary(0, &dict)); |
|
Marc Treib
2016/12/09 10:52:11
This will break in release builds.
sfiera
2016/12/09 17:35:28
Done.
|
| + |
| + PrefService* prefs = client_->GetPrefs(); |
| + |
| + if (client_->IsSourceEnabled(ntp_tiles::NTPTileSource::POPULAR)) { |
| + std::string url; |
| + dict->GetString("popular.overrideURL", &url); |
| + if (url.empty()) |
|
Marc Treib
2016/12/09 10:52:11
Braces :)
sfiera
2016/12/09 17:35:28
Done.
|
| + prefs->ClearPref(ntp_tiles::prefs::kPopularSitesOverrideURL); |
| + else |
| + prefs->SetString(ntp_tiles::prefs::kPopularSitesOverrideURL, |
| + url_formatter::FixupURL(url, std::string()).spec()); |
| + |
| + std::string country; |
| + dict->GetString("popular.overrideCountry", &country); |
| + if (country.empty()) |
| + prefs->ClearPref(ntp_tiles::prefs::kPopularSitesOverrideCountry); |
| + else |
| + prefs->SetString(ntp_tiles::prefs::kPopularSitesOverrideCountry, country); |
| + |
| + std::string version; |
| + dict->GetString("popular.overrideVersion", &version); |
| + if (version.empty()) |
| + prefs->ClearPref(ntp_tiles::prefs::kPopularSitesOverrideVersion); |
| + else |
| + prefs->SetString(ntp_tiles::prefs::kPopularSitesOverrideVersion, version); |
| + } |
| + |
| + // Recreate to pick up new values. |
| + most_visited_sites_ = client_->MakeMostVisitedSites(); |
|
Marc Treib
2016/12/09 10:52:11
After https://codereview.chromium.org/2532103002/,
sfiera
2016/12/09 17:35:28
Is it going to have the effect of recreating Popul
Marc Treib
2016/12/12 09:42:18
It doesn't do that yet, but it definitely should.
|
| + most_visited_sites_->SetMostVisitedURLsObserver(this, site_count_); |
| + SendSourceInfo(); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::HandleGetFavicon( |
| + const base::ListValue* args) { |
| + DCHECK_EQ(1u, args->GetSize()); |
| + // TODO(sfiera): implement |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::SendSourceInfo() { |
| + PrefService* prefs = client_->GetPrefs(); |
| + base::DictionaryValue value; |
| + |
| + value.SetBoolean("topSites", |
| + client_->IsSourceEnabled(NTPTileSource::TOP_SITES)); |
| + value.SetBoolean( |
| + "suggestionsService", |
| + client_->IsSourceEnabled(NTPTileSource::SUGGESTIONS_SERVICE)); |
| + value.SetBoolean("whitelist", |
| + client_->IsSourceEnabled(NTPTileSource::WHITELIST)); |
| + |
| + if (client_->IsSourceEnabled(NTPTileSource::POPULAR)) { |
| + auto popular_sites = client_->MakePopularSites(); |
| + value.SetString("popular.url", popular_sites->GetURLToUse().spec()); |
| + value.SetString("popular.country", popular_sites->GetCountryToUse()); |
| + value.SetString("popular.version", popular_sites->GetVersionToUse()); |
| + |
| + value.SetString( |
| + "popular.overrideURL", |
| + prefs->GetString(ntp_tiles::prefs::kPopularSitesOverrideURL)); |
| + value.SetString( |
| + "popular.overrideCountry", |
| + prefs->GetString(ntp_tiles::prefs::kPopularSitesOverrideCountry)); |
| + value.SetString( |
| + "popular.overrideVersion", |
| + prefs->GetString(ntp_tiles::prefs::kPopularSitesOverrideVersion)); |
| + } else { |
| + value.SetBoolean("popular", false); |
| + } |
| + |
| + client_->CallJavascriptFunction( |
| + "chrome.site_tiles_internals.receiveSourceInfo", value); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::SendTiles(const NTPTilesVector& tiles) { |
| + auto sites_list = base::MakeUnique<base::ListValue>(); |
| + for (const NTPTile& tile : tiles) { |
| + auto entry = base::MakeUnique<base::DictionaryValue>(); |
| + entry->SetString("title", tile.title); |
| + entry->SetString("url", tile.url.spec()); |
| + entry->SetInteger("source", static_cast<int>(tile.source)); |
| + entry->SetString("whitelistIconPath", |
| + tile.whitelist_icon_path.LossyDisplayName()); |
| + sites_list->Append(std::move(entry)); |
| + } |
| + |
| + base::DictionaryValue result; |
| + result.Set("sites", std::move(sites_list)); |
| + client_->CallJavascriptFunction("chrome.site_tiles_internals.receiveSites", |
| + result); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::OnMostVisitedURLsAvailable( |
| + const NTPTilesVector& tiles) { |
| + SendTiles(tiles); |
| +} |
| + |
| +void SiteTilesInternalsMessageHandler::OnIconMadeAvailable( |
| + const GURL& site_url) {} |
| + |
| +} // namespace ntp_tiles |