diff options
Diffstat (limited to 'layout/tools/recording')
-rw-r--r-- | layout/tools/recording/jar.mn | 4 | ||||
-rw-r--r-- | layout/tools/recording/moz.build | 12 | ||||
-rw-r--r-- | layout/tools/recording/recording-cmdline.js | 74 | ||||
-rw-r--r-- | layout/tools/recording/recording-cmdline.manifest | 3 | ||||
-rw-r--r-- | layout/tools/recording/recording.js | 47 | ||||
-rw-r--r-- | layout/tools/recording/recording.xul | 13 |
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> |