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_CONTEXT_MENU_API_H__
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_API_H__
7#pragma once
8
9#include "chrome/browser/extensions/extension_function.h"
10#include "chrome/browser/extensions/extension_menu_manager.h"
11#include "chrome/common/extensions/extension_extent.h"
12
13class DictionaryValue;
14class ExtensionMenuItem;
15
16class ExtensionContextMenuFunction : public SyncExtensionFunction {
17 public:
18  ~ExtensionContextMenuFunction() {}
19
20 protected:
21  // Helper function to read and parse a list of menu item contexts.
22  bool ParseContexts(const DictionaryValue& properties,
23                     const char* key,
24                     ExtensionMenuItem::ContextList* result);
25
26  // Looks in properties for the "type" key, and reads the value in |result|. On
27  // error, returns false and puts an error message into error_. If the key is
28  // not present, |result| is set to |default_value| and the return value is
29  // true.
30  bool ParseType(const DictionaryValue& properties,
31                 const ExtensionMenuItem::Type& default_value,
32                 ExtensionMenuItem::Type* result);
33
34  // Helper to read and parse the "checked" property.
35  bool ParseChecked(ExtensionMenuItem::Type type,
36                    const DictionaryValue& properties,
37                    bool default_value,
38                    bool* checked);
39
40  // Helper to read in a set of url patterns from a property with the given key
41  // name.
42  bool ParseURLPatterns(const DictionaryValue& properties,
43                        const char* key,
44                        ExtensionExtent* result);
45
46  // Reads in any document and targetUrl patterns from |properties| and sets
47  // them on |item|.
48  bool SetURLPatterns(const DictionaryValue& properties,
49                      ExtensionMenuItem* item);
50
51  // If the parentId key was specified in properties, this will try looking up
52  // an ExtensionMenuItem with that id and set it into |result|. Returns false
53  // on error, with an explanation written into error_. Note that if the
54  // parentId key is not in properties, this will return true and leave |result|
55  // unset. Also, it is considered an error if the item found has a type other
56  // than NORMAL.
57  bool GetParent(const DictionaryValue& properties,
58                 const ExtensionMenuManager& manager,
59                 ExtensionMenuItem** result);
60};
61
62class CreateContextMenuFunction : public ExtensionContextMenuFunction {
63  ~CreateContextMenuFunction() {}
64  virtual bool RunImpl();
65  DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.create")
66};
67
68class UpdateContextMenuFunction : public ExtensionContextMenuFunction {
69  ~UpdateContextMenuFunction() {}
70  virtual bool RunImpl();
71  DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.update")
72};
73
74class RemoveContextMenuFunction : public ExtensionContextMenuFunction {
75  ~RemoveContextMenuFunction() {}
76  virtual bool RunImpl();
77  DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.remove")
78};
79
80class RemoveAllContextMenusFunction : public ExtensionContextMenuFunction {
81  ~RemoveAllContextMenusFunction() {}
82  virtual bool RunImpl();
83  DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.removeAll")
84};
85
86#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_API_H__
87