1// Copyright 2014 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 "components/bookmarks/test/test_bookmark_client.h"
6
7#include "base/bind.h"
8#include "base/bind_helpers.h"
9#include "base/logging.h"
10#include "components/bookmarks/browser/bookmark_model.h"
11#include "components/bookmarks/browser/bookmark_node.h"
12#include "components/bookmarks/browser/bookmark_storage.h"
13
14namespace bookmarks {
15
16TestBookmarkClient::TestBookmarkClient() {}
17
18TestBookmarkClient::~TestBookmarkClient() {}
19
20scoped_ptr<BookmarkModel> TestBookmarkClient::CreateModel() {
21  scoped_ptr<BookmarkModel> bookmark_model(new BookmarkModel(this));
22  scoped_ptr<bookmarks::BookmarkLoadDetails> details =
23      bookmark_model->CreateLoadDetails(std::string());
24  details->LoadExtraNodes();
25  bookmark_model->DoneLoading(details.Pass());
26  return bookmark_model.Pass();
27}
28
29void TestBookmarkClient::SetExtraNodesToLoad(
30    bookmarks::BookmarkPermanentNodeList extra_nodes) {
31  extra_nodes_to_load_ = extra_nodes.Pass();
32  // Keep a copy in |extra_nodes_| for the acessor.
33  extra_nodes_ = extra_nodes_to_load_.get();
34}
35
36bool TestBookmarkClient::IsExtraNodeRoot(const BookmarkNode* node) {
37  for (size_t i = 0; i < extra_nodes_.size(); ++i) {
38    if (node == extra_nodes_[i])
39      return true;
40  }
41  return false;
42}
43
44bool TestBookmarkClient::IsAnExtraNode(const BookmarkNode* node) {
45  if (!node)
46    return false;
47  for (size_t i = 0; i < extra_nodes_.size(); ++i) {
48    if (node->HasAncestor(extra_nodes_[i]))
49      return true;
50  }
51  return false;
52}
53
54bool TestBookmarkClient::IsPermanentNodeVisible(
55    const BookmarkPermanentNode* node) {
56  DCHECK(node->type() == BookmarkNode::BOOKMARK_BAR ||
57         node->type() == BookmarkNode::OTHER_NODE ||
58         node->type() == BookmarkNode::MOBILE ||
59         IsExtraNodeRoot(node));
60  return node->type() != BookmarkNode::MOBILE && !IsExtraNodeRoot(node);
61}
62
63void TestBookmarkClient::RecordAction(const base::UserMetricsAction& action) {
64}
65
66bookmarks::LoadExtraCallback TestBookmarkClient::GetLoadExtraNodesCallback() {
67  return base::Bind(&TestBookmarkClient::LoadExtraNodes,
68                    base::Passed(&extra_nodes_to_load_));
69}
70
71bool TestBookmarkClient::CanSetPermanentNodeTitle(
72    const BookmarkNode* permanent_node) {
73  return IsExtraNodeRoot(permanent_node);
74}
75
76bool TestBookmarkClient::CanSyncNode(const BookmarkNode* node) {
77  return !IsAnExtraNode(node);
78}
79
80bool TestBookmarkClient::CanBeEditedByUser(const BookmarkNode* node) {
81  return !IsAnExtraNode(node);
82}
83
84// static
85bookmarks::BookmarkPermanentNodeList TestBookmarkClient::LoadExtraNodes(
86    bookmarks::BookmarkPermanentNodeList extra_nodes,
87    int64* next_id) {
88  return extra_nodes.Pass();
89}
90
91}  // namespace bookmarks
92