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#ifndef CHROME_BROWSER_UI_WEBUI_COOKIES_TREE_MODEL_UTIL_H_
6#define CHROME_BROWSER_UI_WEBUI_COOKIES_TREE_MODEL_UTIL_H_
7
8#include <map>
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/id_map.h"
13
14class CookieTreeNode;
15
16namespace base {
17class DictionaryValue;
18class ListValue;
19}
20
21class CookiesTreeModelUtil {
22 public:
23  CookiesTreeModelUtil();
24  ~CookiesTreeModelUtil();
25
26  // Finds or creates an ID for given |node| and returns it as string.
27  std::string GetTreeNodeId(const CookieTreeNode* node);
28
29  // Append the children nodes of |parent| in specified range to |nodes| list.
30  void GetChildNodeList(const CookieTreeNode* parent,
31                        int start,
32                        int count,
33                        base::ListValue* nodes);
34
35  // Gets tree node from |path| under |root|. |path| is comma separated list of
36  // ids. |id_map| translates ids into object pointers. Return NULL if |path|
37  // is not valid.
38  const CookieTreeNode* GetTreeNodeFromPath(const CookieTreeNode* root,
39                                            const std::string& path);
40
41 private:
42  typedef IDMap<const CookieTreeNode> CookiesTreeNodeIdMap;
43  typedef std::map<const CookieTreeNode*, int32> CookieTreeNodeMap;
44
45  // Populate given |dict| with cookie tree node properties. |id_map| maps
46  // a CookieTreeNode to an ID and creates a new ID if |node| is not in the
47  // maps. Returns false if the |node| does not need to be shown.
48  bool GetCookieTreeNodeDictionary(const CookieTreeNode& node,
49                                   base::DictionaryValue* dict);
50
51  // IDMap to create unique ID and look up the object for an ID.
52  CookiesTreeNodeIdMap id_map_;
53
54  // Reverse look up map to find the ID for a node.
55  CookieTreeNodeMap node_map_;
56
57  DISALLOW_COPY_AND_ASSIGN(CookiesTreeModelUtil);
58};
59
60#endif  // CHROME_BROWSER_UI_WEBUI_COOKIES_TREE_MODEL_UTIL_H_
61