'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