mirror of
https://github.com/nodejs/node.git
synced 2025-05-01 08:42:45 +00:00

PR-URL: https://github.com/nodejs/node/pull/37863 Co-authored-by: Antoine du Hamel <duhamelantoine1995@gmail.com> Co-authored-by: James M Snell <jasnell@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com>
343 lines
6.5 KiB
JavaScript
343 lines
6.5 KiB
JavaScript
'use strict';
|
|
// Flags: --expose-internals
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto) common.skip('missing crypto');
|
|
common.requireNoPackageJSONAbove();
|
|
|
|
const Manifest = require('internal/policy/manifest').Manifest;
|
|
const assert = require('assert');
|
|
|
|
// #region files
|
|
{
|
|
const baseURLs = [
|
|
// Localhost is special cased in spec
|
|
'file://localhost/root',
|
|
'file:///root',
|
|
'file:///',
|
|
'file:///root/dir1',
|
|
'file:///root/dir1/',
|
|
'file:///root/dir1/dir2',
|
|
'file:///root/dir1/dir2/',
|
|
];
|
|
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'file:///': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'': {
|
|
dependencies: true
|
|
},
|
|
'file:': {
|
|
cascade: true
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'file:': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper(href)
|
|
.resolve('fs'),
|
|
true);
|
|
}
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('file://host/')
|
|
.resolve('fs'),
|
|
true);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
resources: {
|
|
'file:///root/dir1': {
|
|
dependencies: {
|
|
fs: 'test:fs1'
|
|
}
|
|
},
|
|
'file:///root/dir1/isolated': {},
|
|
'file:///root/dir1/cascade': {
|
|
cascade: true
|
|
}
|
|
},
|
|
scopes: {
|
|
'file:///root/dir1/': {
|
|
dependencies: {
|
|
fs: 'test:fs2'
|
|
}
|
|
},
|
|
'file:///root/dir1/censor/': {
|
|
},
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
const redirector = manifest.getDependencyMapper(href);
|
|
if (href.startsWith('file:///root/dir1/')) {
|
|
assert.strictEqual(
|
|
redirector.resolve('fs').href,
|
|
'test:fs2'
|
|
);
|
|
} else if (href === 'file:///root/dir1') {
|
|
assert.strictEqual(
|
|
redirector.resolve('fs').href,
|
|
'test:fs1'
|
|
);
|
|
} else {
|
|
assert.strictEqual(redirector.resolve('fs'), null);
|
|
}
|
|
}
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('file:///root/dir1/isolated')
|
|
.resolve('fs'),
|
|
null
|
|
);
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('file:///root/dir1/cascade')
|
|
.resolve('fs').href,
|
|
'test:fs2'
|
|
);
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('file:///root/dir1/censor/foo')
|
|
.resolve('fs'),
|
|
null
|
|
);
|
|
}
|
|
}
|
|
// #endregion
|
|
// #region data
|
|
{
|
|
const baseURLs = [
|
|
'data:text/javascript,0',
|
|
'data:text/javascript,0/1',
|
|
];
|
|
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'data:text/': {
|
|
dependencies: {
|
|
fs: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
null);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'data:/': {
|
|
dependencies: {
|
|
fs: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
null);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'data:': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'data:text/javascript,0/': {
|
|
dependencies: {
|
|
fs: 'test:fs1'
|
|
}
|
|
},
|
|
}
|
|
});
|
|
|
|
for (const href of baseURLs) {
|
|
assert.strictEqual(
|
|
manifest.getDependencyMapper(href).resolve('fs'),
|
|
null);
|
|
}
|
|
}
|
|
}
|
|
// #endregion
|
|
// #region blob
|
|
{
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'https://example.com/': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'https://example.com': {
|
|
dependencies: true
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
null);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'blob:https://example.com/has-origin': {
|
|
cascade: true
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
null);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
// FIXME
|
|
'https://example.com/': {
|
|
dependencies: true
|
|
},
|
|
'blob:https://example.com/has-origin': {
|
|
cascade: true
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
{
|
|
const manifest = new Manifest({
|
|
scopes: {
|
|
'blob:': {
|
|
dependencies: true
|
|
},
|
|
'blob:https://example.com/has-origin': {
|
|
cascade: true
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:https://example.com/has-origin')
|
|
.resolve('fs'),
|
|
null);
|
|
assert.strictEqual(
|
|
manifest
|
|
.getDependencyMapper('blob:foo').resolve('fs'),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
// #endregion
|