From f9cab004186edb425a9b88ad649726605080a17c Mon Sep 17 00:00:00 2001 From: Thomas Groman Date: Mon, 20 Apr 2020 20:49:37 -0700 Subject: move browser to webbrowser/ --- .../components/sessionstore/DocumentUtils.jsm | 230 + .../components/sessionstore/SessionStorage.jsm | 165 + .../components/sessionstore/SessionStore.jsm | 4786 ++++++++++++++++++++ .../components/sessionstore/XPathGenerator.jsm | 97 + .../components/sessionstore/_SessionFile.jsm | 314 ++ .../sessionstore/content/aboutSessionRestore.js | 320 ++ .../sessionstore/content/aboutSessionRestore.xhtml | 94 + .../sessionstore/content/content-sessionStore.js | 40 + webbrowser/components/sessionstore/jar.mn | 8 + webbrowser/components/sessionstore/moz.build | 29 + .../components/sessionstore/nsISessionStartup.idl | 59 + .../components/sessionstore/nsISessionStore.idl | 206 + .../components/sessionstore/nsSessionStartup.js | 296 ++ .../components/sessionstore/nsSessionStore.js | 37 + .../sessionstore/nsSessionStore.manifest | 18 + 15 files changed, 6699 insertions(+) create mode 100644 webbrowser/components/sessionstore/DocumentUtils.jsm create mode 100644 webbrowser/components/sessionstore/SessionStorage.jsm create mode 100644 webbrowser/components/sessionstore/SessionStore.jsm create mode 100644 webbrowser/components/sessionstore/XPathGenerator.jsm create mode 100644 webbrowser/components/sessionstore/_SessionFile.jsm create mode 100644 webbrowser/components/sessionstore/content/aboutSessionRestore.js create mode 100644 webbrowser/components/sessionstore/content/aboutSessionRestore.xhtml create mode 100644 webbrowser/components/sessionstore/content/content-sessionStore.js create mode 100644 webbrowser/components/sessionstore/jar.mn create mode 100644 webbrowser/components/sessionstore/moz.build create mode 100644 webbrowser/components/sessionstore/nsISessionStartup.idl create mode 100644 webbrowser/components/sessionstore/nsISessionStore.idl create mode 100644 webbrowser/components/sessionstore/nsSessionStartup.js create mode 100644 webbrowser/components/sessionstore/nsSessionStore.js create mode 100644 webbrowser/components/sessionstore/nsSessionStore.manifest (limited to 'webbrowser/components/sessionstore') diff --git a/webbrowser/components/sessionstore/DocumentUtils.jsm b/webbrowser/components/sessionstore/DocumentUtils.jsm new file mode 100644 index 0000000..6b3f729 --- /dev/null +++ b/webbrowser/components/sessionstore/DocumentUtils.jsm @@ -0,0 +1,230 @@ +/* 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 = [ "DocumentUtils" ]; + +const Cu = Components.utils; +const Ci = Components.interfaces; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource:///modules/sessionstore/XPathGenerator.jsm"); + +this.DocumentUtils = { + /** + * Obtain form data for a DOMDocument instance. + * + * The returned object has 2 keys, "id" and "xpath". Each key holds an object + * which further defines form data. + * + * The "id" object maps element IDs to values. The "xpath" object maps the + * XPath of an element to its value. + * + * @param aDocument + * DOMDocument instance to obtain form data for. + * @return object + * Form data encoded in an object. + */ + getFormData: function DocumentUtils_getFormData(aDocument) { + let formNodes = aDocument.evaluate( + XPathGenerator.restorableFormNodes, + aDocument, + XPathGenerator.resolveNS, + Ci.nsIDOMXPathResult.UNORDERED_NODE_ITERATOR_TYPE, null + ); + + let node; + let ret = {id: {}, xpath: {}}; + + // Limit the number of XPath expressions for performance reasons. See + // bug 477564. + const MAX_TRAVERSED_XPATHS = 100; + let generatedCount = 0; + + while (node = formNodes.iterateNext()) { + let nId = node.id; + let hasDefaultValue = true; + let value; + + // Only generate a limited number of XPath expressions for perf reasons + // (cf. bug 477564) + if (!nId && generatedCount > MAX_TRAVERSED_XPATHS) { + continue; + } + + if (node instanceof Ci.nsIDOMHTMLInputElement || + node instanceof Ci.nsIDOMHTMLTextAreaElement) { + switch (node.type) { + case "checkbox": + case "radio": + value = node.checked; + hasDefaultValue = value == node.defaultChecked; + break; + case "file": + value = { type: "file", fileList: node.mozGetFileNameArray() }; + hasDefaultValue = !value.fileList.length; + break; + default: // text, textarea + value = node.value; + hasDefaultValue = value == node.defaultValue; + break; + } + } else if (!node.multiple) { + // s with the multiple attribute are easier to determine the + // default value since each