--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -1067,42 +1067,44 @@ var PageInfoListener = {
processFrames: function*(document, frameList, strings)
{
let nodeCount = 0;
for (let doc of frameList) {
let iterator = doc.createTreeWalker(doc, content.NodeFilter.SHOW_ELEMENT);
// Goes through all the elements on the doc. imageViewRows takes only the media elements.
while (iterator.nextNode()) {
- let mediaNode = this.getMediaNode(document, strings, iterator.currentNode);
+ let mediaItems = this.getMediaItems(document, strings, iterator.currentNode);
- if (mediaNode) {
+ if (mediaItems.length) {
sendAsyncMessage("PageInfo:mediaData",
- {imageViewRow: mediaNode, isComplete: false});
+ {mediaItems, isComplete: false});
}
if (++nodeCount % 500 == 0) {
// setTimeout every 500 elements so we don't keep blocking the content process.
yield new Promise(resolve => setTimeout(resolve, 10));
}
}
}
// Send that page info media fetching has finished.
sendAsyncMessage("PageInfo:mediaData", {isComplete: true});
},
- getMediaNode: function(document, strings, elem)
+ getMediaItems: function(document, strings, elem)
{
- // Check for images defined in CSS (e.g. background, borders), any node may have multiple.
+ // Check for images defined in CSS (e.g. background, borders)
let computedStyle = elem.ownerDocument.defaultView.getComputedStyle(elem, "");
- let mediaElement = null;
+ // A node can have multiple media items associated with it - for example,
+ // multiple background images.
+ let mediaItems = [];
let addImage = (url, type, alt, elem, isBg) => {
let element = this.serializeElementInfo(document, url, type, alt, elem, isBg);
- mediaElement = [url, type, alt, element, isBg];
+ mediaItems.push([url, type, alt, element, isBg]);
};
if (computedStyle) {
let addImgFunc = (label, val) => {
if (val.primitiveType == content.CSSPrimitiveValue.CSS_URI) {
addImage(val.getStringValue(), label, strings.notSet, elem, true);
}
else if (val.primitiveType == content.CSSPrimitiveValue.CSS_STRING) {
@@ -1160,17 +1162,17 @@ var PageInfoListener = {
}
else if (elem instanceof content.HTMLObjectElement) {
addImage(elem.data, strings.mediaObject, this.getValueText(elem), elem, false);
}
else if (elem instanceof content.HTMLEmbedElement) {
addImage(elem.src, strings.mediaEmbed, "", elem, false);
}
- return mediaElement;
+ return mediaItems;
},
/**
* Set up a JSON element object with all the instanceOf and other infomation that
* makePreview in pageInfo.js uses to figure out how to display the preview.
*/
serializeElementInfo: function(document, url, type, alt, item, isBG)