diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-09-04 19:36:08 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-09-04 19:37:48 +0200 |
commit | 32464a0b974760b9231ae1f7e49f48eeddbc39b9 (patch) | |
tree | 117ba755e9e7cdb713f9c152010ebcf55260b3fe | |
parent | b43a1afcd369cb7a04d681c0a1bd21002a9ab724 (diff) | |
download | UXP-32464a0b974760b9231ae1f7e49f48eeddbc39b9.tar UXP-32464a0b974760b9231ae1f7e49f48eeddbc39b9.tar.gz UXP-32464a0b974760b9231ae1f7e49f48eeddbc39b9.tar.lz UXP-32464a0b974760b9231ae1f7e49f48eeddbc39b9.tar.xz UXP-32464a0b974760b9231ae1f7e49f48eeddbc39b9.zip |
Part 1. Duplicate IsLocalRefURL to nsContentUtils to reuse this function.
`IsLocalRefURL` is originally designed to be used by URLValue only.
Since we need this function in SVGUseElement::LookupHref too, duplicate it to nsContentUtils as a util function.
This is a duplication because CSSValue uses stringbuffers and not nsStrings.
While Bug 1356060 - "Just use nsString in URLValueData" converts this use from stringbuffer to nsString, it builds on a bunch of vartype refactoring (nsString vs. nsAString, etc.) which is too much of a headache to deal with just to deduplicate this simple function.
-rw-r--r-- | dom/base/nsContentUtils.cpp | 16 | ||||
-rw-r--r-- | dom/base/nsContentUtils.h | 7 |
2 files changed, 23 insertions, 0 deletions
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 34c7d23b8..8612e76df 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -9787,3 +9787,19 @@ nsContentUtils::AttemptLargeAllocationLoad(nsIHttpChannel* aChannel) return reloadSucceeded; } + +/* static */ bool +nsContentUtils::IsLocalRefURL(const nsString& aString) +{ + // Find the first non-"C0 controls + space" character. + const char16_t* current = aString.get(); + for (; *current != '\0'; current++) { + if (*current > 0x20) { + // if the first non-"C0 controls + space" character is '#', this is a + // local-ref URL. + return *current == '#'; + } + } + + return false; +}
\ No newline at end of file diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h index 9ae6d2155..c255f813a 100644 --- a/dom/base/nsContentUtils.h +++ b/dom/base/nsContentUtils.h @@ -2730,6 +2730,13 @@ public: static bool AttemptLargeAllocationLoad(nsIHttpChannel* aChannel); + /** + * Detect whether a string is a (CSS) local-url. + * https://drafts.csswg.org/css-values/#local-urls + */ + static bool + IsLocalRefURL(const nsString& aString); + private: static bool InitializeEventTable(); |