Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Unified Diff: components/ntp_tiles/webui/site_tiles_internals_message_handler.cc

Issue 2557103004: Add chrome://site-tiles-internals/ (Closed)
Patch Set: Fix gn check Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..a094adc4f4a9f7f0c2fbe4bff62dea5a0844b49a
--- /dev/null
+++ b/components/ntp_tiles/webui/site_tiles_internals_message_handler.cc
@@ -0,0 +1,205 @@
+// 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 {
+
+std::string ReadFileToString(const base::FilePath& path) {
+ std::string result;
+ if (!base::ReadFileToString(path, &result))
+ result.clear();
Marc Treib 2016/12/08 15:41:50 nit: Does/should our new "always use braces" rule
sfiera 2016/12/08 16:44:35 Yes, I think so. I copy-pasted this function, but
+ return result;
+}
+
+} // namespace
+
+namespace ntp_tiles {
+
+SiteTilesInternalsMessageHandlerClient::
+ SiteTilesInternalsMessageHandlerClient() = default;
+SiteTilesInternalsMessageHandlerClient::
+ ~SiteTilesInternalsMessageHandlerClient() = default;
+
+SiteTilesInternalsMessageHandler::SiteTilesInternalsMessageHandler(
+ SiteTilesInternalsMessageHandlerClient* web_ui)
+ : web_ui_(web_ui), site_count_(8), weak_ptr_factory_(this) {}
Marc Treib 2016/12/08 15:41:50 Any plans to make site_count_ non-constant? If not
sfiera 2016/12/08 16:44:35 It should have that feature, since we sometimes fe
Marc Treib 2016/12/08 17:33:22 I'd argue that as long as it doesn't have that fea
+
+SiteTilesInternalsMessageHandler::~SiteTilesInternalsMessageHandler() = default;
+
+void SiteTilesInternalsMessageHandler::RegisterMessages() {
+ web_ui_->RegisterMessageCallback(
+ "registerForEvents",
+ base::Bind(&SiteTilesInternalsMessageHandler::HandleRegisterForEvents,
+ base::Unretained(this)));
+
+ web_ui_->RegisterMessageCallback(
+ "update", base::Bind(&SiteTilesInternalsMessageHandler::HandleUpdate,
+ base::Unretained(this)));
+
+ web_ui_->RegisterMessageCallback(
+ "viewPopularSitesJson",
+ base::Bind(&SiteTilesInternalsMessageHandler::HandleViewPopularSitesJson,
+ base::Unretained(this)));
+
+ web_ui_->RegisterMessageCallback(
+ "getFavicon",
+ base::Bind(&SiteTilesInternalsMessageHandler::HandleGetFavicon,
+ base::Unretained(this)));
+}
+
+void SiteTilesInternalsMessageHandler::HandleRegisterForEvents(
+ const base::ListValue* args) {
+ DCHECK(args->empty());
+
+ SendSourceInfo();
+
+ most_visited_sites_ = web_ui_->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));
+
+ PrefService* prefs = web_ui_->GetPrefs();
+
+ if (web_ui_->IsSourceEnabled(ntp_tiles::NTPTileSource::POPULAR)) {
+ std::string url;
+ dict->GetString("popular.overrideURL", &url);
+ if (url.empty())
+ 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_ = web_ui_->MakeMostVisitedSites();
+ most_visited_sites_->SetMostVisitedURLsObserver(this, site_count_);
+ SendSourceInfo();
+}
+
+void SiteTilesInternalsMessageHandler::HandleViewPopularSitesJson(
+ const base::ListValue* args) {
+ DCHECK_EQ(0u, args->GetSize());
+
+ const base::FilePath& path = web_ui_->MakePopularSites()->local_path();
Marc Treib 2016/12/08 15:41:50 Should we maybe expose the PopularSites instance f
sfiera 2016/12/08 16:44:35 Well, the alternate plan is to make PopularSites l
Marc Treib 2016/12/08 17:33:22 Well, the alternate alternate plan is to make Most
+ base::PostTaskAndReplyWithResult(
+ web_ui_->GetBlockingPool()
+ ->GetTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)
+ .get(),
+ FROM_HERE, base::Bind(&ReadFileToString, path),
+ base::Bind(&SiteTilesInternalsMessageHandler::SendPopularSitesJson,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void SiteTilesInternalsMessageHandler::HandleGetFavicon(
+ const base::ListValue* args) {
+ DCHECK_EQ(1u, args->GetSize());
+ // TODO(sfiera): implement
+}
+
+void SiteTilesInternalsMessageHandler::SendSourceInfo() {
+ PrefService* prefs = web_ui_->GetPrefs();
+ base::DictionaryValue value;
+
+ value.SetBoolean("topSites",
+ web_ui_->IsSourceEnabled(NTPTileSource::TOP_SITES));
+ value.SetBoolean(
+ "suggestionsService",
+ web_ui_->IsSourceEnabled(NTPTileSource::SUGGESTIONS_SERVICE));
+ value.SetBoolean("whitelist",
+ web_ui_->IsSourceEnabled(NTPTileSource::WHITELIST));
+
+ if (web_ui_->IsSourceEnabled(NTPTileSource::POPULAR)) {
+ auto popular_sites = web_ui_->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);
Marc Treib 2016/12/08 15:41:50 It doesn't need to be set to true in the enabled c
sfiera 2016/12/08 16:44:35 It is true in the enabled case, because objects ar
Marc Treib 2016/12/08 17:33:22 Ewwww. Oh well.
sfiera 2016/12/08 18:00:48 (I suppose, if you want, the state could be { "t
Marc Treib 2016/12/09 10:52:11 Naaah, it's okay. I just don't like JS :)
+ }
+
+ web_ui_->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));
+ if (tile.source == NTPTileSource::WHITELIST) {
+ entry->SetString("whitelistIconPath",
+ tile.whitelist_icon_path.AsUTF8Unsafe());
Marc Treib 2016/12/08 15:41:50 Huh, contrary to what the comment on NTPTile says,
sfiera 2016/12/08 16:44:35 Done, not done, and done. (set for other sources,
+ }
+ sites_list->Append(std::move(entry));
+ }
+
+ base::DictionaryValue result;
+ result.Set("sites", std::move(sites_list));
+ web_ui_->CallJavascriptFunction("chrome.site_tiles_internals.receiveSites",
+ result);
+}
+
+void SiteTilesInternalsMessageHandler::SendPopularSitesJson(
+ const std::string& json) {
+ web_ui_->CallJavascriptFunction(
+ "chrome.site_tiles_internals.receivePopularSitesJson",
+ base::StringValue(json));
+}
+
+void SiteTilesInternalsMessageHandler::OnMostVisitedURLsAvailable(
+ const NTPTilesVector& tiles) {
+ SendTiles(tiles);
+}
+
+void SiteTilesInternalsMessageHandler::OnIconMadeAvailable(
+ const GURL& site_url) {}
+
+} // namespace ntp_tiles

Powered by Google App Engine
This is Rietveld 408576698