// -*- Mode: javascript; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

this.EXPORTED_SYMBOLS = ["RemoteController"];

const Ci = Components.interfaces;
const Cc = Components.classes;
const Cu = Components.utils;

Cu.import("resource://gre/modules/XPCOMUtils.jsm");

function RemoteController(browser)
{
  this._browser = browser;
}

RemoteController.prototype = {
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIController]),

  isCommandEnabled: function(aCommand) {
    // We can't synchronously ask content if a command is enabled,
    // so we always pretend is.
    // The right way forward would be to never use nsIController
    // to ask if something in content is enabled. Maybe even
    // by replacing the nsIController architecture by something else.
    // See bug 905768.
    return true;
  },

  supportsCommand: function(aCommand) {
    // Optimize the lookup a bit.
    if (!aCommand.startsWith("cmd_"))
      return false;

    // For now only support the commands used in "browser-context.inc"
    let commands = [
      "cmd_copyLink",
      "cmd_copyImage",
      "cmd_undo",
      "cmd_cut",
      "cmd_copy",
      "cmd_paste",
      "cmd_delete",
      "cmd_selectAll",
      "cmd_switchTextDirection"
    ];

    return commands.indexOf(aCommand) >= 0;
  },

  doCommand: function(aCommand) {
    this._browser.messageManager.sendAsyncMessage("ControllerCommands:Do", aCommand);
  },

  onEvent: function () {}
};
