1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/api/top_sites/top_sites_api.h"
6
7#include "base/bind.h"
8#include "base/values.h"
9#include "chrome/browser/history/top_sites.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
12
13namespace extensions {
14
15TopSitesGetFunction::TopSitesGetFunction()
16    : weak_ptr_factory_(this) {}
17
18TopSitesGetFunction::~TopSitesGetFunction() {}
19
20bool TopSitesGetFunction::RunAsync() {
21  history::TopSites* ts = GetProfile()->GetTopSites();
22  if (!ts)
23    return false;
24
25  ts->GetMostVisitedURLs(
26      base::Bind(&TopSitesGetFunction::OnMostVisitedURLsAvailable,
27                 weak_ptr_factory_.GetWeakPtr()), false);
28  return true;
29}
30
31void TopSitesGetFunction::OnMostVisitedURLsAvailable(
32    const history::MostVisitedURLList& data) {
33  scoped_ptr<base::ListValue> pages_value(new base::ListValue);
34  for (size_t i = 0; i < data.size(); i++) {
35    const history::MostVisitedURL& url = data[i];
36    if (!url.url.is_empty()) {
37      base::DictionaryValue* page_value = new base::DictionaryValue();
38      page_value->SetString("url", url.url.spec());
39      if (url.title.empty())
40        page_value->SetString("title", url.url.spec());
41      else
42        page_value->SetString("title", url.title);
43      pages_value->Append(page_value);
44    }
45  }
46
47  SetResult(pages_value.release());
48  SendResponse(true);
49}
50
51}  // namespace extensions
52