12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/command.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handler.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct CommandsInfo : public Extension::ManifestData { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandsInfo(); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CommandsInfo(); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Optional list of commands (keyboard shortcuts). 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These commands are the commands which the extension wants to use, which are 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not necessarily the ones it can use, as it might be inactive (see also 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get*Command[s] in CommandService). 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Command> browser_action_command; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Command> page_action_command; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandMap named_commands; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const Command* GetBrowserActionCommand(const Extension* extension); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const Command* GetPageActionCommand(const Extension* extension); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const CommandMap* GetNamedCommands(const Extension* extension); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parses the "commands" manifest key. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CommandsHandler : public ManifestHandler { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandsHandler(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CommandsHandler(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool AlwaysParseForType(Manifest::Type type) const OVERRIDE; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the extension defines a browser action, but no command for it, then 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // we synthesize a generic one, so the user can configure a shortcut for it. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No keyboard shortcut will be assigned to it, until the user selects one. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MaybeSetBrowserActionDefault(const Extension* extension, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandsInfo* info); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const std::vector<std::string> Keys() const OVERRIDE; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CommandsHandler); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_ 59