| Index: components/dom_distiller/webui/dom_distiller_handler.cc | 
| diff --git a/components/dom_distiller/webui/dom_distiller_handler.cc b/components/dom_distiller/webui/dom_distiller_handler.cc | 
| index c05cc0dec73461288d668bf031c7a3d2aa198392..6202de7d7e4dd062fbafe251a8fe264e60cb3f99 100644 | 
| --- a/components/dom_distiller/webui/dom_distiller_handler.cc | 
| +++ b/components/dom_distiller/webui/dom_distiller_handler.cc | 
| @@ -6,12 +6,18 @@ | 
|  | 
| #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() | 
| -    : weak_ptr_factory_(this) { | 
| +DomDistillerHandler::DomDistillerHandler(DomDistillerService* service, | 
| +                                         const std::string& scheme) | 
| +    : weak_ptr_factory_(this), | 
| +      service_(service) { | 
| +  article_scheme_ = scheme; | 
| } | 
|  | 
| DomDistillerHandler::~DomDistillerHandler() {} | 
| @@ -21,22 +27,49 @@ void DomDistillerHandler::RegisterMessages() { | 
| "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; | 
| - | 
| -  // Add some temporary placeholder entries. | 
| -  scoped_ptr<base::DictionaryValue> entry1(new base::DictionaryValue()); | 
| -  entry1->SetString("title", "Google"); | 
| -  entry1->SetString("url", "http://www.google.com/"); | 
| -  entries.Append(entry1.release()); | 
| -  scoped_ptr<base::DictionaryValue> entry2(new base::DictionaryValue()); | 
| -  entry2->SetString("title", "Chrome"); | 
| -  entry2->SetString("url", "http://www.chrome.com/"); | 
| -  entries.Append(entry2.release()); | 
| - | 
| -  web_ui()->CallJavascriptFunction("onGotEntries", 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 | 
|  |