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

Side by Side Diff: Source/wtf/text/TextEncoding.cpp

Issue 810033005: Initialize TextEncoding singletons in a threadsafe manner. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> 3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
4 * Copyright (C) 2007-2009 Torch Mobile, Inc. 4 * Copyright (C) 2007-2009 Torch Mobile, Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 14 matching lines...) Expand all
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 #include "config.h" 28 #include "config.h"
29 #include "wtf/text/TextEncoding.h" 29 #include "wtf/text/TextEncoding.h"
30 30
31 #include "wtf/text/TextEncodingRegistry.h" 31 #include "wtf/text/TextEncodingRegistry.h"
32 #include <unicode/unorm.h> 32 #include <unicode/unorm.h>
33 #include "wtf/OwnPtr.h" 33 #include "wtf/OwnPtr.h"
34 #include "wtf/StdLibExtras.h" 34 #include "wtf/StdLibExtras.h"
35 #include "wtf/Threading.h"
35 #include "wtf/text/CString.h" 36 #include "wtf/text/CString.h"
36 #include "wtf/text/WTFString.h" 37 #include "wtf/text/WTFString.h"
37 38
38 namespace WTF { 39 namespace WTF {
39 40
40 static const TextEncoding& UTF7Encoding() 41 static const TextEncoding& UTF7Encoding()
41 { 42 {
42 static TextEncoding globalUTF7Encoding("UTF-7"); 43 AtomicallyInitializedStatic(TextEncoding, globalUTF7Encoding = *new TextEnco ding("UTF-7"));
43 return globalUTF7Encoding; 44 return globalUTF7Encoding;
44 } 45 }
45 46
46 TextEncoding::TextEncoding(const char* name) 47 TextEncoding::TextEncoding(const char* name)
47 : m_name(atomicCanonicalTextEncodingName(name)) 48 : m_name(atomicCanonicalTextEncodingName(name))
48 { 49 {
49 // Aliases are valid, but not "replacement" itself. 50 // Aliases are valid, but not "replacement" itself.
50 if (m_name && isReplacementEncoding(name)) 51 if (m_name && isReplacementEncoding(name))
51 m_name = 0; 52 m_name = 0;
52 } 53 }
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 // but it's fraught with problems and we'd rather steer clear of it. 168 // but it's fraught with problems and we'd rather steer clear of it.
168 const TextEncoding& TextEncoding::encodingForFormSubmission() const 169 const TextEncoding& TextEncoding::encodingForFormSubmission() const
169 { 170 {
170 if (isNonByteBasedEncoding() || isUTF7Encoding()) 171 if (isNonByteBasedEncoding() || isUTF7Encoding())
171 return UTF8Encoding(); 172 return UTF8Encoding();
172 return *this; 173 return *this;
173 } 174 }
174 175
175 const TextEncoding& ASCIIEncoding() 176 const TextEncoding& ASCIIEncoding()
176 { 177 {
177 static TextEncoding globalASCIIEncoding("ASCII"); 178 AtomicallyInitializedStatic(TextEncoding, globalASCIIEncoding = *new TextEnc oding("ASCII"));
178 return globalASCIIEncoding; 179 return globalASCIIEncoding;
179 } 180 }
180 181
181 const TextEncoding& Latin1Encoding() 182 const TextEncoding& Latin1Encoding()
182 { 183 {
183 static TextEncoding globalLatin1Encoding("latin1"); 184 AtomicallyInitializedStatic(TextEncoding, globalLatin1Encoding = *new TextEn coding("latin1"));
184 return globalLatin1Encoding; 185 return globalLatin1Encoding;
185 } 186 }
186 187
187 const TextEncoding& UTF16BigEndianEncoding() 188 const TextEncoding& UTF16BigEndianEncoding()
188 { 189 {
189 static TextEncoding globalUTF16BigEndianEncoding("UTF-16BE"); 190 AtomicallyInitializedStatic(TextEncoding, globalUTF16BigEndianEncoding = *ne w TextEncoding("UTF-16BE"));
190 return globalUTF16BigEndianEncoding; 191 return globalUTF16BigEndianEncoding;
191 } 192 }
192 193
193 const TextEncoding& UTF16LittleEndianEncoding() 194 const TextEncoding& UTF16LittleEndianEncoding()
194 { 195 {
195 static TextEncoding globalUTF16LittleEndianEncoding("UTF-16LE"); 196 AtomicallyInitializedStatic(TextEncoding, globalUTF16LittleEndianEncoding = *new TextEncoding("UTF-16LE"));
196 return globalUTF16LittleEndianEncoding; 197 return globalUTF16LittleEndianEncoding;
197 } 198 }
198 199
199 const TextEncoding& UTF32BigEndianEncoding() 200 const TextEncoding& UTF32BigEndianEncoding()
200 { 201 {
201 static TextEncoding globalUTF32BigEndianEncoding("UTF-32BE"); 202 AtomicallyInitializedStatic(TextEncoding, globalUTF32BigEndianEncoding = *ne w TextEncoding("UTF-32BE"));
202 return globalUTF32BigEndianEncoding; 203 return globalUTF32BigEndianEncoding;
203 } 204 }
204 205
205 const TextEncoding& UTF32LittleEndianEncoding() 206 const TextEncoding& UTF32LittleEndianEncoding()
206 { 207 {
207 static TextEncoding globalUTF32LittleEndianEncoding("UTF-32LE"); 208 AtomicallyInitializedStatic(TextEncoding, globalUTF32LittleEndianEncoding = *new TextEncoding("UTF-32LE"));
208 return globalUTF32LittleEndianEncoding; 209 return globalUTF32LittleEndianEncoding;
209 } 210 }
210 211
211 const TextEncoding& UTF8Encoding() 212 const TextEncoding& UTF8Encoding()
212 { 213 {
213 static TextEncoding globalUTF8Encoding("UTF-8"); 214 AtomicallyInitializedStatic(TextEncoding, globalUTF8Encoding = *new TextEnco ding("UTF-8"));
214 ASSERT(globalUTF8Encoding.isValid()); 215 ASSERT(globalUTF8Encoding.isValid());
215 return globalUTF8Encoding; 216 return globalUTF8Encoding;
216 } 217 }
217 218
218 const TextEncoding& WindowsLatin1Encoding() 219 const TextEncoding& WindowsLatin1Encoding()
219 { 220 {
220 static TextEncoding globalWindowsLatin1Encoding("WinLatin1"); 221 AtomicallyInitializedStatic(TextEncoding, globalWindowsLatin1Encoding = *new TextEncoding("WinLatin1"));
221 return globalWindowsLatin1Encoding; 222 return globalWindowsLatin1Encoding;
222 } 223 }
223 224
224 } // namespace WTF 225 } // namespace WTF
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698