// Copyright 2013 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/dom_distiller/webui/dom_distiller_handler.h" #include #include "base/bind.h" #include "base/values.h" #include "components/dom_distiller/core/dom_distiller_service.h" #include "components/dom_distiller/core/proto/distilled_page.pb.h" #include "content/public/browser/web_ui.h" #include "url/gurl.h" namespace dom_distiller { DomDistillerHandler::DomDistillerHandler(DomDistillerService* service, const std::string& scheme) : weak_ptr_factory_(this), service_(service) { article_scheme_ = scheme; } DomDistillerHandler::~DomDistillerHandler() {} void DomDistillerHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "requestEntries", base::Bind(&DomDistillerHandler::HandleRequestEntries, base::Unretained(this))); web_ui()->RegisterMessageCallback( "addArticle", base::Bind(&DomDistillerHandler::HandleAddArticle, base::Unretained(this))); web_ui()->RegisterMessageCallback( "selectArticle", base::Bind(&DomDistillerHandler::HandleSelectArticle, base::Unretained(this))); } void DomDistillerHandler::HandleAddArticle(const ListValue* args) { std::string url; args->GetString(0, &url); GURL gurl(url); if (gurl.is_valid()) service_->AddToList(gurl); else web_ui()->CallJavascriptFunction("domDistiller.onArticleAddFailed"); } void DomDistillerHandler::HandleSelectArticle(const ListValue* args) { std::string entry_id; args->GetString(0, &entry_id); // TODO(nyquist): Do something here. } void DomDistillerHandler::HandleRequestEntries(const ListValue* args) { base::ListValue entries; const std::vector& entries_specifics = service_->GetEntries(); for (std::vector::const_iterator it = entries_specifics.begin(); it != entries_specifics.end(); ++it) { const ArticleEntry& article = *it; DCHECK(IsEntryValid(article)); scoped_ptr entry(new base::DictionaryValue()); entry->SetString("entry_id", article.entry_id()); std::string title = (!article.has_title() || article.title().empty()) ? article.entry_id() : article.title(); entry->SetString("title", title); entries.Append(entry.release()); } web_ui()->CallJavascriptFunction("domDistiller.onReceivedEntries", entries); } } // namespace dom_distiller