Компонент XPCOM, расширяющий nsIContentPolicy

В целях тестирования я пытаюсь заблокировать изображения с помощью компонента XPCOM, но метод shouldLoad вызывается только для внутренних ресурсов (например, chrome://global/skin/global.css, chrome://browser/skin/tabbrowser/xxx.png, about:blank и т. д.), он никогда не вызывается для встроенного содержимого. В чем может быть проблема?

контент-policy.js

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

function MyContentPolicyComponent() {}

MyContentPolicyComponent.prototype = {
    classDescription: "My Content Policy Component",
    classID: Components.ID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"),
    contractID: "@mycontractid/content-policy;1",
    QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIContentPolicy]),
    _xpcom_categories: [{category: "content-policy"}],

    shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra, aRequestPrincipal) {
        // dump(aContentLocation.spec + "\n");

        if (aContentType === Components.interfaces.nsIContentPolicy.TYPE_IMAGE)
            return Components.interfaces.nsIContentPolicy.REJECT;

        return Components.interfaces.nsIContentPolicy.ACCEPT;
    },

    shouldProcess: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeType, aExtra, aRequestPrincipal) {
        return Components.interfaces.nsIContentPolicy.ACCEPT;
    }
};

var NSGetFactory = XPCOMUtils.generateNSGetFactory([MyContentPolicyComponent]);

chrome.manifest

...
component {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} components/content-policy.js
contract @mycontractid/content-policy;1 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
category content-policy MyContentPolicyComponent @mycontractid/content-policy;1

0 ответов

Другие вопросы по тегам