Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1148)

Unified Diff: third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp

Issue 1779033003: DevTools: always use 16bit strings for inspector protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebaselined Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp
diff --git a/third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp b/third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp
index 349525587b1734d109d5004cc02a1981dbfa59d0..6e79ed2b4136634ca7f6ce25972b707b93541b85 100644
--- a/third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp
+++ b/third_party/WebKit/Source/platform/inspector_protocol/Parser.cpp
@@ -33,8 +33,7 @@ const char* const nullString = "null";
const char* const trueString = "true";
const char* const falseString = "false";
-template<typename CharType>
-bool parseConstToken(const CharType* start, const CharType* end, const CharType** tokenEnd, const char* token)
+bool parseConstToken(const UChar* start, const UChar* end, const UChar** tokenEnd, const char* token)
{
while (start < end && *token != '\0' && *start++ == *token++) { }
if (*token != '\0')
@@ -43,8 +42,7 @@ bool parseConstToken(const CharType* start, const CharType* end, const CharType*
return true;
}
-template<typename CharType>
-bool readInt(const CharType* start, const CharType* end, const CharType** tokenEnd, bool canHaveLeadingZeros)
+bool readInt(const UChar* start, const UChar* end, const UChar** tokenEnd, bool canHaveLeadingZeros)
{
if (start == end)
return false;
@@ -62,14 +60,13 @@ bool readInt(const CharType* start, const CharType* end, const CharType** tokenE
return true;
}
-template<typename CharType>
-bool parseNumberToken(const CharType* start, const CharType* end, const CharType** tokenEnd)
+bool parseNumberToken(const UChar* start, const UChar* end, const UChar** tokenEnd)
{
// We just grab the number here. We validate the size in DecodeNumber.
// According to RFC4627, a valid number is: [minus] int [frac] [exp]
if (start == end)
return false;
- CharType c = *start;
+ UChar c = *start;
if ('-' == c)
++start;
@@ -112,13 +109,12 @@ bool parseNumberToken(const CharType* start, const CharType* end, const CharType
return true;
}
-template<typename CharType>
-bool readHexDigits(const CharType* start, const CharType* end, const CharType** tokenEnd, int digits)
+bool readHexDigits(const UChar* start, const UChar* end, const UChar** tokenEnd, int digits)
{
if (end - start < digits)
return false;
for (int i = 0; i < digits; ++i) {
- CharType c = *start++;
+ UChar c = *start++;
if (!(('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')))
return false;
}
@@ -126,11 +122,10 @@ bool readHexDigits(const CharType* start, const CharType* end, const CharType**
return true;
}
-template<typename CharType>
-bool parseStringToken(const CharType* start, const CharType* end, const CharType** tokenEnd)
+bool parseStringToken(const UChar* start, const UChar* end, const UChar** tokenEnd)
{
while (start < end) {
- CharType c = *start++;
+ UChar c = *start++;
if ('\\' == c) {
c = *start++;
// Make sure the escaped char is valid.
@@ -164,8 +159,7 @@ bool parseStringToken(const CharType* start, const CharType* end, const CharType
return false;
}
-template<typename CharType>
-bool skipComment(const CharType* start, const CharType* end, const CharType** commentEnd)
+bool skipComment(const UChar* start, const UChar* end, const UChar** commentEnd)
{
if (start == end)
return false;
@@ -188,7 +182,7 @@ bool skipComment(const CharType* start, const CharType* end, const CharType** co
}
if (*start == '*') {
- CharType previous = '\0';
+ UChar previous = '\0';
// Block comment, read until end marker.
for (++start; start < end; previous = *start++) {
if (previous == '*' && *start == '/') {
@@ -203,14 +197,13 @@ bool skipComment(const CharType* start, const CharType* end, const CharType** co
return false;
}
-template<typename CharType>
-void skipWhitespaceAndComments(const CharType* start, const CharType* end, const CharType** whitespaceEnd)
+void skipWhitespaceAndComments(const UChar* start, const UChar* end, const UChar** whitespaceEnd)
{
while (start < end) {
if (isSpaceOrNewline(*start)) {
++start;
} else if (*start == '/') {
- const CharType* commentEnd;
+ const UChar* commentEnd;
if (!skipComment(start, end, &commentEnd))
break;
start = commentEnd;
@@ -221,8 +214,7 @@ void skipWhitespaceAndComments(const CharType* start, const CharType* end, const
*whitespaceEnd = start;
}
-template<typename CharType>
-Token parseToken(const CharType* start, const CharType* end, const CharType** tokenStart, const CharType** tokenEnd)
+Token parseToken(const UChar* start, const UChar* end, const UChar** tokenStart, const UChar** tokenEnd)
{
skipWhitespaceAndComments(start, end, tokenStart);
start = *tokenStart;
@@ -283,8 +275,7 @@ Token parseToken(const CharType* start, const CharType* end, const CharType** to
return InvalidToken;
}
-template<typename CharType>
-inline int hexToInt(CharType c)
+inline int hexToInt(UChar c)
{
if ('0' <= c && c <= '9')
return c - '0';
@@ -296,52 +287,7 @@ inline int hexToInt(CharType c)
return 0;
}
-template<typename CharType>
-bool decodeUTF8(const CharType* start, const CharType* end, const CharType** utf8charEnd, String16Builder* output)
-{
- UChar utf16[4] = {0};
- char utf8[6] = {0};
- size_t utf8count = 0;
-
- while (start < end) {
- if (start + 1 >= end || *start != '\\' || *(start + 1) != 'x')
- return false;
- start += 2;
-
- // Accumulate one more utf8 character and try converting to utf16.
- if (start + 1 >= end)
- return false;
- utf8[utf8count++] = (hexToInt(*start) << 4) + hexToInt(*(start + 1));
- start += 2;
-
- const char* utf8start = utf8;
- UChar* utf16start = utf16;
- String16::ConversionResult conversionResult = String16::convertUTF8ToUTF16(&utf8start, utf8start + utf8count, &utf16start, utf16start + 4, nullptr, true);
-
- if (conversionResult == String16::sourceIllegal)
- return false;
-
- if (conversionResult == String16::conversionOK) {
- // Not all utf8 characters were consumed - failed parsing.
- if (utf8start != utf8 + utf8count)
- return false;
-
- size_t utf16length = utf16start - utf16;
- output->append(utf16, utf16length);
- *utf8charEnd = start;
- return true;
- }
-
- // Keep accumulating utf8 characters up to buffer length (6 should be enough).
- if (utf8count >= 6)
- return false;
- }
-
- return false;
-}
-
-template<typename CharType>
-bool decodeString(const CharType* start, const CharType* end, String16Builder* output)
+bool decodeString(const UChar* start, const UChar* end, String16Builder* output)
{
while (start < end) {
UChar c = *start++;
@@ -352,10 +298,8 @@ bool decodeString(const CharType* start, const CharType* end, String16Builder* o
c = *start++;
if (c == 'x') {
- // Rewind "\x".
- if (!decodeUTF8(start - 2, end, &start, output))
- return false;
- continue;
+ // \x is not supported.
+ return false;
}
switch (c) {
@@ -396,8 +340,7 @@ bool decodeString(const CharType* start, const CharType* end, String16Builder* o
return true;
}
-template<typename CharType>
-bool decodeString(const CharType* start, const CharType* end, String16* output)
+bool decodeString(const UChar* start, const UChar* end, String16* output)
{
if (start == end) {
*output = "";
@@ -410,21 +353,17 @@ bool decodeString(const CharType* start, const CharType* end, String16* output)
if (!decodeString(start, end, &buffer))
return false;
*output = buffer.toString();
- // Validate constructed utf16 string.
- if (!output->validateUTF8())
- return false;
return true;
}
-template<typename CharType>
-PassOwnPtr<Value> buildValue(const CharType* start, const CharType* end, const CharType** valueTokenEnd, int depth)
+PassOwnPtr<Value> buildValue(const UChar* start, const UChar* end, const UChar** valueTokenEnd, int depth)
{
if (depth > stackLimit)
return nullptr;
OwnPtr<Value> result;
- const CharType* tokenStart;
- const CharType* tokenEnd;
+ const UChar* tokenStart;
+ const UChar* tokenEnd;
Token token = parseToken(start, end, &tokenStart, &tokenEnd);
switch (token) {
case InvalidToken:
@@ -533,11 +472,10 @@ PassOwnPtr<Value> buildValue(const CharType* start, const CharType* end, const C
return result.release();
}
-template<typename CharType>
-PassOwnPtr<Value> parseJSONInternal(const CharType* start, unsigned length)
+PassOwnPtr<Value> parseJSONInternal(const UChar* start, unsigned length)
{
- const CharType* end = start + length;
- const CharType *tokenEnd;
+ const UChar* end = start + length;
+ const UChar *tokenEnd;
OwnPtr<Value> value = buildValue(start, end, &tokenEnd, 0);
if (!value || tokenEnd != end)
return nullptr;
@@ -550,8 +488,6 @@ PassOwnPtr<Value> parseJSON(const String16& json)
{
if (json.isEmpty())
return nullptr;
- if (json.is8Bit())
- return parseJSONInternal(json.characters8(), json.length());
return parseJSONInternal(json.characters16(), json.length());
}

Powered by Google App Engine
This is Rietveld 408576698