How to implement XPCOM component (nsIContentPolicy) in bootstrapped
Firefox extension
I have a bootstrapped extension for Firefox. And now I want to implement
nsIContentPolicy XPCOM component. I wrote a component module code. And now
I want to register this component. The reason to register component is
that I want to add my component to nsICategoryManager.addCategoryEntry
with "content-policy" category.
var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
//console.error("Running interceptor");
function Interceptor()
}
Interceptor.prototype = {
classDescription: "DeferredTo HTTP requests Interceptor",
classID: "{B5B3D9A0-08FC-11E3-8253-5EF06188709B}",
contractID: "@deferredto.com/Interceptor;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPolicy]),
shouldLoad : function dt_shouldLoad(aContentType, aContentLocation,
aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
console.log("dt_shouldLoad");
if (contentLocation.scheme != "http" && contentLocation.scheme !=
"https")
return Ci.nsIContentPolicy.ACCEPT;
let result = Ci.nsIContentPolicy.ACCEPT;
// we should check for TYPE_SUBDOCUMENT as well if we want frames.
if ((Ci.nsIContentPolicy.TYPE_DOCUMENT == aContentType) &&
SOME_REGULAR_EXPRESSION.test(aContentLocation.spec)) {
// do stuff here, possibly changing result.
}
return result;
},
shouldProcess: function ILO_shouldProcess() Ci.nsIContentPolicy.ACCEPT,
_xpcom_categories: [
{ category: "content-policy", service: true }
],
classInfo: XPCOMUtils.generateCI(
{classID: Components.ID("{B5B3D9A0-08FC-11E3-8253-5EF06188709B}"),
contractID: "@deferredto.com/Interceptor;1",
classDescription: "Interceptor implements nsIContentPolicy to block
images that are not yet at screen @DeferredTo",
interfaces: [
Ci.nsIContentPolicy,
],
flags: Ci.nsIClassInfo.SINGLETON})
}
var components = [Interceptor];
var NSGetFactory = XPCOMUtils.generateNSGetFactory([Interceptor]);
Questions: Is it possible to register the component from bootstrapped
extension? Is it possible to register the component from restartless
extension? Is it nsICategoryManager.addCategoryEntry "content-policy"
without component? How to register the component or somehow add
"content-policy" category entry?
Thank you.
I've added to harness-options.js "requirements": { "sdk/page-mod":
"sdk/page-mod", "sdk/self": "sdk/self", "chrome": "chrome"},
That is how I try import module: var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://deferredto/lib/interceptor.js");
I' ve tried many paths ))) But none works. resource entry in
chrome.manifest file does not allowed for bootstrapped extensions. The
path to component module file is: resources/deferredto/lib/interceptor.js
No comments:
Post a Comment