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 12namespace WTF { 13 14TextCodecReplacement::TextCodecReplacement() 15 : m_sentEOF(false) 16{ 17} 18 19void 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 34static PassOwnPtr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*) 35{ 36 return adoptPtr(new TextCodecReplacement); 37} 38 39void TextCodecReplacement::registerCodecs(TextCodecRegistrar registrar) 40{ 41 registrar("replacement", newStreamingTextDecoderReplacement, 0); 42} 43 44String 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