• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 class DictionaryValue;
14 class ExtensionMenuItem;
15 
16 class ExtensionContextMenuFunction : public SyncExtensionFunction {
17  public:
~ExtensionContextMenuFunction()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 
62 class CreateContextMenuFunction : public ExtensionContextMenuFunction {
~CreateContextMenuFunction()63   ~CreateContextMenuFunction() {}
64   virtual bool RunImpl();
65   DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.create")
66 };
67 
68 class UpdateContextMenuFunction : public ExtensionContextMenuFunction {
~UpdateContextMenuFunction()69   ~UpdateContextMenuFunction() {}
70   virtual bool RunImpl();
71   DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.update")
72 };
73 
74 class RemoveContextMenuFunction : public ExtensionContextMenuFunction {
~RemoveContextMenuFunction()75   ~RemoveContextMenuFunction() {}
76   virtual bool RunImpl();
77   DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.remove")
78 };
79 
80 class RemoveAllContextMenusFunction : public ExtensionContextMenuFunction {
~RemoveAllContextMenusFunction()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