Commit 3dc3a91a authored by mmenke@chromium.org's avatar mmenke@chromium.org

Consolidate most of net/'s icu_string+conversions dependencies.

TBR=brettw@chromium.org
BUG=362608

Review URL: https://codereview.chromium.org/252733002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266957 0039d316-1c4b-4281-b951-d872f2087c98
parent 6bd9f15f
......@@ -23,7 +23,7 @@ specific_include_rules = {
# Within net, only used by file: requests.
"filename_util\.cc": [
"+base/i18n",
"+base/i18n/file_util_icu.h",
],
# Functions largely not used by the rest of net.
......@@ -37,26 +37,17 @@ specific_include_rules = {
"+base/i18n",
],
# Only use icu for string conversions.
"escape_unittest\.cc": [
"+base/i18n/icu_string_conversions.h",
],
"http_auth_handler_basic\.cc": [
"+base/i18n/icu_string_conversions.h",
],
"http_auth_handler_digest\.cc": [
# Consolidated string functions that depend on icu.
"net_string_util_icu\.cc": [
"+base/i18n/i18n_constants.h",
"+base/i18n/icu_string_conversions.h",
"+third_party/icu/source/common/unicode/ucnv.h"
],
# Only use icu for string conversions.
"proxy_script_fetcher_impl\.cc": [
"+base/i18n/icu_string_conversions.h",
],
"x509_cert_types_mac\.cc": [
"+base/i18n/icu_string_conversions.h",
],
"http_content_disposition\.cc": [
"+base/i18n/icu_string_conversions.h",
"+third_party/icu",
],
"websocket_channel\.h": [
"+base/i18n",
],
......
......@@ -8,7 +8,6 @@
#include "net/base/escape.h"
#include "base/basictypes.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
......
......@@ -7,7 +7,6 @@
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/i18n/file_util_icu.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
......@@ -15,6 +14,7 @@
#include "base/threading/thread_restrictions.h"
#include "net/base/escape.h"
#include "net/base/mime_util.h"
#include "net/base/net_string_util.h"
#include "net/http/http_content_disposition.h"
#include "url/gurl.h"
......@@ -77,9 +77,8 @@ std::string GetFileNameFromURL(const GURL& url,
// encoding detection.
base::string16 utf16_output;
if (!referrer_charset.empty() &&
base::CodepageToUTF16(unescaped_url_filename,
net::ConvertToUTF16(unescaped_url_filename,
referrer_charset.c_str(),
base::OnStringConversionError::FAIL,
&utf16_output)) {
decoded_filename = base::UTF16ToUTF8(utf16_output);
} else {
......
// Copyright 2014 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.
#ifndef NET_BASE_NET_STRING_UTIL_H__
#define NET_BASE_NET_STRING_UTIL_H__
#include <string>
#include "base/strings/string16.h"
// String conversion functions. By default, they're implemented with ICU, but
// when building with USE_ICU_ALTERNATIVES, they use platform functions instead.
namespace net {
// Converts |text| using |charset| to UTF-8, and writes it to |output|.
// On failure, returns false and |output| is cleared.
bool ConvertToUtf8(const std::string& text, const char* charset,
std::string* output);
// Converts |text| using |charset| to UTF-8, normalizes the result, and writes
// it to |output|. On failure, returns false and |output| is cleared.
bool ConvertToUtf8AndNormalize(const std::string& text, const char* charset,
std::string* output);
// Converts |text| encoded in Latin-1 to UTF-8, normalizes the result, and
// writes it to |output|. On failure, returns false and |output| is cleared.
bool ConvertLatin1ToUtf8AndNormalize(const std::string& text,
std::string* output);
// Converts |text| using |charset| to UTF-16, and writes it to |output|.
// On failure, returns false and |output| is cleared.
bool ConvertToUTF16(const std::string& text, const char* charset,
base::string16* output);
// Converts |text| encoded in Latin-1 to UTF-16, and writes it to |output|.
// On failure, returns false and |output| is cleared.
bool ConvertLatin1ToUTF16(const std::string& text, base::string16* output);
} // namespace net
#endif // NET_BASE_NET_STRING_UTIL_H__
// Copyright 2014 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 "net/base/net_string_util.h"
#include "base/i18n/i18n_constants.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/strings/string_util.h"
#include "third_party/icu/source/common/unicode/ucnv.h"
namespace net {
bool ConvertToUtf8(const std::string& text, const char* charset,
std::string* output) {
output->clear();
UErrorCode err = U_ZERO_ERROR;
UConverter* converter(ucnv_open(charset, &err));
if (U_FAILURE(err))
return false;
// A single byte in a legacy encoding can be expanded to 3 bytes in UTF-8.
// A 'two-byte character' in a legacy encoding can be expanded to 4 bytes
// in UTF-8. Therefore, the expansion ratio is 3 at most. Add one for a
// trailing '\0'.
size_t output_length = text.length() * 3 + 1;
char* buf = WriteInto(output, output_length);
output_length = ucnv_toAlgorithmic(UCNV_UTF8, converter, buf, output_length,
text.data(), text.length(), &err);
ucnv_close(converter);
if (U_FAILURE(err)) {
output->clear();
return false;
}
output->resize(output_length);
return true;
}
bool ConvertToUtf8AndNormalize(const std::string& text, const char* charset,
std::string* output) {
return base::ConvertToUtf8AndNormalize(text, charset, output);
}
bool ConvertLatin1ToUtf8AndNormalize(const std::string& text,
std::string* output) {
return net::ConvertToUtf8AndNormalize(text, base::kCodepageLatin1, output);
}
bool ConvertToUTF16(const std::string& text, const char* charset,
base::string16* output) {
return base::CodepageToUTF16(text, charset,
base::OnStringConversionError::FAIL, output);
}
bool ConvertLatin1ToUTF16(const std::string& text, base::string16* output) {
return base::CodepageToUTF16(text, base::kCodepageLatin1,
base::OnStringConversionError::FAIL, output);
}
} // namespace net
......@@ -10,10 +10,10 @@
#include <Security/SecAsn1Coder.h>
#include <Security/Security.h>
#include "base/i18n/icu_string_conversions.h"
#include "base/logging.h"
#include "base/mac/mac_logging.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_string_util.h"
namespace net {
......@@ -115,8 +115,7 @@ std::string DataToString(CSSM_DATA data) {
// Converts raw CSSM_DATA in ISO-8859-1 to a std::string in UTF-8.
std::string Latin1DataToUTF8String(CSSM_DATA data) {
base::string16 utf16;
if (!CodepageToUTF16(DataToString(data), base::kCodepageLatin1,
base::OnStringConversionError::FAIL, &utf16))
if (!ConvertLatin1ToUTF16(DataToString(data), &utf16))
return "";
return base::UTF16ToUTF8(utf16);
}
......
......@@ -7,10 +7,10 @@
#include <string>
#include "base/base64.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_errors.h"
#include "net/base/net_string_util.h"
#include "net/http/http_auth.h"
#include "net/http/http_auth_challenge_tokenizer.h"
......@@ -43,8 +43,7 @@ bool ParseRealm(const HttpAuthChallengeTokenizer& tokenizer,
if (!LowerCaseEqualsASCII(parameters.name(), "realm"))
continue;
if (!base::ConvertToUtf8AndNormalize(
parameters.value(), base::kCodepageLatin1, realm))
if (!net::ConvertLatin1ToUtf8AndNormalize(parameters.value(), realm))
return false;
}
return parameters.valid();
......
......@@ -6,7 +6,6 @@
#include <string>
#include "base/i18n/icu_string_conversions.h"
#include "base/logging.h"
#include "base/md5.h"
#include "base/rand_util.h"
......@@ -14,6 +13,7 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_errors.h"
#include "net/base/net_string_util.h"
#include "net/base/net_util.h"
#include "net/http/http_auth.h"
#include "net/http/http_auth_challenge_tokenizer.h"
......@@ -227,7 +227,7 @@ bool HttpAuthHandlerDigest::ParseChallengeProperty(const std::string& name,
const std::string& value) {
if (LowerCaseEqualsASCII(name, "realm")) {
std::string realm;
if (!base::ConvertToUtf8AndNormalize(value, base::kCodepageLatin1, &realm))
if (!net::ConvertLatin1ToUtf8AndNormalize(value, &realm))
return false;
realm_ = realm;
original_realm_ = value;
......
......@@ -5,15 +5,14 @@
#include "net/http/http_content_disposition.h"
#include "base/base64.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/logging.h"
#include "base/strings/string_tokenizer.h"
#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_string_util.h"
#include "net/base/net_util.h"
#include "net/http/http_util.h"
#include "third_party/icu/source/common/unicode/ucnv.h"
namespace {
......@@ -65,32 +64,16 @@ bool DecodeBQEncoding(const std::string& part,
std::string* output) {
std::string decoded;
if (!((enc_type == B_ENCODING) ?
base::Base64Decode(part, &decoded) : DecodeQEncoding(part, &decoded)))
base::Base64Decode(part, &decoded) : DecodeQEncoding(part, &decoded))) {
return false;
}
if (decoded.empty()) {
output->clear();
return true;
}
UErrorCode err = U_ZERO_ERROR;
UConverter* converter(ucnv_open(charset.c_str(), &err));
if (U_FAILURE(err))
return false;
// A single byte in a legacy encoding can be expanded to 3 bytes in UTF-8.
// A 'two-byte character' in a legacy encoding can be expanded to 4 bytes
// in UTF-8. Therefore, the expansion ratio is 3 at most. Add one for a
// trailing '\0'.
size_t output_length = decoded.length() * 3 + 1;
char* buf = WriteInto(output, output_length);
output_length = ucnv_toAlgorithmic(UCNV_UTF8, converter, buf, output_length,
decoded.data(), decoded.length(), &err);
ucnv_close(converter);
if (U_FAILURE(err))
return false;
output->resize(output_length);
return true;
return net::ConvertToUtf8(decoded, charset.c_str(), output);
}
bool DecodeWord(const std::string& encoded_word,
......@@ -110,8 +93,7 @@ bool DecodeWord(const std::string& encoded_word,
} else {
base::string16 utf16_output;
if (!referrer_charset.empty() &&
base::CodepageToUTF16(encoded_word, referrer_charset.c_str(),
base::OnStringConversionError::FAIL,
net::ConvertToUTF16(encoded_word, referrer_charset.c_str(),
&utf16_output)) {
*output = base::UTF16ToUTF8(utf16_output);
} else {
......@@ -343,7 +325,7 @@ bool DecodeExtValue(const std::string& param_value, std::string* decoded) {
std::string unescaped = net::UnescapeURLComponent(
value, net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS);
return base::ConvertToUtf8AndNormalize(unescaped, charset, decoded);
return net::ConvertToUtf8AndNormalize(unescaped, charset.c_str(), decoded);
}
} // namespace
......
......@@ -44,6 +44,8 @@
'base/net_log_source_type_list.h',
'base/net_module.cc',
'base/net_module.h',
'base/net_string_util.h',
'base/net_string_util_icu.cc',
'base/net_util.cc',
'base/net_util.h',
'base/net_util_icu.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment