|
|
@@ -316,9 +316,9 @@ class BatchRequest {
|
|
|
this.duplicates = new Map();
|
|
|
}
|
|
|
|
|
|
- addURL(resourceURL, asBinary, expectedType, groupDuplicates) {
|
|
|
+ addURL(resourceURL, { asBinary, expectedType, groupDuplicates, baseURI, blockMixedContent }) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
- const requestKey = JSON.stringify([resourceURL, asBinary, expectedType]);
|
|
|
+ const requestKey = JSON.stringify([resourceURL, asBinary, expectedType, baseURI, blockMixedContent]);
|
|
|
let resourceRequests = this.requests.get(requestKey);
|
|
|
if (!resourceRequests) {
|
|
|
resourceRequests = [];
|
|
|
@@ -345,7 +345,7 @@ class BatchRequest {
|
|
|
const resourceURLs = [...this.requests.keys()];
|
|
|
let indexResource = 0;
|
|
|
return Promise.all(resourceURLs.map(async requestKey => {
|
|
|
- const [resourceURL, asBinary, expectedType] = JSON.parse(requestKey);
|
|
|
+ const [resourceURL, asBinary, expectedType, baseURI, blockMixedContent] = JSON.parse(requestKey);
|
|
|
const resourceRequests = this.requests.get(requestKey);
|
|
|
try {
|
|
|
const currentIndexResource = indexResource;
|
|
|
@@ -356,7 +356,9 @@ class BatchRequest {
|
|
|
maxResourceSize: options.maxResourceSize,
|
|
|
maxResourceSizeEnabled: options.maxResourceSizeEnabled,
|
|
|
frameId: options.windowId,
|
|
|
- resourceReferrer: options.resourceReferrer
|
|
|
+ resourceReferrer: options.resourceReferrer,
|
|
|
+ baseURI,
|
|
|
+ blockMixedContent
|
|
|
});
|
|
|
onloadListener({ url: resourceURL });
|
|
|
if (!this.cancelled) {
|
|
|
@@ -930,7 +932,8 @@ class Processor {
|
|
|
updatedResources: this.options.updatedResources,
|
|
|
rootDocument: this.options.rootDocument,
|
|
|
frameId: this.options.windowId,
|
|
|
- resourceReferrer: this.options.resourceReferrer
|
|
|
+ resourceReferrer: this.options.resourceReferrer,
|
|
|
+ blockMixedContent: this.options.blockMixedContent
|
|
|
};
|
|
|
let mediaText;
|
|
|
if (element.media) {
|
|
|
@@ -1225,7 +1228,9 @@ class Processor {
|
|
|
maxResourceSize: this.options.maxResourceSize,
|
|
|
maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
|
|
|
frameId: this.options.windowId,
|
|
|
- resourceReferrer: this.options.resourceReferrer
|
|
|
+ resourceReferrer: this.options.resourceReferrer,
|
|
|
+ baseURI: this.options.baseURI,
|
|
|
+ blockMixedContent: this.options.blockMixedContent
|
|
|
});
|
|
|
content.data = getUpdatedResourceContent(resourceURL, content, this.options);
|
|
|
if (element.tagName == "SCRIPT") {
|
|
|
@@ -1637,7 +1642,9 @@ class ProcessorHelper {
|
|
|
validateTextContentType: true,
|
|
|
frameId: options.frameId,
|
|
|
charset: options.charset,
|
|
|
- resourceReferrer: options.resourceReferrer
|
|
|
+ resourceReferrer: options.resourceReferrer,
|
|
|
+ baseURI: options.baseURI,
|
|
|
+ blockMixedContent: options.blockMixedContent
|
|
|
});
|
|
|
if (!matchCharsetEquals(content.data, content.charset || options.charset)) {
|
|
|
options = Object.assign({}, options, { charset: getCharset(content.data) });
|
|
|
@@ -1647,7 +1654,9 @@ class ProcessorHelper {
|
|
|
validateTextContentType: true,
|
|
|
frameId: options.frameId,
|
|
|
charset: options.charset,
|
|
|
- resourceReferrer: options.resourceReferrer
|
|
|
+ resourceReferrer: options.resourceReferrer,
|
|
|
+ baseURI: options.baseURI,
|
|
|
+ blockMixedContent: options.blockMixedContent
|
|
|
});
|
|
|
} else {
|
|
|
return content;
|
|
|
@@ -1704,7 +1713,9 @@ class ProcessorHelper {
|
|
|
charset: options.charset,
|
|
|
frameId: options.frameId,
|
|
|
resourceReferrer: options.resourceReferrer,
|
|
|
- validateTextContentType: true
|
|
|
+ validateTextContentType: true,
|
|
|
+ baseURI: baseURI,
|
|
|
+ blockMixedContent: options.blockMixedContent
|
|
|
});
|
|
|
if (!matchCharsetEquals(content.data, content.charset || options.charset)) {
|
|
|
options = Object.assign({}, options, { charset: getCharset(content.data) });
|
|
|
@@ -1753,7 +1764,8 @@ class ProcessorHelper {
|
|
|
const resourceURL = normalizeURL(originalResourceURL);
|
|
|
if (!testIgnoredPath(resourceURL)) {
|
|
|
if (testValidURL(resourceURL)) {
|
|
|
- let { content } = await batchRequest.addURL(resourceURL, true, "font");
|
|
|
+ let { content } = await batchRequest.addURL(resourceURL,
|
|
|
+ { asBinary: true, expectedType: "font", baseURI, blockMixedContent: options.blockMixedContent });
|
|
|
let resourceURLs = fontURLs.get(declaration);
|
|
|
if (!resourceURLs) {
|
|
|
resourceURLs = [];
|
|
|
@@ -1793,7 +1805,8 @@ class ProcessorHelper {
|
|
|
const resourceURL = normalizeURL(originalResourceURL);
|
|
|
if (!testIgnoredPath(resourceURL)) {
|
|
|
if (testValidURL(resourceURL)) {
|
|
|
- let { content, indexResource, duplicate } = await batchRequest.addURL(resourceURL, true, "image", true);
|
|
|
+ let { content, indexResource, duplicate } = await batchRequest.addURL(resourceURL,
|
|
|
+ { asBinary: true, expectedType: "image", groupDuplicates: options.groupDuplicateImages });
|
|
|
let variableDefined;
|
|
|
const tokens = [];
|
|
|
findURLToken(originalResourceURL, declaration.value.children, (token, parent, rootFunction) => {
|
|
|
@@ -1845,7 +1858,8 @@ class ProcessorHelper {
|
|
|
// ignored
|
|
|
}
|
|
|
if (testValidURL(resourceURL)) {
|
|
|
- let { content, indexResource, duplicate } = await batchRequest.addURL(resourceURL, true, "image", resourceElement.tagName == "IMG" && attributeName == "src");
|
|
|
+ let { content, indexResource, duplicate } = await batchRequest.addURL(resourceURL,
|
|
|
+ { asBinary: true, expectedType: "image", groupDuplicates: options.groupDuplicateImages && resourceElement.tagName == "IMG" && attributeName == "src" });
|
|
|
if (originURL) {
|
|
|
if (content == EMPTY_DATA_URI) {
|
|
|
try {
|
|
|
@@ -1953,7 +1967,7 @@ class ProcessorHelper {
|
|
|
// ignored
|
|
|
}
|
|
|
if (testValidURL(resourceURL)) {
|
|
|
- const { content } = await batchRequest.addURL(resourceURL, true, "image");
|
|
|
+ const { content } = await batchRequest.addURL(resourceURL, { asBinary: true, expectedType: "image" });
|
|
|
const forbiddenPrefixFound = PREFIXES_FORBIDDEN_DATA_URI.filter(prefixDataURI => content.startsWith(prefixDataURI)).length;
|
|
|
if (forbiddenPrefixFound) {
|
|
|
return "";
|