| Index: chrome/browser/extensions/context_menu_matcher.h
|
| diff --git a/chrome/browser/extensions/context_menu_matcher.h b/chrome/browser/extensions/context_menu_matcher.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7d497f615fb3ad68227790893fe2dbd5f66820be
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/context_menu_matcher.h
|
| @@ -0,0 +1,86 @@
|
| +// Copyright (c) 2012 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_CONTEXT_MENU_MATCHER_H_
|
| +#define CHROME_BROWSER_EXTENSIONS_CONTEXT_MENU_MATCHER_H_
|
| +
|
| +#include <map>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/scoped_vector.h"
|
| +#include "chrome/browser/extensions/menu_manager.h"
|
| +#include "ui/base/models/simple_menu_model.h"
|
| +
|
| +class ExtensionContextMenuBrowserTest;
|
| +class Profile;
|
| +
|
| +namespace extensions {
|
| +
|
| +// This class contains code that is shared between the various places where
|
| +// context menu items added by the extension or app should be shown.
|
| +class ContextMenuMatcher {
|
| + public:
|
| + static const size_t kMaxExtensionItemTitleLength;
|
| +
|
| + // The |filter| will be called on possibly matching menu items, and its
|
| + // result is used to determine which items to actually append to the menu.
|
| + ContextMenuMatcher(Profile* profile,
|
| + ui::SimpleMenuModel::Delegate* delegate,
|
| + ui::SimpleMenuModel* menu_model,
|
| + const base::Callback<bool(const MenuItem*)>& filter);
|
| +
|
| + // This is a helper function to append items for one particular extension.
|
| + // The |index| parameter is used for assigning id's, and is incremented for
|
| + // each item actually added.
|
| + void AppendExtensionItems(const std::string& extension_id,
|
| + const string16& selection_text,
|
| + int* index);
|
| +
|
| + void Clear();
|
| +
|
| + bool IsCommandIdChecked(int command_id) const;
|
| + bool IsCommandIdEnabled(int command_id) const;
|
| + void ExecuteCommand(int command_id,
|
| + const content::ContextMenuParams& params);
|
| +
|
| + private:
|
| + friend class ::ExtensionContextMenuBrowserTest;
|
| +
|
| + MenuItem::List GetRelevantExtensionItems(
|
| + const MenuItem::List& items,
|
| + bool can_cross_incognito);
|
| +
|
| + // Used for recursively adding submenus of extension items.
|
| + void RecursivelyAppendExtensionItems(
|
| + const MenuItem::List& items,
|
| + bool can_cross_incognito,
|
| + const string16& selection_text,
|
| + ui::SimpleMenuModel* menu_model,
|
| + int* index);
|
| +
|
| + // Attempts to get an MenuItem given the id of a context menu item.
|
| + extensions::MenuItem* GetExtensionMenuItem(int id) const;
|
| +
|
| + // This will set the icon on the most recently-added item in the menu_model_.
|
| + void SetExtensionIcon(const std::string& extension_id);
|
| +
|
| + Profile* profile_;
|
| + ui::SimpleMenuModel* menu_model_;
|
| + ui::SimpleMenuModel::Delegate* delegate_;
|
| +
|
| + base::Callback<bool(const MenuItem*)> filter_;
|
| +
|
| + // Maps the id from a context menu item to the MenuItem's internal id.
|
| + std::map<int, extensions::MenuItem::Id> extension_item_map_;
|
| +
|
| + // Keep track of and clean up menu models for submenus.
|
| + ScopedVector<ui::SimpleMenuModel> extension_menu_models_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ContextMenuMatcher);
|
| +};
|
| +
|
| +} // namespace extensions
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_CONTEXT_MENU_MATCHER_H_
|
|
|