| // Copyright 2016 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/i18n/encoding_detection.h" | 
 |  | 
 | #include "build/build_config.h" | 
 | #include "third_party/ced/src/compact_enc_det/compact_enc_det.h" | 
 |  | 
 | // third_party/ced/src/util/encodings/encodings.h, which is included | 
 | // by the include above, undefs UNICODE because that is a macro used | 
 | // internally in ced. If we later in the same translation unit do | 
 | // anything related to Windows or Windows headers those will then use | 
 | // the ASCII versions which we do not want. To avoid that happening in | 
 | // jumbo builds, we redefine UNICODE again here. | 
 | #if defined(OS_WIN) | 
 | #define UNICODE 1 | 
 | #endif  // OS_WIN | 
 |  | 
 | namespace base { | 
 |  | 
 | bool DetectEncoding(const std::string& text, std::string* encoding) { | 
 |   int consumed_bytes; | 
 |   bool is_reliable; | 
 |   Encoding enc = CompactEncDet::DetectEncoding( | 
 |       text.c_str(), text.length(), nullptr, nullptr, nullptr, | 
 |       UNKNOWN_ENCODING, | 
 |       UNKNOWN_LANGUAGE, | 
 |       CompactEncDet::QUERY_CORPUS,  // plain text | 
 |       false,  // Include 7-bit encodings | 
 |       &consumed_bytes, | 
 |       &is_reliable); | 
 |  | 
 |   if (enc == UNKNOWN_ENCODING) | 
 |     return false; | 
 |  | 
 |   *encoding = MimeEncodingName(enc); | 
 |   return true; | 
 | } | 
 | }  // namespace base |