summaryrefslogtreecommitdiffstats
path: root/chromium/components/dom_distiller/webui/dom_distiller_handler.cc
blob: aaec2c173bd396cded2fd5180c3740733afd09dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// 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