Generalize moving URLComponent's begin position
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Oct 2012 22:31:45 +0000 (22:31 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Oct 2012 22:31:45 +0000 (22:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=98626

Reviewed by Adam Barth.

The patch r130609 introduced moving URLComponents's position.
It turns out this concept is really useful in the parser so
this patch generalize the idea.

* wtf/url/api/ParsedURL.cpp:
(WTF::ParsedURL::removePort):
* wtf/url/src/URLCanonEtc.cpp:
* wtf/url/src/URLComponent.h:
(WTF::URLComponent::moveBy):
Rename URLComponent::move() to URLComponent::moveBy() for consistency
with some of WebCore types.

* wtf/url/src/URLParse.cpp:
* wtf/url/src/URLParseFile.cpp:

* wtf/url/src/URLSegments.cpp:
(WTF::URLSegments::moveFromComponentBy):
Change the semantic to everything from a certain component. This is
useful to move everything, including the scheme.

* wtf/url/src/URLSegments.h:
(URLSegments):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@130695 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/url/api/ParsedURL.cpp
Source/WTF/wtf/url/src/URLCanonEtc.cpp
Source/WTF/wtf/url/src/URLComponent.h
Source/WTF/wtf/url/src/URLParse.cpp
Source/WTF/wtf/url/src/URLParseFile.cpp
Source/WTF/wtf/url/src/URLSegments.cpp
Source/WTF/wtf/url/src/URLSegments.h

index d23df4f..a4c119e 100644 (file)
@@ -1,3 +1,33 @@
+2012-10-08  Benjamin Poulain  <benjamin@webkit.org>
+
+        Generalize moving URLComponent's begin position
+        https://bugs.webkit.org/show_bug.cgi?id=98626
+
+        Reviewed by Adam Barth.
+
+        The patch r130609 introduced moving URLComponents's position.
+        It turns out this concept is really useful in the parser so
+        this patch generalize the idea.
+
+        * wtf/url/api/ParsedURL.cpp:
+        (WTF::ParsedURL::removePort):
+        * wtf/url/src/URLCanonEtc.cpp:
+        * wtf/url/src/URLComponent.h:
+        (WTF::URLComponent::moveBy):
+        Rename URLComponent::move() to URLComponent::moveBy() for consistency
+        with some of WebCore types.
+
+        * wtf/url/src/URLParse.cpp:
+        * wtf/url/src/URLParseFile.cpp:
+
+        * wtf/url/src/URLSegments.cpp:
+        (WTF::URLSegments::moveFromComponentBy):
+        Change the semantic to everything from a certain component. This is
+        useful to move everything, including the scheme.
+
+        * wtf/url/src/URLSegments.h:
+        (URLSegments):
+
 2012-10-08  Andreas Kling  <kling@webkit.org>
 
         Lower minimum table size of WTF::HashTable to reduce memory usage.
index 653ccc8..a20be39 100644 (file)
@@ -187,7 +187,7 @@ void ParsedURL::removePort()
 
     // 2) Update the components positions.
     m_segments.port.reset();
-    m_segments.moveComponentsAfter(URLSegments::Port, -length);
+    m_segments.moveFromComponentBy(URLSegments::Path, -length);
 }
 
 String ParsedURL::path() const
index 4ed6d18..f3cdd9c 100644 (file)
@@ -124,7 +124,7 @@ bool doScheme(const CharacterType* spec, const URLComponent& scheme, URLBuffer<c
     }
 
     // The output scheme starts from the current position.
-    outputScheme.setBegin(outputScheme.begin() + output.length());
+    outputScheme.moveBy(output.length());
 
     // Danger: it's important that this code does not strip any characters: it
     // only emits the canonical version (be it valid or escaped) of each of
index af2311d..86ae05a 100644 (file)
@@ -65,7 +65,7 @@ public:
 
     int begin() const { return m_begin; }
     void setBegin(int begin) { m_begin = begin; }
-    void move(int offset) { m_begin += offset; }
+    void moveBy(int offset) { m_begin += offset; }
 
     int length() const { return m_length; }
     void setLength(int length) { m_length = length; }
index 1d7e42e..91e65b4 100644 (file)
@@ -350,7 +350,7 @@ void doParseFileSystemURL(const CharacterType* spec, int specLength, URLSegments
     // Extract the scheme. We also handle the case where there is no scheme.
     if (doExtractScheme(&spec[begin], specLength - begin, parsed.scheme)) {
         // Offset the results since we gave ExtractScheme a substring.
-        parsed.scheme.setBegin(parsed.scheme.begin() + begin);
+        parsed.scheme.moveBy(begin);
 
         if (parsed.scheme.end() == specLength - 1)
             return;
@@ -368,7 +368,7 @@ void doParseFileSystemURL(const CharacterType* spec, int specLength, URLSegments
 
     if (doExtractScheme(innerSpec, innerSpecLength, innerScheme)) {
         // Offset the results since we gave ExtractScheme a substring.
-        innerScheme.setBegin(innerScheme.begin() + innerStart);
+        innerScheme.moveBy(innerStart);
 
         if (innerScheme.end() == specLength - 1)
             return;
@@ -395,14 +395,7 @@ void doParseFileSystemURL(const CharacterType* spec, int specLength, URLSegments
     // If we had any scheme that supported nesting more than one level deep,
     // we'd have to recurse into the innerParsed's innerParsed when
     // adjusting by innerStart.
-    innerParsed.scheme.setBegin(innerParsed.scheme.begin() + innerStart);
-    innerParsed.username.setBegin(innerParsed.username.begin() + innerStart);
-    innerParsed.password.setBegin(innerParsed.password.begin() + innerStart);
-    innerParsed.host.setBegin(innerParsed.host.begin() + innerStart);
-    innerParsed.port.setBegin(innerParsed.port.begin() + innerStart);
-    innerParsed.query.setBegin(innerParsed.query.begin() + innerStart);
-    innerParsed.fragment.setBegin(innerParsed.fragment.begin() + innerStart);
-    innerParsed.path.setBegin(innerParsed.path.begin() + innerStart);
+    innerParsed.moveFromComponentBy(URLSegments::Scheme, innerStart);
 
     // Query and ref move from innerParsed to parsed.
     parsed.query = innerParsed.query;
@@ -461,7 +454,7 @@ void doParsePathURL(const CharacterType* spec, int specLength, URLSegments& pars
     // handle the case where there is no scheme.
     if (ExtractScheme(&spec[begin], specLength - begin, &parsed.scheme)) {
         // Offset the results since we gave ExtractScheme a substring.
-        parsed.scheme.setBegin(parsed.scheme.begin() + begin);
+        parsed.scheme.moveBy(begin);
 
         // For compatability with the standard URL parser, we treat no path as
         // -1, rather than having a length of 0 (we normally wouldn't care so
@@ -509,7 +502,7 @@ void doParseMailtoURL(const CharacterType* spec, int specLength, URLSegments& pa
     // handle the case where there is no scheme.
     if (ExtractScheme(&spec[begin], specLength - begin, &parsed.scheme)) {
         // Offset the results since we gave ExtractScheme a substring.
-        parsed.scheme.setBegin(parsed.scheme.begin() + begin);
+        parsed.scheme.moveBy(begin);
 
         if (parsed.scheme.end() != specLength - 1) {
             pathBegin = parsed.scheme.end() + 1;
index 455ef55..9118219 100644 (file)
@@ -183,7 +183,7 @@ void doParseFileURL(const CharacterType* spec, int specLength, URLSegments& pars
     {
         if (ExtractScheme(&spec[begin], specLength - begin, &parsed.scheme)) {
             // Offset the results since we gave ExtractScheme a substring.
-            parsed.scheme.setBegin(parsed.scheme.begin() + begin);
+            parsed.scheme.moveBy(begin);
             afterScheme = parsed.scheme.end() + 1;
         } else {
             // No scheme found, remember that.
index 6f69e9f..14c95be 100644 (file)
@@ -110,26 +110,26 @@ int URLSegments::charactersBefore(ComponentType type, DelimiterInclusion include
     return current;
 }
 
-void URLSegments::moveComponentsAfter(ComponentType type, int offset)
+void URLSegments::moveFromComponentBy(ComponentType type, int offset)
 {
     switch (type) {
     // Fall through.
     case Scheme:
-        username.move(offset);
+        scheme.moveBy(offset);
     case Username:
-        password.move(offset);
+        username.moveBy(offset);
     case Password:
-        host.move(offset);
+        password.moveBy(offset);
     case Host:
-        port.move(offset);
+        host.moveBy(offset);
     case Port:
-        path.move(offset);
+        port.moveBy(offset);
     case Path:
-        query.move(offset);
+        path.moveBy(offset);
     case Query:
-        fragment.move(offset);
+        query.moveBy(offset);
     case Fragment:
-        break;
+        fragment.moveBy(offset);
     }
 }
 
index 0489713..971eec3 100644 (file)
@@ -121,8 +121,8 @@ public:
     //
     int charactersBefore(ComponentType, DelimiterInclusion) const;
 
-    // Shift all the components after ComponentType by 'offset'.
-    void moveComponentsAfter(ComponentType, int offset);
+    // Shift all the components from 'firstComponent' to the last component by 'offset'.
+    void moveFromComponentBy(ComponentType firstComponent, int offset);
 
     // Each component excludes the related delimiters and has a length of -1
     // if that component is absent but 0 if the component exists but is empty.