summaryrefslogtreecommitdiffstats
path: root/layout/tools/recording
diff options
context:
space:
mode:
Diffstat (limited to 'layout/tools/recording')
-rw-r--r--layout/tools/recording/jar.mn4
-rw-r--r--layout/tools/recording/moz.build12
-rw-r--r--layout/tools/recording/recording-cmdline.js74
-rw-r--r--layout/tools/recording/recording-cmdline.manifest3
-rw-r--r--layout/tools/recording/recording.js47
-rw-r--r--layout/tools/recording/recording.xul13
6 files changed, 153 insertions, 0 deletions
diff --git a/layout/tools/recording/jar.mn b/layout/tools/recording/jar.mn
new file mode 100644
index 000000000..89923578f
--- /dev/null
+++ b/layout/tools/recording/jar.mn
@@ -0,0 +1,4 @@
+recording.jar:
+% content recording %content/
+ content/recording.xul (recording.xul)
+ content/recording.js (recording.js)
diff --git a/layout/tools/recording/moz.build b/layout/tools/recording/moz.build
new file mode 100644
index 000000000..74b7e9a6d
--- /dev/null
+++ b/layout/tools/recording/moz.build
@@ -0,0 +1,12 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+EXTRA_COMPONENTS += [
+ 'recording-cmdline.js',
+ 'recording-cmdline.manifest',
+]
+
+JAR_MANIFESTS += ['jar.mn'] \ No newline at end of file
diff --git a/layout/tools/recording/recording-cmdline.js b/layout/tools/recording/recording-cmdline.js
new file mode 100644
index 000000000..e043aa29c
--- /dev/null
+++ b/layout/tools/recording/recording-cmdline.js
@@ -0,0 +1,74 @@
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+const nsISupports = Components.interfaces.nsISupports;
+
+const nsICommandLine = Components.interfaces.nsICommandLine;
+const nsICommandLineHandler = Components.interfaces.nsICommandLineHandler;
+const nsISupportsString = Components.interfaces.nsISupportsString;
+const nsIWindowWatcher = Components.interfaces.nsIWindowWatcher;
+
+function RecordingCmdLineHandler() {}
+RecordingCmdLineHandler.prototype =
+{
+ classID: Components.ID('{86FB70EC-90FF-45AD-A1C1-F77D3C1184E9}'),
+
+ /* nsISupports */
+ QueryInterface: XPCOMUtils.generateQI([nsICommandLineHandler]),
+
+ /* nsICommandLineHandler */
+ handle : function handler_handle(cmdLine) {
+ var args = { };
+ args.wrappedJSObject = args;
+ try {
+ var uristr = cmdLine.handleFlagWithParam("recording", false);
+ if (uristr == null)
+ return;
+ try {
+ args.uri = cmdLine.resolveURI(uristr).spec;
+ }
+ catch (e) {
+ return;
+ }
+ }
+ catch (e) {
+ cmdLine.handleFlag("recording", true);
+ }
+
+ /**
+ * Manipulate preferences by adding to the *default* branch. Adding
+ * to the default branch means the changes we make won't get written
+ * back to user preferences.
+ *
+ * We want to do this here rather than in reftest.js because it's
+ * important to set the recording pref before the platform Init gets
+ * called.
+ */
+ var prefs = Components.classes["@mozilla.org/preferences-service;1"].
+ getService(Components.interfaces.nsIPrefService);
+ var branch = prefs.getDefaultBranch("");
+
+ try {
+ var outputstr = cmdLine.handleFlagWithParam("recording-output", false);
+ if (outputstr != null) {
+ branch.setCharPref("gfx.2d.recordingfile", outputstr);
+ }
+ } catch (e) { }
+
+ branch.setBoolPref("gfx.2d.recording", true);
+
+ var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
+ .getService(nsIWindowWatcher);
+ wwatch.openWindow(null, "chrome://recording/content/recording.xul", "_blank",
+ "chrome,dialog=no,all", args);
+ cmdLine.preventDefault = true;
+ },
+
+ helpInfo : " --recording <file> Record drawing for a given URL.\n" +
+ " --recording-output <file> Specify destination file for a drawing recording.\n"
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([RecordingCmdLineHandler]);
diff --git a/layout/tools/recording/recording-cmdline.manifest b/layout/tools/recording/recording-cmdline.manifest
new file mode 100644
index 000000000..7b4216721
--- /dev/null
+++ b/layout/tools/recording/recording-cmdline.manifest
@@ -0,0 +1,3 @@
+component {86FB70EC-90FF-45AD-A1C1-F77D3C1184E9} recording-cmdline.js
+contract @mozilla.org/commandlinehandler/general-startup;1?type=recording {86FB70EC-90FF-45AD-A1C1-F77D3C1184E9}
+category command-line-handler m-recording @mozilla.org/commandlinehandler/general-startup;1?type=recording
diff --git a/layout/tools/recording/recording.js b/layout/tools/recording/recording.js
new file mode 100644
index 000000000..552423c9f
--- /dev/null
+++ b/layout/tools/recording/recording.js
@@ -0,0 +1,47 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- /
+/* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */
+/* 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/. */
+
+var CC = Components.classes;
+const CI = Components.interfaces;
+
+const NS_GFXINFO_CONTRACTID = "@mozilla.org/gfx/info;1";
+
+var gContainingWindow = null;
+
+var gBrowser;
+
+function OnDocumentLoad(evt) {
+ if (evt.target != gBrowser.contentDocument || evt.target.location == "about:blank")
+ return;
+ gBrowser.removeEventListener("load", OnDocumentLoad, true);
+ gContainingWindow.close();
+}
+
+this.OnRecordingLoad = function OnRecordingLoad(win) {
+ if (win === undefined || win == null) {
+ win = window;
+ }
+ if (gContainingWindow == null && win != null) {
+ gContainingWindow = win;
+ }
+
+ gBrowser = gContainingWindow.document.getElementById("browser");
+
+ var gfxInfo = (NS_GFXINFO_CONTRACTID in CC) && CC[NS_GFXINFO_CONTRACTID].getService(CI.nsIGfxInfo);
+ var info = gfxInfo.getInfo();
+ dump(info.AzureContentBackend + "\n");
+ if (info.AzureContentBackend == "none") {
+ alert("Page recordings may only be made with Azure content enabled.");
+ gContainingWindow.close();
+ return;
+ }
+
+ gBrowser.addEventListener("load", OnDocumentLoad, true);
+
+ var args = window.arguments[0].wrappedJSObject;
+
+ gBrowser.loadURI(args.uri);
+};
diff --git a/layout/tools/recording/recording.xul b/layout/tools/recording/recording.xul
new file mode 100644
index 000000000..276d3aa71
--- /dev/null
+++ b/layout/tools/recording/recording.xul
@@ -0,0 +1,13 @@
+<!-- vim: set shiftwidth=4 tabstop=8 autoindent expandtab: -->
+<!-- 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/. -->
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ id="recording-window"
+ hidechrome="true"
+ onload="OnRecordingLoad();"
+ style="background:white; overflow:hidden; width:800px; height:600px;"
+ >
+ <script type="application/ecmascript" src="recording.js" />
+ <browser id="browser" type="content-primary" style="min-width: 1024px; min-height: 768px; max-width: 1024px; max-height: 768px"/>
+</window>