☠☠ backed out by d8df8c6f33ef ☠ ☠ | |
author | Andrea Marchesini <amarchesini@mozilla.com> |
Wed, 17 Jun 2015 12:43:53 +0100 | |
changeset 249338 | 689ce5819b24dcc8bd8491c87652c1e9ba94628d |
parent 249337 | d772d098a392c569e854b81b27e24f97c4619e14 |
child 249339 | fce5800610499026a804d5599bcfae0f6185ad05 |
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,44 @@ 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 != ' ') { - ++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; + NS_ConvertUTF16toUTF8 str(value); + char* buffer = str.BeginWriting(); + + while (char* token = NS_strtok(" ", &buffer)) { + if (!aResult.IsEmpty()) { + aResult.Append(NS_LITERAL_STRING(" ")); } + + NS_ConvertUTF8toUTF16 uriPart(token); + 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 {