1// Copyright (c) 2010 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_EXTENSIONS_EXTENSION_BOOKMARK_MANAGER_API_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_BOOKMARK_MANAGER_API_H_
7#pragma once
8
9#include "chrome/browser/bookmarks/bookmark_node_data.h"
10#include "chrome/browser/extensions/extension_bookmarks_module.h"
11#include "chrome/browser/extensions/extension_function.h"
12#include "content/browser/renderer_host/render_view_host_delegate.h"
13
14struct BookmarkNodeData;
15class ListValue;
16class Profile;
17class TabContents;
18
19// Class that handles the chrome.experimental.bookmarkManager events.
20class ExtensionBookmarkManagerEventRouter
21    : public RenderViewHostDelegate::BookmarkDrag {
22 public:
23  ExtensionBookmarkManagerEventRouter(Profile* profile,
24                                      TabContents* tab_contents);
25  virtual ~ExtensionBookmarkManagerEventRouter();
26
27  // RenderViewHostDelegate::BookmarkDrag interface
28  virtual void OnDragEnter(const BookmarkNodeData& data);
29  virtual void OnDragOver(const BookmarkNodeData& data);
30  virtual void OnDragLeave(const BookmarkNodeData& data);
31  virtual void OnDrop(const BookmarkNodeData& data);
32
33  // The bookmark drag and drop data. This gets set after a drop was done on
34  // the page. This returns NULL if no data is available.
35  const BookmarkNodeData* GetBookmarkNodeData();
36
37  // Clears the drag and drop data.
38  void ClearBookmarkNodeData();
39
40 private:
41  // Helper to actually dispatch an event to extension listeners.
42  void DispatchEvent(const char* event_name, const ListValue* args);
43
44  void DispatchDragEvent(const BookmarkNodeData& data, const char* event_name);
45
46  Profile* profile_;
47  TabContents* tab_contents_;
48  BookmarkNodeData bookmark_drag_data_;
49
50  DISALLOW_COPY_AND_ASSIGN(ExtensionBookmarkManagerEventRouter);
51};
52
53class ClipboardBookmarkManagerFunction : public BookmarksFunction {
54 protected:
55  bool CopyOrCut(bool cut);
56};
57
58class CopyBookmarkManagerFunction : public ClipboardBookmarkManagerFunction {
59 public:
60  // Override ClipboardBookmarkManagerFunction.
61  virtual bool RunImpl();
62
63 private:
64  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.copy");
65};
66
67class CutBookmarkManagerFunction : public ClipboardBookmarkManagerFunction {
68 public:
69  // Override ClipboardBookmarkManagerFunction.
70  virtual bool RunImpl();
71
72 private:
73  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.cut");
74};
75
76class PasteBookmarkManagerFunction : public BookmarksFunction {
77 public:
78  // Override BookmarksFunction.
79  virtual bool RunImpl();
80
81 private:
82  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.paste");
83};
84
85class CanPasteBookmarkManagerFunction
86    : public BookmarksFunction {
87 public:
88  // Override BookmarksFunction.
89  virtual bool RunImpl();
90
91 private:
92  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.canPaste");
93};
94
95class SortChildrenBookmarkManagerFunction
96    : public BookmarksFunction {
97 public:
98  // Override BookmarksFunction.
99  virtual bool RunImpl();
100
101 private:
102  DECLARE_EXTENSION_FUNCTION_NAME(
103      "experimental.bookmarkManager.sortChildren");
104};
105
106class BookmarkManagerGetStringsFunction : public AsyncExtensionFunction {
107 public:
108  // Override AsyncExtensionFunction.
109  virtual bool RunImpl();
110
111 private:
112  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.getStrings");
113};
114
115class StartDragBookmarkManagerFunction
116    : public BookmarksFunction {
117 public:
118  // Override BookmarksFunction.
119  virtual bool RunImpl();
120
121 private:
122  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.startDrag");
123};
124
125class DropBookmarkManagerFunction : public BookmarksFunction {
126 public:
127  virtual bool RunImpl();
128
129 private:
130  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.drop");
131};
132
133
134class GetSubtreeBookmarkManagerFunction : public BookmarksFunction {
135 public:
136  // Override BookmarksFunction
137  virtual bool RunImpl();
138
139 private:
140  DECLARE_EXTENSION_FUNCTION_NAME("experimental.bookmarkManager.getSubtree");
141};
142
143#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_BOOKMARK_MANAGER_API_H_
144