gecko-dev/devtools/client/webreplay/menu.js
Ryan Hunt 3675f2449b Bug 1534395 - Rename nsITabParent to nsIRemoteTab. r=nika,mconley
nsITabParent is exposed to frontend code and is generally used as a representation of a remote tab. We could just rename the interface to nsIBrowserParent and worry about it later, but I think it's better to rename the interface to nsIRemoteTab so that we can later work on splitting the interface away from the PBrowser protocol.

Note: Some frontend code refers to a TabParentId. This commit renames this to RemoteTabId. We need to figure out the purpose of TabId with fission.

Differential Revision: https://phabricator.services.mozilla.com/D28132

--HG--
rename : dom/interfaces/base/nsITabParent.idl => dom/interfaces/base/nsIRemoteTab.idl
extra : rebase_source : 9d8a1790a7bb10195ad063644d1a93d63b2afb72
2019-04-09 15:59:37 -05:00

120 lines
4.4 KiB
JavaScript

/* -*- indent-tabs-mode: nil; js-indent-level: 2; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* 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/. */
"use strict";
const { Cc, Ci } = require("chrome");
const {LocalizationHelper} = require("devtools/shared/l10n");
const MENUS_L10N = new LocalizationHelper("devtools/client/locales/menus.properties");
function l10n(key) {
return MENUS_L10N.getStr(key);
}
const ChromeUtils = require("ChromeUtils");
ChromeUtils.defineModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
E10SUtils: "resource://gre/modules/E10SUtils.jsm",
});
function RecordNewTab() {
const { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser");
gBrowser.selectedTab = gBrowser.addWebTab("about:blank", { recordExecution: "*" });
Services.telemetry.scalarAdd("devtools.webreplay.new_recording", 1);
}
function ReloadAndRecordTab() {
const { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser");
const url = gBrowser.currentURI.spec;
gBrowser.updateBrowserRemoteness(gBrowser.selectedBrowser, {
recordExecution: "*", newFrameloader: true,
remoteType: E10SUtils.DEFAULT_REMOTE_TYPE,
});
gBrowser.loadURI(url, {
triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal,
});
Services.telemetry.scalarAdd("devtools.webreplay.reload_recording", 1);
}
function ReloadAndStopRecordingTab() {
const { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser");
const url = gBrowser.currentURI.spec;
gBrowser.updateBrowserRemoteness(gBrowser.selectedBrowser, {
newFrameloader: true,
remoteType: E10SUtils.DEFAULT_REMOTE_TYPE,
});
gBrowser.loadURI(url, {
triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal,
});
Services.telemetry.scalarAdd("devtools.webreplay.stop_recording", 1);
}
function SaveRecording() {
const { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser");
const fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
const window = gBrowser.ownerGlobal;
fp.init(window, null, Ci.nsIFilePicker.modeSave);
fp.open(rv => {
if (rv == Ci.nsIFilePicker.returnOK || rv == Ci.nsIFilePicker.returnReplace) {
const remoteTab = gBrowser.selectedTab.linkedBrowser.frameLoader.remoteTab;
if (!remoteTab || !remoteTab.saveRecording(fp.file.path)) {
window.alert("Current tab is not recording");
}
}
});
Services.telemetry.scalarAdd("devtools.webreplay.save_recording", 1);
}
function ReplayNewTab() {
const { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser");
const fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
const window = gBrowser.ownerGlobal;
fp.init(window, null, Ci.nsIFilePicker.modeOpen);
fp.open(rv => {
if (rv == Ci.nsIFilePicker.returnOK || rv == Ci.nsIFilePicker.returnReplace) {
gBrowser.selectedTab = gBrowser.addWebTab(null, { replayExecution: fp.file.path });
}
});
Services.telemetry.scalarAdd("devtools.webreplay.load_recording", 1);
}
const menuItems = [
{ id: "devtoolsRecordNewTab", command: RecordNewTab },
{ id: "devtoolsReloadAndRecordTab", command: ReloadAndRecordTab },
{ id: "devtoolsSaveRecording", command: SaveRecording },
{ id: "devtoolsReplayNewTab", command: ReplayNewTab },
];
exports.addWebReplayMenu = function(doc) {
const menu = doc.createXULElement("menu");
menu.id = "menu_webreplay";
menu.setAttribute("label", l10n("devtoolsWebReplay.label"));
menu.setAttribute("hidden", "true");
const popup = doc.createXULElement("menupopup");
popup.id = "menupopup_webreplay";
menu.appendChild(popup);
for (const { id, command } of menuItems) {
const menuitem = doc.createXULElement("menuitem");
menuitem.id = id;
menuitem.setAttribute("label", l10n(id + ".label"));
menuitem.addEventListener("command", command);
popup.appendChild(menuitem);
}
const mds = doc.getElementById("menu_devtools_separator");
if (mds) {
mds.parentNode.insertBefore(menu, mds);
}
};
exports.reloadAndRecordTab = ReloadAndRecordTab;
exports.reloadAndStopRecordingTab = ReloadAndStopRecordingTab;