Сабж. Имеются: xml-документ и xslt-шаблон, оба берутся из chrome/content расширения. При попытке применить transformToDocument выдается, что

Ошибка системы безопасности: содержимое «moz-nullprincipal:{a9e68eaf-22ff-468f-a4af-89358cc0ecf6}» 
не имеет права загружать chrome://foo/content/bar.xml или ссылаться на него.

Т.е. речь не о шаблоне, а о самом xml, который в реальной ситуации давным-давно загружен (посредством XMLHTTPRequest) без всяких сообщений об ошибках.
Далее, несмотря на сообщение об ошибке, трансформация всё же выполняется. Я мог бы:
1) просто задавить ошибку пустым catch;
2) вместо transformToDocument использовать transformToFragment для корневого узла, и потом у нужного документа подменять корневой узел на результат трансформации. Но всё-так хотелось бы знать, в чём причина вышеупомянутой ошибки.

P.S. Указания типа

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

не помогают.

Может, вы используете

Выделить код

Код:

var processor = new XSLTProcessor();

вместо

Выделить код

Код:

var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"]
               .createInstance(Components.interfaces.nsIXSLTProcessor);

?

luitzen

Пробовал использовать и в том, и в другом варианте - без толку. transformToDocument выдаёт вышеуказанную ошибку - при том, что трансформация всё-таки производится; transformToFragment ошибок не выдаёт.

В процессе выяснилось следующее: сообщение о вышеуказанной ошибке практически идентично сообщению об ошибке парсера при парсинге документа, если парсер был создан явным вызовом конструктора. Если парсер был создан через createInstance - всё в порядке. Что, кстати, вносит еще больше путаницы, поскольку вот здесь написано следующее:

When a DOMParser is instantiated by calling new DOMParser(), it inherits the calling code's principal (except that for chrome callers the principal is set to the null principal) and the documentURI and baseURI of the window the constructor came from.
.....
If you instantiate a DOMParser by calling createInstance(), and you don't call the DOMParser's init() method, attempting to initiate a parsing operation will automatically call init() on the DOMParser with a null principal and null pointers for documentURI and baseURI.

- т.е. вроде как получается с точностью до наоборот: createInstance наследует principals контекста вызова, а вот при new DOMParser() и последующем вызове методов парсинга просходит предварительный неявный вызов init() с передачей в него null principal.
Касательно же ситуации с XSLTProcessor - видимо, несмотря на то, что ему дается уже разобранный DOM, он всё равно пытается его как-то по-своему перепарсить, для чего создает внутри своих методов эксемпляр парсера, инициализарованный с null-principal. Поскольку методов для задания security context я у XSLTProcessor не обнаружил, то остановился на следующем: DOM от XMLHttpRequest сериализовать в string, и через парсер, созданный посредством createInstance (а поскольку код, отвечающий за сеарилизацию и парсинг я вынес в jsm, то иначе и не получится) передавать на трансформацию - тогда всё отрабатывает без ошибок.