| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2007-2009 Torch Mobile, Inc. | 3 * Copyright (C) 2007-2009 Torch Mobile, Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 | 120 |
| 121 static const char textEncodingNameBlacklist[][6] = {"UTF-7"}; | 121 static const char textEncodingNameBlacklist[][6] = {"UTF-7"}; |
| 122 | 122 |
| 123 #if ERROR_DISABLED | 123 #if ERROR_DISABLED |
| 124 | 124 |
| 125 static inline void checkExistingName(const char*, const char*) {} | 125 static inline void checkExistingName(const char*, const char*) {} |
| 126 | 126 |
| 127 #else | 127 #else |
| 128 | 128 |
| 129 static void checkExistingName(const char* alias, const char* atomicName) { | 129 static void checkExistingName(const char* alias, const char* atomicName) { |
| 130 const char* oldAtomicName = textEncodingNameMap->get(alias); | 130 const char* oldAtomicName = textEncodingNameMap->at(alias); |
| 131 if (!oldAtomicName) | 131 if (!oldAtomicName) |
| 132 return; | 132 return; |
| 133 if (oldAtomicName == atomicName) | 133 if (oldAtomicName == atomicName) |
| 134 return; | 134 return; |
| 135 // Keep the warning silent about one case where we know this will happen. | 135 // Keep the warning silent about one case where we know this will happen. |
| 136 if (strcmp(alias, "ISO-8859-8-I") == 0 && | 136 if (strcmp(alias, "ISO-8859-8-I") == 0 && |
| 137 strcmp(oldAtomicName, "ISO-8859-8-I") == 0 && | 137 strcmp(oldAtomicName, "ISO-8859-8-I") == 0 && |
| 138 strcasecmp(atomicName, "iso-8859-8") == 0) | 138 strcasecmp(atomicName, "iso-8859-8") == 0) |
| 139 return; | 139 return; |
| 140 LOG(ERROR) << "alias " << alias << " maps to " << oldAtomicName | 140 LOG(ERROR) << "alias " << alias << " maps to " << oldAtomicName |
| (...skipping 15 matching lines...) Expand all Loading... |
| 156 // problem, see bug 43554. | 156 // problem, see bug 43554. |
| 157 if (0 == strcmp(alias, "8859_1")) | 157 if (0 == strcmp(alias, "8859_1")) |
| 158 return true; | 158 return true; |
| 159 return false; | 159 return false; |
| 160 } | 160 } |
| 161 | 161 |
| 162 static void addToTextEncodingNameMap(const char* alias, const char* name) { | 162 static void addToTextEncodingNameMap(const char* alias, const char* name) { |
| 163 DCHECK_LE(strlen(alias), maxEncodingNameLength); | 163 DCHECK_LE(strlen(alias), maxEncodingNameLength); |
| 164 if (isUndesiredAlias(alias)) | 164 if (isUndesiredAlias(alias)) |
| 165 return; | 165 return; |
| 166 const char* atomicName = textEncodingNameMap->get(name); | 166 const char* atomicName = textEncodingNameMap->at(name); |
| 167 DCHECK(strcmp(alias, name) == 0 || atomicName); | 167 DCHECK(strcmp(alias, name) == 0 || atomicName); |
| 168 if (!atomicName) | 168 if (!atomicName) |
| 169 atomicName = name; | 169 atomicName = name; |
| 170 checkExistingName(alias, atomicName); | 170 checkExistingName(alias, atomicName); |
| 171 textEncodingNameMap->insert(alias, atomicName); | 171 textEncodingNameMap->insert(alias, atomicName); |
| 172 } | 172 } |
| 173 | 173 |
| 174 static void addToTextCodecMap(const char* name, | 174 static void addToTextCodecMap(const char* name, |
| 175 NewTextCodecFunction function, | 175 NewTextCodecFunction function, |
| 176 const void* additionalData) { | 176 const void* additionalData) { |
| 177 const char* atomicName = textEncodingNameMap->get(name); | 177 const char* atomicName = textEncodingNameMap->at(name); |
| 178 DCHECK(atomicName); | 178 DCHECK(atomicName); |
| 179 textCodecMap->insert(atomicName, TextCodecFactory(function, additionalData)); | 179 textCodecMap->insert(atomicName, TextCodecFactory(function, additionalData)); |
| 180 } | 180 } |
| 181 | 181 |
| 182 static void pruneBlacklistedCodecs() { | 182 static void pruneBlacklistedCodecs() { |
| 183 for (size_t i = 0; i < WTF_ARRAY_LENGTH(textEncodingNameBlacklist); ++i) { | 183 for (size_t i = 0; i < WTF_ARRAY_LENGTH(textEncodingNameBlacklist); ++i) { |
| 184 const char* atomicName = | 184 const char* atomicName = |
| 185 textEncodingNameMap->get(textEncodingNameBlacklist[i]); | 185 textEncodingNameMap->at(textEncodingNameBlacklist[i]); |
| 186 if (!atomicName) | 186 if (!atomicName) |
| 187 continue; | 187 continue; |
| 188 | 188 |
| 189 Vector<const char*> names; | 189 Vector<const char*> names; |
| 190 TextEncodingNameMap::const_iterator it = textEncodingNameMap->begin(); | 190 TextEncodingNameMap::const_iterator it = textEncodingNameMap->begin(); |
| 191 TextEncodingNameMap::const_iterator end = textEncodingNameMap->end(); | 191 TextEncodingNameMap::const_iterator end = textEncodingNameMap->end(); |
| 192 for (; it != end; ++it) { | 192 for (; it != end; ++it) { |
| 193 if (it->value == atomicName) | 193 if (it->value == atomicName) |
| 194 names.push_back(it->key); | 194 names.push_back(it->key); |
| 195 } | 195 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 TextCodecICU::registerEncodingNames(addToTextEncodingNameMap); | 236 TextCodecICU::registerEncodingNames(addToTextEncodingNameMap); |
| 237 TextCodecICU::registerCodecs(addToTextCodecMap); | 237 TextCodecICU::registerCodecs(addToTextCodecMap); |
| 238 | 238 |
| 239 pruneBlacklistedCodecs(); | 239 pruneBlacklistedCodecs(); |
| 240 } | 240 } |
| 241 | 241 |
| 242 std::unique_ptr<TextCodec> newTextCodec(const TextEncoding& encoding) { | 242 std::unique_ptr<TextCodec> newTextCodec(const TextEncoding& encoding) { |
| 243 MutexLocker lock(encodingRegistryMutex()); | 243 MutexLocker lock(encodingRegistryMutex()); |
| 244 | 244 |
| 245 DCHECK(textCodecMap); | 245 DCHECK(textCodecMap); |
| 246 TextCodecFactory factory = textCodecMap->get(encoding.name()); | 246 TextCodecFactory factory = textCodecMap->at(encoding.name()); |
| 247 DCHECK(factory.function); | 247 DCHECK(factory.function); |
| 248 return factory.function(encoding, factory.additionalData); | 248 return factory.function(encoding, factory.additionalData); |
| 249 } | 249 } |
| 250 | 250 |
| 251 const char* atomicCanonicalTextEncodingName(const char* name) { | 251 const char* atomicCanonicalTextEncodingName(const char* name) { |
| 252 if (!name || !name[0]) | 252 if (!name || !name[0]) |
| 253 return 0; | 253 return 0; |
| 254 if (!textEncodingNameMap) | 254 if (!textEncodingNameMap) |
| 255 buildBaseTextCodecMaps(); | 255 buildBaseTextCodecMaps(); |
| 256 | 256 |
| 257 MutexLocker lock(encodingRegistryMutex()); | 257 MutexLocker lock(encodingRegistryMutex()); |
| 258 | 258 |
| 259 if (const char* atomicName = textEncodingNameMap->get(name)) | 259 if (const char* atomicName = textEncodingNameMap->at(name)) |
| 260 return atomicName; | 260 return atomicName; |
| 261 if (atomicDidExtendTextCodecMaps()) | 261 if (atomicDidExtendTextCodecMaps()) |
| 262 return 0; | 262 return 0; |
| 263 extendTextCodecMaps(); | 263 extendTextCodecMaps(); |
| 264 atomicSetDidExtendTextCodecMaps(); | 264 atomicSetDidExtendTextCodecMaps(); |
| 265 return textEncodingNameMap->get(name); | 265 return textEncodingNameMap->at(name); |
| 266 } | 266 } |
| 267 | 267 |
| 268 template <typename CharacterType> | 268 template <typename CharacterType> |
| 269 const char* atomicCanonicalTextEncodingName(const CharacterType* characters, | 269 const char* atomicCanonicalTextEncodingName(const CharacterType* characters, |
| 270 size_t length) { | 270 size_t length) { |
| 271 char buffer[maxEncodingNameLength + 1]; | 271 char buffer[maxEncodingNameLength + 1]; |
| 272 size_t j = 0; | 272 size_t j = 0; |
| 273 for (size_t i = 0; i < length; ++i) { | 273 for (size_t i = 0; i < length; ++i) { |
| 274 char c = static_cast<char>(characters[i]); | 274 char c = static_cast<char>(characters[i]); |
| 275 if (j == maxEncodingNameLength || c != characters[i]) | 275 if (j == maxEncodingNameLength || c != characters[i]) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 MutexLocker lock(encodingRegistryMutex()); | 307 MutexLocker lock(encodingRegistryMutex()); |
| 308 | 308 |
| 309 TextEncodingNameMap::const_iterator it = textEncodingNameMap->begin(); | 309 TextEncodingNameMap::const_iterator it = textEncodingNameMap->begin(); |
| 310 TextEncodingNameMap::const_iterator end = textEncodingNameMap->end(); | 310 TextEncodingNameMap::const_iterator end = textEncodingNameMap->end(); |
| 311 for (; it != end; ++it) | 311 for (; it != end; ++it) |
| 312 fprintf(stderr, "'%s' => '%s'\n", it->key, it->value); | 312 fprintf(stderr, "'%s' => '%s'\n", it->key, it->value); |
| 313 } | 313 } |
| 314 #endif | 314 #endif |
| 315 | 315 |
| 316 } // namespace WTF | 316 } // namespace WTF |
| OLD | NEW |