text: // 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.
  
  #include "chrome/browser/extensions/api/commands/commands.h"
  
  #include "chrome/browser/extensions/api/commands/command_service.h"
  
  namespace {
  
  base::DictionaryValue* CreateCommandValue(
      const extensions::Command& command, bool active) {
    base::DictionaryValue* result = new base::DictionaryValue();
    result->SetString("name", command.command_name());
    result->SetString("description", command.description());
    result->SetString("shortcut",
                      active ? command.accelerator().GetShortcutText() :
                               string16());
    return result;
  }
  
  }  // namespace
  
  bool GetAllCommandsFunction::RunImpl() {
    base::ListValue* command_list = new base::ListValue();
  
    extensions::CommandService* command_service =
        extensions::CommandService::Get(GetProfile());
  
    extensions::Command browser_action;
    bool active = false;
    if (command_service->GetBrowserActionCommand(extension_->id(),
            extensions::CommandService::ALL,
            &browser_action,
            &active)) {
      command_list->Append(CreateCommandValue(browser_action, active));
    }
  
    extensions::Command page_action;
    if (command_service->GetPageActionCommand(extension_->id(),
            extensions::CommandService::ALL,
            &page_action,
            &active)) {
      command_list->Append(CreateCommandValue(page_action, active));
    }
  
    extensions::Command script_badge;
    if (command_service->GetScriptBadgeCommand(extension_->id(),
            extensions::CommandService::ALL,
            &script_badge,
            &active)) {
      command_list->Append(CreateCommandValue(script_badge, active));
    }
  
    extensions::CommandMap named_commands;
    command_service->GetNamedCommands(extension_->id(),
                                      extensions::CommandService::ALL,
                                      extensions::CommandService::ANY_SCOPE,
                                      &named_commands);
  
    for (extensions::CommandMap::const_iterator iter = named_commands.begin();
         iter != named_commands.end(); ++iter) {
      extensions::Command command = command_service->FindCommandByName(
          extension_->id(), iter->second.command_name());
      ui::Accelerator shortcut_assigned = command.accelerator();
      active = (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN);
  
      command_list->Append(CreateCommandValue(iter->second, active));
    }
  
    SetResult(command_list);
    return true;
  }
  