blob: aaec2c173bd396cded2fd5180c3740733afd09dd [file] [log] [blame]
// 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 <vector>
#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<ArticleEntry>& entries_specifics = service_->GetEntries();
for (std::vector<ArticleEntry>::const_iterator it = entries_specifics.begin();
it != entries_specifics.end();
++it) {
const ArticleEntry& article = *it;
DCHECK(IsEntryValid(article));
scoped_ptr<base::DictionaryValue> 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