summaryrefslogtreecommitdiff
path: root/dom/base/test/file_simplecontentpolicy.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/file_simplecontentpolicy.js')
-rw-r--r--dom/base/test/file_simplecontentpolicy.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/dom/base/test/file_simplecontentpolicy.js b/dom/base/test/file_simplecontentpolicy.js
new file mode 100644
index 0000000000..1f9606c49d
--- /dev/null
+++ b/dom/base/test/file_simplecontentpolicy.js
@@ -0,0 +1,73 @@
+var Ci = Components.interfaces;
+var Cc = Components.classes;
+var Cr = Components.results;
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function executeSoon(f)
+{
+ Services.tm.mainThread.dispatch(f, Ci.nsIThread.DISPATCH_NORMAL);
+}
+
+var urlSuffix = "/this/is/the/test/url";
+
+// Content policy / factory implementation for the test
+var policyID = Components.ID("{6aadacff-f1f2-46f4-a6db-6d429f884a30}");
+var policyName = "@mozilla.org/simpletestpolicy;1";
+var policy = {
+ // nsISupports implementation
+ QueryInterface:
+ XPCOMUtils.generateQI([
+ Ci.nsISupports,
+ Ci.nsIFactory,
+ Ci.nsISimpleContentPolicy]),
+
+ // nsIFactory implementation
+ createInstance: function(outer, iid) {
+ return this.QueryInterface(iid);
+ },
+
+ // nsIContentPolicy implementation
+ shouldLoad: function(contentType,
+ contentLocation,
+ requestOrigin,
+ frame,
+ isTopLevel,
+ mimeTypeGuess,
+ extra)
+ {
+ // Remember last content type seen for the test url
+ if (contentLocation.spec.endsWith(urlSuffix)) {
+ assert.ok(frame === browserElement, "correct <browser> element");
+ sendAsyncMessage("shouldLoad", {contentType: contentType, isTopLevel: isTopLevel});
+ return Ci.nsIContentPolicy.REJECT_REQUEST;
+ }
+
+ return Ci.nsIContentPolicy.ACCEPT;
+ },
+
+ shouldProcess: function() {
+ return Ci.nsIContentPolicy.ACCEPT;
+ }
+}
+
+// Register content policy
+var componentManager = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+componentManager.registerFactory(policyID, "Test simple content policy", policyName, policy);
+
+var categoryManager = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager);
+categoryManager.addCategoryEntry("simple-content-policy", policyName, policyName, false, true);
+
+addMessageListener("finished", () => {
+ // Unregister content policy
+ categoryManager.deleteCategoryEntry("simple-content-policy", policyName, false);
+
+ executeSoon(function() {
+ // Component must be unregistered delayed, otherwise other content
+ // policy will not be removed from the category correctly
+ componentManager.unregisterFactory(policyID, policy);
+ });
+});
+
+sendAsyncMessage("ready");