// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_API_H__
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_API_H__
#pragma once
#include "chrome/browser/extensions/extension_function.h"
#include "chrome/browser/extensions/extension_menu_manager.h"
#include "chrome/common/extensions/extension_extent.h"
class DictionaryValue;
class ExtensionMenuItem;
class ExtensionContextMenuFunction : public SyncExtensionFunction {
public:
~ExtensionContextMenuFunction() {}
protected:
// Helper function to read and parse a list of menu item contexts.
bool ParseContexts(const DictionaryValue& properties,
const char* key,
ExtensionMenuItem::ContextList* result);
// Looks in properties for the "type" key, and reads the value in |result|. On
// error, returns false and puts an error message into error_. If the key is
// not present, |result| is set to |default_value| and the return value is
// true.
bool ParseType(const DictionaryValue& properties,
const ExtensionMenuItem::Type& default_value,
ExtensionMenuItem::Type* result);
// Helper to read and parse the "checked" property.
bool ParseChecked(ExtensionMenuItem::Type type,
const DictionaryValue& properties,
bool default_value,
bool* checked);
// Helper to read in a set of url patterns from a property with the given key
// name.
bool ParseURLPatterns(const DictionaryValue& properties,
const char* key,
ExtensionExtent* result);
// Reads in any document and targetUrl patterns from |properties| and sets
// them on |item|.
bool SetURLPatterns(const DictionaryValue& properties,
ExtensionMenuItem* item);
// If the parentId key was specified in properties, this will try looking up
// an ExtensionMenuItem with that id and set it into |result|. Returns false
// on error, with an explanation written into error_. Note that if the
// parentId key is not in properties, this will return true and leave |result|
// unset. Also, it is considered an error if the item found has a type other
// than NORMAL.
bool GetParent(const DictionaryValue& properties,
const ExtensionMenuManager& manager,
ExtensionMenuItem** result);
};
class CreateContextMenuFunction : public ExtensionContextMenuFunction {
~CreateContextMenuFunction() {}
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.create")
};
class UpdateContextMenuFunction : public ExtensionContextMenuFunction {
~UpdateContextMenuFunction() {}
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.update")
};
class RemoveContextMenuFunction : public ExtensionContextMenuFunction {
~RemoveContextMenuFunction() {}
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.remove")
};
class RemoveAllContextMenusFunction : public ExtensionContextMenuFunction {
~RemoveAllContextMenusFunction() {}
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("contextMenus.removeAll")
};
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_API_H__