1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "config.h" 6 #include "wtf/text/TextCodecReplacement.h" 7 8 #include "wtf/PassOwnPtr.h" 9 #include "wtf/text/WTFString.h" 10 #include "wtf/unicode/CharacterNames.h" 11 12 namespace WTF { 13 14 TextCodecReplacement::TextCodecReplacement() 15 : m_sentEOF(false) 16 { 17 } 18 19 void TextCodecReplacement::registerEncodingNames(EncodingNameRegistrar registrar) 20 { 21 // The 'replacement' label itself should not be referenceable by 22 // resources or script - it's a specification convenience - but much of 23 // the wtf/text API asserts that an encoding name is a label for itself. 24 // This is handled in TextEncoding by marking it as not valid. 25 registrar("replacement", "replacement"); 26 27 registrar("csiso2022kr", "replacement"); 28 registrar("hz-gb-2312", "replacement"); 29 registrar("iso-2022-cn", "replacement"); 30 registrar("iso-2022-cn-ext", "replacement"); 31 registrar("iso-2022-kr", "replacement"); 32 } 33 34 static PassOwnPtr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*) 35 { 36 return adoptPtr(new TextCodecReplacement); 37 } 38 39 void TextCodecReplacement::registerCodecs(TextCodecRegistrar registrar) 40 { 41 registrar("replacement", newStreamingTextDecoderReplacement, 0); 42 } 43 44 String TextCodecReplacement::decode(const char*, size_t, FlushBehavior, bool, bool& sawError) 45 { 46 sawError = true; 47 if (m_sentEOF) 48 return String(); 49 50 m_sentEOF = true; 51 return String(&Unicode::replacementCharacter, 1); 52 } 53 54 } // namespace WTF 55