summaryrefslogtreecommitdiffstats
path: root/comm/suite/modules/Feeds.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/modules/Feeds.jsm')
-rw-r--r--comm/suite/modules/Feeds.jsm50
1 files changed, 50 insertions, 0 deletions
diff --git a/comm/suite/modules/Feeds.jsm b/comm/suite/modules/Feeds.jsm
new file mode 100644
index 0000000000..6c24dcfea8
--- /dev/null
+++ b/comm/suite/modules/Feeds.jsm
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80 filetype=javascript: */
+/* 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";
+
+var EXPORTED_SYMBOLS = [ "Feeds" ];
+
+ChromeUtils.defineModuleGetter(this, "BrowserUtils",
+ "resource://gre/modules/BrowserUtils.jsm");
+
+var Feeds = {
+
+ /**
+ * isValidFeed: checks whether the given data represents a valid feed.
+ *
+ * @param aLink
+ * An object representing a feed with title, href and type.
+ * @param aPrincipal
+ * The principal of the document, used for security check.
+ * @param aIsFeed
+ * Whether this is already a known feed or not, if true only a security
+ * check will be performed.
+ */
+ isValidFeed(aLink, aPrincipal, aIsFeed) {
+ if (!aLink || !aPrincipal)
+ return false;
+
+ var type = aLink.type.toLowerCase().replace(/^\s+|\s*(?:;.*)?$/g, "");
+ if (!aIsFeed) {
+ aIsFeed = (type == "application/rss+xml" ||
+ type == "application/atom+xml");
+ }
+
+ if (aIsFeed) {
+ try {
+ let href = BrowserUtils.makeURI(aLink.href, aLink.ownerDocument.characterSet)
+ BrowserUtils.urlSecurityCheck(href, aPrincipal,
+ Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
+ return type || "application/rss+xml";
+ } catch (ex) {
+ }
+ }
+
+ return null;
+ },
+
+};