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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 } | 153 } |
154 // 8859_1 is known to (at least) ICU, but other browsers don't support this | 154 // 8859_1 is known to (at least) ICU, but other browsers don't support this |
155 // name - and having it caused a compatibility | 155 // name - and having it caused a compatibility |
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 ASSERT(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->get(name); |
167 ASSERT(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->add(alias, atomicName); | 171 textEncodingNameMap->add(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->get(name); |
178 ASSERT(atomicName); | 178 DCHECK(atomicName); |
179 textCodecMap->add(atomicName, TextCodecFactory(function, additionalData)); | 179 textCodecMap->add(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->get(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.append(it->key); | 194 names.append(it->key); |
195 } | 195 } |
196 | 196 |
197 textEncodingNameMap->removeAll(names); | 197 textEncodingNameMap->removeAll(names); |
198 | 198 |
199 textCodecMap->remove(atomicName); | 199 textCodecMap->remove(atomicName); |
200 } | 200 } |
201 } | 201 } |
202 | 202 |
203 static void buildBaseTextCodecMaps() { | 203 static void buildBaseTextCodecMaps() { |
204 ASSERT(isMainThread()); | 204 DCHECK(isMainThread()); |
205 ASSERT(!textCodecMap); | 205 DCHECK(!textCodecMap); |
206 ASSERT(!textEncodingNameMap); | 206 DCHECK(!textEncodingNameMap); |
207 | 207 |
208 textCodecMap = new TextCodecMap; | 208 textCodecMap = new TextCodecMap; |
209 textEncodingNameMap = new TextEncodingNameMap; | 209 textEncodingNameMap = new TextEncodingNameMap; |
210 | 210 |
211 TextCodecLatin1::registerEncodingNames(addToTextEncodingNameMap); | 211 TextCodecLatin1::registerEncodingNames(addToTextEncodingNameMap); |
212 TextCodecLatin1::registerCodecs(addToTextCodecMap); | 212 TextCodecLatin1::registerCodecs(addToTextCodecMap); |
213 | 213 |
214 TextCodecUTF8::registerEncodingNames(addToTextEncodingNameMap); | 214 TextCodecUTF8::registerEncodingNames(addToTextEncodingNameMap); |
215 TextCodecUTF8::registerCodecs(addToTextCodecMap); | 215 TextCodecUTF8::registerCodecs(addToTextCodecMap); |
216 | 216 |
(...skipping 18 matching lines...) Expand all Loading... |
235 | 235 |
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 ASSERT(textCodecMap); | 245 DCHECK(textCodecMap); |
246 TextCodecFactory factory = textCodecMap->get(encoding.name()); | 246 TextCodecFactory factory = textCodecMap->get(encoding.name()); |
247 ASSERT(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()); |
(...skipping 49 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 |