OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 namespace { | 40 namespace { |
41 | 41 |
42 const char* const nullString = "null"; | 42 const char* const nullString = "null"; |
43 const char* const trueString = "true"; | 43 const char* const trueString = "true"; |
44 const char* const falseString = "false"; | 44 const char* const falseString = "false"; |
45 | 45 |
46 inline bool escapeChar(UChar c, StringBuilder* dst) | 46 inline bool escapeChar(UChar c, StringBuilder* dst) |
47 { | 47 { |
48 switch (c) { | 48 switch (c) { |
49 case '\b': dst->append("\\b", 2); break; | 49 case '\b': dst->appendLiteral("\\b"); break; |
50 case '\f': dst->append("\\f", 2); break; | 50 case '\f': dst->appendLiteral("\\f"); break; |
51 case '\n': dst->append("\\n", 2); break; | 51 case '\n': dst->appendLiteral("\\n"); break; |
52 case '\r': dst->append("\\r", 2); break; | 52 case '\r': dst->appendLiteral("\\r"); break; |
53 case '\t': dst->append("\\t", 2); break; | 53 case '\t': dst->appendLiteral("\\t"); break; |
54 case '\\': dst->append("\\\\", 2); break; | 54 case '\\': dst->appendLiteral("\\\\"); break; |
55 case '"': dst->append("\\\"", 2); break; | 55 case '"': dst->appendLiteral("\\\""); break; |
56 default: | 56 default: |
57 return false; | 57 return false; |
58 } | 58 } |
59 return true; | 59 return true; |
60 } | 60 } |
61 | 61 |
62 inline void doubleQuoteString(const String& str, StringBuilder* dst) | 62 inline void doubleQuoteString(const String& str, StringBuilder* dst) |
63 { | 63 { |
64 dst->append('"'); | 64 dst->append('"'); |
65 for (unsigned i = 0; i < str.length(); ++i) { | 65 for (unsigned i = 0; i < str.length(); ++i) { |
(...skipping 10 matching lines...) Expand all Loading... |
76 dst->append(c); | 76 dst->append(c); |
77 } | 77 } |
78 } | 78 } |
79 } | 79 } |
80 dst->append('"'); | 80 dst->append('"'); |
81 } | 81 } |
82 | 82 |
83 void writeIndent(int depth, StringBuilder* output) | 83 void writeIndent(int depth, StringBuilder* output) |
84 { | 84 { |
85 for (int i = 0; i < depth; ++i) | 85 for (int i = 0; i < depth; ++i) |
86 output->append(" "); | 86 output->appendLiteral(" "); |
87 } | 87 } |
88 | 88 |
89 } // anonymous namespace | 89 } // anonymous namespace |
90 | 90 |
91 bool JSONValue::asBoolean(bool*) const | 91 bool JSONValue::asBoolean(bool*) const |
92 { | 92 { |
93 return false; | 93 return false; |
94 } | 94 } |
95 | 95 |
96 bool JSONValue::asNumber(double*) const | 96 bool JSONValue::asNumber(double*) const |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 output->append(','); | 388 output->append(','); |
389 doubleQuoteString(it->key, output); | 389 doubleQuoteString(it->key, output); |
390 output->append(':'); | 390 output->append(':'); |
391 it->value->writeJSON(output); | 391 it->value->writeJSON(output); |
392 } | 392 } |
393 output->append('}'); | 393 output->append('}'); |
394 } | 394 } |
395 | 395 |
396 void JSONObjectBase::prettyWriteJSONInternal(StringBuilder* output, int depth) c
onst | 396 void JSONObjectBase::prettyWriteJSONInternal(StringBuilder* output, int depth) c
onst |
397 { | 397 { |
398 output->append("{\n"); | 398 output->appendLiteral("{\n"); |
399 for (size_t i = 0; i < m_order.size(); ++i) { | 399 for (size_t i = 0; i < m_order.size(); ++i) { |
400 Dictionary::const_iterator it = m_data.find(m_order[i]); | 400 Dictionary::const_iterator it = m_data.find(m_order[i]); |
401 ASSERT_WITH_SECURITY_IMPLICATION(it != m_data.end()); | 401 ASSERT_WITH_SECURITY_IMPLICATION(it != m_data.end()); |
402 if (i) | 402 if (i) |
403 output->append(",\n"); | 403 output->appendLiteral(",\n"); |
404 writeIndent(depth + 1, output); | 404 writeIndent(depth + 1, output); |
405 doubleQuoteString(it->key, output); | 405 doubleQuoteString(it->key, output); |
406 output->append(": "); | 406 output->appendLiteral(": "); |
407 it->value->prettyWriteJSONInternal(output, depth + 1); | 407 it->value->prettyWriteJSONInternal(output, depth + 1); |
408 } | 408 } |
409 output->append('\n'); | 409 output->append('\n'); |
410 writeIndent(depth, output); | 410 writeIndent(depth, output); |
411 output->append('}'); | 411 output->append('}'); |
412 } | 412 } |
413 | 413 |
414 JSONObjectBase::JSONObjectBase() | 414 JSONObjectBase::JSONObjectBase() |
415 : JSONValue(TypeObject) | 415 : JSONValue(TypeObject) |
416 , m_data() | 416 , m_data() |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 m_data.append(value); | 520 m_data.append(value); |
521 } | 521 } |
522 | 522 |
523 PassRefPtr<JSONValue> JSONArrayBase::get(size_t index) | 523 PassRefPtr<JSONValue> JSONArrayBase::get(size_t index) |
524 { | 524 { |
525 ASSERT_WITH_SECURITY_IMPLICATION(index < m_data.size()); | 525 ASSERT_WITH_SECURITY_IMPLICATION(index < m_data.size()); |
526 return m_data[index]; | 526 return m_data[index]; |
527 } | 527 } |
528 | 528 |
529 } // namespace blink | 529 } // namespace blink |
OLD | NEW |