1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "nsSaveAsCharset.h"
8 #include "mozilla/dom/EncodingUtils.h"
9 
10 //
11 // nsISupports methods
12 //
NS_IMPL_ISUPPORTS(nsSaveAsCharset,nsISaveAsCharset)13 NS_IMPL_ISUPPORTS(nsSaveAsCharset, nsISaveAsCharset)
14 
15 //
16 // nsSaveAsCharset
17 //
18 nsSaveAsCharset::nsSaveAsCharset()
19 {
20 }
21 
~nsSaveAsCharset()22 nsSaveAsCharset::~nsSaveAsCharset()
23 {
24 }
25 
26 NS_IMETHODIMP
Init(const nsACString & aCharset,uint32_t aIgnored,uint32_t aAlsoIgnored)27 nsSaveAsCharset::Init(const nsACString& aCharset, uint32_t aIgnored, uint32_t aAlsoIgnored)
28 {
29   nsAutoCString encoding;
30   if (!mozilla::dom::EncodingUtils::FindEncodingForLabelNoReplacement(aCharset, encoding)) {
31     return NS_ERROR_DOM_ENCODING_NOT_SUPPORTED_ERR;
32   }
33   mEncoder = new nsNCRFallbackEncoderWrapper(encoding);
34   mCharset.Assign(encoding);
35   return NS_OK;
36 }
37 
38 NS_IMETHODIMP
Convert(const nsAString & aIn,nsACString & aOut)39 nsSaveAsCharset::Convert(const nsAString& aIn, nsACString& aOut)
40 {
41   if (!mEncoder) {
42     return NS_ERROR_DOM_ENCODING_NOT_SUPPORTED_ERR;
43   }
44 
45   if (!mEncoder->Encode(aIn, aOut)) {
46     return NS_ERROR_OUT_OF_MEMORY;
47   }
48   return NS_OK;
49 }
50 
51 NS_IMETHODIMP
GetCharset(nsACString & aCharset)52 nsSaveAsCharset::GetCharset(nsACString& aCharset)
53 {
54   aCharset.Assign(mCharset);
55   return NS_OK;
56 }
57