Merge pull request #3735 from yurydelendik/embed-base
Properly resolves relative src for the embed tags
This commit is contained in:
commit
ea50c078b0
@ -43,50 +43,30 @@ function getDOMWindow(aChannel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getObjectUrl(window) {
|
function getObjectUrl(window) {
|
||||||
var url;
|
// PlayPreview overlay "belongs" to the embed/object tag and consists of DIV
|
||||||
var element = window.frameElement;
|
// and IFRAME. Starting from IFRAME and looking for first object tag.
|
||||||
var isOverlay = false;
|
var element = window.frameElement, containerElement;
|
||||||
var params = {};
|
if (!element) {
|
||||||
if (element) {
|
return null; // iframe tag
|
||||||
var tagName = element.nodeName;
|
|
||||||
while (tagName != 'EMBED' && tagName != 'OBJECT') {
|
|
||||||
// plugin overlay skipping until the target plugin is found
|
|
||||||
isOverlay = true;
|
|
||||||
element = element.parentNode;
|
|
||||||
if (!element)
|
|
||||||
throw 'Plugin element is not found';
|
|
||||||
tagName = element.nodeName;
|
|
||||||
}
|
|
||||||
if (tagName == 'EMBED') {
|
|
||||||
for (var i = 0; i < element.attributes.length; ++i) {
|
|
||||||
params[element.attributes[i].localName] = element.attributes[i].value;
|
|
||||||
}
|
|
||||||
url = params.src;
|
|
||||||
} else {
|
|
||||||
for (var i = 0; i < element.childNodes.length; ++i) {
|
|
||||||
var paramElement = element.childNodes[i];
|
|
||||||
if (paramElement.nodeType != Ci.nsIDOMNode.ELEMENT_NODE ||
|
|
||||||
paramElement.nodeName != 'PARAM') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
params[paramElement.getAttribute('name')] =
|
|
||||||
paramElement.getAttribute('value');
|
|
||||||
}
|
|
||||||
var dataAttribute = element.getAttribute('data');
|
|
||||||
url = dataAttribute || params.movie || params.src;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!url) {
|
var tagName = element.nodeName;
|
||||||
return url; // src is not specified
|
while (tagName !== 'EMBED' && tagName !== 'OBJECT') {
|
||||||
|
containerElement = element;
|
||||||
|
element = element.parentNode;
|
||||||
|
if (!element) {
|
||||||
|
return null; // object tag was not found
|
||||||
|
}
|
||||||
|
tagName = element.nodeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
var element = window.frameElement;
|
// Checking if overlay is a proper PlayPreview overlay.
|
||||||
// XXX base uri?
|
for (var i = 0; i < element.children.length; i++) {
|
||||||
var baseUri = !element ? null :
|
if (element.children[i] === containerElement) {
|
||||||
Services.io.newURI(element.ownerDocument.location.href, null, null);
|
return null; // invalid plugin element overlay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Services.io.newURI(url, null, baseUri).spec;
|
return element.srcURI.spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
function PdfRedirector() {
|
function PdfRedirector() {
|
||||||
|
Loading…
Reference in New Issue
Block a user