author | Andrea Marchesini <amarchesini@mozilla.com> |
Wed, 17 Jun 2015 15:02:18 +0100 | |
changeset 249358 | 1da97e961c3d2c9674b4fb621ab7f6b1efe48ee3 |
parent 249357 | d8df8c6f33ef4b7f215cc988daa476baa5629f0a |
child 249359 | 4583dd29ef0eb1c6d90057045c503352ae4dda32 |
push id | 28923 |
push user | ryanvm@gmail.com |
push date | Wed, 17 Jun 2015 18:57:11 +0000 |
treeherder | mozilla-central@099d6cd6725e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | ehsan |
bugs | 1170274 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/html/nsGenericHTMLElement.cpp +++ b/dom/html/nsGenericHTMLElement.cpp @@ -1727,45 +1727,61 @@ nsGenericHTMLElement::GetURIListAttr(nsI nsAutoString value; if (!GetAttr(kNameSpaceID_None, aAttr, value)) return NS_OK; nsIDocument* doc = OwnerDoc(); nsCOMPtr<nsIURI> baseURI = GetBaseURI(); - // Value contains relative URIs split on spaces (U+0020) - const char16_t *start = value.BeginReading(); - const char16_t *end = value.EndReading(); - const char16_t *iter = start; - for (;;) { - if (iter < end && *iter != ' ') { + nsString::const_iterator end; + value.EndReading(end); + + nsAString::const_iterator iter; + value.BeginReading(iter); + + while (iter != end) { + while (nsCRT::IsAsciiSpace(*iter) && iter != end) { + ++iter; + } + + if (iter == end) { + break; + } + + nsAString::const_iterator start = iter; + + while (iter != end && !nsCRT::IsAsciiSpace(*iter)) { ++iter; - } else { // iter is pointing at either end or a space - while (*start == ' ' && start < iter) - ++start; - if (iter != start) { - if (!aResult.IsEmpty()) - aResult.Append(char16_t(' ')); - const nsSubstring& uriPart = Substring(start, iter); - nsCOMPtr<nsIURI> attrURI; - nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(attrURI), - uriPart, doc, baseURI); - if (attrURI) { - nsAutoCString spec; - attrURI->GetSpec(spec); - AppendUTF8toUTF16(spec, aResult); - } else { - aResult.Append(uriPart); - } - } - start = iter = iter + 1; - if (iter >= end) - break; + } + + if (!aResult.IsEmpty()) { + aResult.Append(NS_LITERAL_STRING(" ")); } + + const nsSubstring& uriPart = Substring(start, iter); + nsCOMPtr<nsIURI> attrURI; + nsresult rv = + nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(attrURI), + uriPart, doc, baseURI); + if (NS_FAILED(rv)) { + aResult.Append(uriPart); + continue; + } + + MOZ_ASSERT(attrURI); + + nsAutoCString spec; + rv = attrURI->GetSpec(spec); + if (NS_WARN_IF(NS_FAILED(rv))) { + aResult.Append(uriPart); + continue; + } + + AppendUTF8toUTF16(spec, aResult); } return NS_OK; } HTMLMenuElement* nsGenericHTMLElement::GetContextMenu() const {