1 // Copyright (c) 2013 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_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 6 #define CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 7 8 #include <memory> 9 #include <string> 10 11 #include "base/macros.h" 12 #include "chrome/common/extensions/command.h" 13 #include "extensions/common/extension.h" 14 #include "extensions/common/manifest.h" 15 #include "extensions/common/manifest_handler.h" 16 17 namespace extensions { 18 19 struct CommandsInfo : public Extension::ManifestData { 20 CommandsInfo(); 21 ~CommandsInfo() override; 22 23 // Optional list of commands (keyboard shortcuts). 24 // These commands are the commands which the extension wants to use, which are 25 // not necessarily the ones it can use, as it might be inactive (see also 26 // Get*Command[s] in CommandService). 27 std::unique_ptr<Command> browser_action_command; 28 std::unique_ptr<Command> page_action_command; 29 CommandMap named_commands; 30 31 static const Command* GetBrowserActionCommand(const Extension* extension); 32 static const Command* GetPageActionCommand(const Extension* extension); 33 static const CommandMap* GetNamedCommands(const Extension* extension); 34 }; 35 36 // Parses the "commands" manifest key. 37 class CommandsHandler : public ManifestHandler { 38 public: 39 CommandsHandler(); 40 ~CommandsHandler() override; 41 42 bool Parse(Extension* extension, base::string16* error) override; 43 bool AlwaysParseForType(Manifest::Type type) const override; 44 45 private: 46 // If the extension defines a browser action, but no command for it, then 47 // we synthesize a generic one, so the user can configure a shortcut for it. 48 // No keyboard shortcut will be assigned to it, until the user selects one. 49 void MaybeSetBrowserActionDefault(const Extension* extension, 50 CommandsInfo* info); 51 52 base::span<const char* const> Keys() const override; 53 54 DISALLOW_COPY_AND_ASSIGN(CommandsHandler); 55 }; 56 57 } // namespace extensions 58 59 #endif // CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 60