summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-09-04 17:55:18 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-09-04 17:55:18 +0200
commit19f010c62022e269f99066a8d90e3522fe31adaf (patch)
tree4ad67dcc3ec63790f1ed75b7aed912b7d69b8036
parentb28ab55f9675f2e97dda9a4fcac0d4f5267a2bb9 (diff)
downloadUXP-19f010c62022e269f99066a8d90e3522fe31adaf.tar
UXP-19f010c62022e269f99066a8d90e3522fe31adaf.tar.gz
UXP-19f010c62022e269f99066a8d90e3522fe31adaf.tar.lz
UXP-19f010c62022e269f99066a8d90e3522fe31adaf.tar.xz
UXP-19f010c62022e269f99066a8d90e3522fe31adaf.zip
Part 1. Move IsLocalRefURL to nsContentUtils to reuse this function. (port-rewrite)
`IsLocalRefURL` is originally designed to be used by URLValue only. Since we need this function in SVGUseElement::LookupHref too, move it to nsContentUtils as a util function.
-rw-r--r--dom/base/nsContentUtils.cpp16
-rw-r--r--dom/base/nsContentUtils.h7
-rw-r--r--layout/style/nsCSSValue.cpp20
3 files changed, 25 insertions, 18 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();
diff --git a/layout/style/nsCSSValue.cpp b/layout/style/nsCSSValue.cpp
index baf5b7897..e9c391737 100644
--- a/layout/style/nsCSSValue.cpp
+++ b/layout/style/nsCSSValue.cpp
@@ -29,22 +29,6 @@
using namespace mozilla;
-static bool
-IsLocalRefURL(nsStringBuffer* aString)
-{
- // Find the first non-"C0 controls + space" character.
- char16_t* current = static_cast<char16_t*>(aString->Data());
- 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;
-}
-
nsCSSValue::nsCSSValue(int32_t aValue, nsCSSUnit aUnit)
: mUnit(aUnit)
{
@@ -2723,7 +2707,7 @@ css::URLValueData::URLValueData(already_AddRefed<PtrHolder<nsIURI>> aURI,
, mReferrer(Move(aReferrer))
, mOriginPrincipal(Move(aOriginPrincipal))
, mURIResolved(true)
- , mIsLocalRef(IsLocalRefURL(aString))
+ , mIsLocalRef(nsContentUtils::IsLocalRefURL(aString))
{
MOZ_ASSERT(mString);
MOZ_ASSERT(mBaseURI);
@@ -2740,7 +2724,7 @@ css::URLValueData::URLValueData(nsStringBuffer* aString,
, mReferrer(Move(aReferrer))
, mOriginPrincipal(Move(aOriginPrincipal))
, mURIResolved(false)
- , mIsLocalRef(IsLocalRefURL(aString))
+ , mIsLocalRef(nsContentUtils::IsLocalRefURL(aString))
{
MOZ_ASSERT(aString);
MOZ_ASSERT(mBaseURI);