in src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java [78:199]
private static URL scanNodes(Node node, URLCollection urls, URL baseUrl) throws HTMLParseException {
if (node == null) {
return baseUrl;
}
String name = node.getNodeName();
int type = node.getNodeType();
switch (type) {
case Node.DOCUMENT_NODE:
scanNodes(((Document) node).getDocumentElement(), urls, baseUrl);
break;
case Node.ELEMENT_NODE:
NamedNodeMap attrs = node.getAttributes();
if (name.equalsIgnoreCase(TAG_BASE)) {
String tmp = getValue(attrs, ATT_HREF);
if (tmp != null) {
try {
baseUrl = ConversionUtils.makeRelativeURL(baseUrl, tmp);
} catch (MalformedURLException e) {
throw new HTMLParseException(e);
}
}
break;
}
if (name.equalsIgnoreCase(TAG_IMAGE) || name.equalsIgnoreCase(TAG_EMBED)) {
urls.addURL(getValue(attrs, ATT_SRC), baseUrl);
break;
}
if (name.equalsIgnoreCase(TAG_APPLET)) {
String codebase = getValue(attrs, ATT_CODEBASE);
String code = getValue(attrs, ATT_ARCHIVE);
if (StringUtils.isBlank(code)) {
code = getValue(attrs, ATT_CODE);
}
if (StringUtils.isBlank(codebase)) {
urls.addURL(code, baseUrl);
} else {
urls.addURL(codebase + "/" + code, baseUrl);
}
break;
}
if (name.equalsIgnoreCase(TAG_OBJECT)) {
String data = getValue(attrs, "codebase");
if(!StringUtils.isEmpty(data)) {
urls.addURL(data, baseUrl);
}
data = getValue(attrs, "data");
if(!StringUtils.isEmpty(data)) {
urls.addURL(data, baseUrl);
}
break;
}
if (name.equalsIgnoreCase(TAG_INPUT)) {
String src = getValue(attrs, ATT_SRC);
String typ = getValue(attrs, ATT_TYPE);
if ((src != null) && ATT_IS_IMAGE.equalsIgnoreCase(typ)) {
urls.addURL(src, baseUrl);
}
break;
}
if (TAG_LINK.equalsIgnoreCase(name) &&
(STYLESHEET.equalsIgnoreCase(getValue(attrs, ATT_REL))
|| SHORTCUT_ICON.equalsIgnoreCase(getValue(attrs, ATT_REL))
|| ICON.equalsIgnoreCase(getValue(attrs, ATT_REL))
|| PRELOAD.equalsIgnoreCase(getValue(attrs, ATT_REL)))) {
urls.addURL(getValue(attrs, ATT_HREF), baseUrl);
break;
}
if (name.equalsIgnoreCase(TAG_SCRIPT)) {
urls.addURL(getValue(attrs, ATT_SRC), baseUrl);
break;
}
if (name.equalsIgnoreCase(TAG_FRAME)) {
urls.addURL(getValue(attrs, ATT_SRC), baseUrl);
break;
}
if (name.equalsIgnoreCase(TAG_IFRAME)) {
urls.addURL(getValue(attrs, ATT_SRC), baseUrl);
break;
}
String back = getValue(attrs, ATT_BACKGROUND);
if (back != null) {
urls.addURL(back, baseUrl);
}
if (name.equalsIgnoreCase(TAG_BGSOUND)) {
urls.addURL(getValue(attrs, ATT_SRC), baseUrl);
break;
}
String style = getValue(attrs, ATT_STYLE);
if (style != null) {
HtmlParsingUtils.extractStyleURLs(baseUrl, urls, style);
}
NodeList children = node.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++) {
baseUrl = scanNodes(children.item(i), urls, baseUrl);
}
}
break;
default:
// ignored
break;
}
return baseUrl;
}