| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/net_util.h" | 5 #include "net/base/net_util.h" |
| 6 | 6 |
| 7 #include <unicode/regex.h> | 7 #include <unicode/regex.h> |
| 8 #include <unicode/ucnv.h> | 8 #include <unicode/ucnv.h> |
| 9 #include <unicode/uidna.h> | 9 #include <unicode/uidna.h> |
| 10 #include <unicode/ulocdata.h> | 10 #include <unicode/ulocdata.h> |
| (...skipping 1230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 } | 1241 } |
| 1242 | 1242 |
| 1243 string16 StripWWW(const string16& text) { | 1243 string16 StripWWW(const string16& text) { |
| 1244 const string16 www(ASCIIToUTF16("www.")); | 1244 const string16 www(ASCIIToUTF16("www.")); |
| 1245 return StartsWith(text, www, true) ? text.substr(www.length()) : text; | 1245 return StartsWith(text, www, true) ? text.substr(www.length()) : text; |
| 1246 } | 1246 } |
| 1247 | 1247 |
| 1248 string16 GetSuggestedFilename(const GURL& url, | 1248 string16 GetSuggestedFilename(const GURL& url, |
| 1249 const std::string& content_disposition, | 1249 const std::string& content_disposition, |
| 1250 const std::string& referrer_charset, | 1250 const std::string& referrer_charset, |
| 1251 const std::string& suggested_name, |
| 1251 const string16& default_name) { | 1252 const string16& default_name) { |
| 1252 // TODO: this function to be updated to match the httpbis recommendations. | 1253 // TODO: this function to be updated to match the httpbis recommendations. |
| 1253 // Talk to abarth for the latest news. | 1254 // Talk to abarth for the latest news. |
| 1254 | 1255 |
| 1255 // We don't translate this fallback string, "download". If localization is | 1256 // We don't translate this fallback string, "download". If localization is |
| 1256 // needed, the caller should provide localized fallback default_name. | 1257 // needed, the caller should provide localized fallback default_name. |
| 1257 static const char* kFinalFallbackName = "download"; | 1258 static const char* kFinalFallbackName = "download"; |
| 1258 | 1259 |
| 1259 // about: and data: URLs don't have file names, but esp. data: URLs may | 1260 std::string filename; |
| 1260 // contain parts that look like ones (i.e., contain a slash). | |
| 1261 // Therefore we don't attempt to divine a file name out of them. | |
| 1262 if (url.SchemeIs("about") || url.SchemeIs("data")) { | |
| 1263 return default_name.empty() ? ASCIIToUTF16(kFinalFallbackName) | |
| 1264 : default_name; | |
| 1265 } | |
| 1266 | 1261 |
| 1267 std::string filename = GetFileNameFromCD(content_disposition, | 1262 // Try to extract from content-disposition first. |
| 1268 referrer_charset); | 1263 if (!content_disposition.empty()) |
| 1264 filename = GetFileNameFromCD(content_disposition, referrer_charset); |
| 1265 |
| 1266 // Then try to use suggested name. |
| 1267 if (filename.empty() && !suggested_name.empty()) |
| 1268 filename = suggested_name; |
| 1269 | 1269 |
| 1270 if (!filename.empty()) { | 1270 if (!filename.empty()) { |
| 1271 // Replace any path information the server may have sent, by changing | 1271 // Replace any path information the server may have sent, by changing |
| 1272 // path separators with underscores. | 1272 // path separators with underscores. |
| 1273 ReplaceSubstringsAfterOffset(&filename, 0, "/", "_"); | 1273 ReplaceSubstringsAfterOffset(&filename, 0, "/", "_"); |
| 1274 ReplaceSubstringsAfterOffset(&filename, 0, "\\", "_"); | 1274 ReplaceSubstringsAfterOffset(&filename, 0, "\\", "_"); |
| 1275 | 1275 |
| 1276 // Next, remove "." from the beginning and end of the file name to avoid | 1276 // Next, remove "." from the beginning and end of the file name to avoid |
| 1277 // tricks with hidden files, "..", and "." | 1277 // tricks with hidden files, "..", and "." |
| 1278 TrimString(filename, ".", &filename); | 1278 TrimString(filename, ".", &filename); |
| 1279 } | 1279 } |
| 1280 |
| 1280 if (filename.empty()) { | 1281 if (filename.empty()) { |
| 1282 // about: and data: URLs don't have file names, but esp. data: URLs may |
| 1283 // contain parts that look like ones (i.e., contain a slash). |
| 1284 // Therefore we don't attempt to divine a file name out of them. |
| 1285 if (url.SchemeIs("about") || url.SchemeIs("data")) { |
| 1286 return default_name.empty() ? ASCIIToUTF16(kFinalFallbackName) |
| 1287 : default_name; |
| 1288 } |
| 1289 |
| 1281 if (url.is_valid()) { | 1290 if (url.is_valid()) { |
| 1282 const std::string unescaped_url_filename = UnescapeURLComponent( | 1291 const std::string unescaped_url_filename = UnescapeURLComponent( |
| 1283 url.ExtractFileName(), | 1292 url.ExtractFileName(), |
| 1284 UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS); | 1293 UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS); |
| 1285 | 1294 |
| 1286 // The URL's path should be escaped UTF-8, but may not be. | 1295 // The URL's path should be escaped UTF-8, but may not be. |
| 1287 std::string decoded_filename = unescaped_url_filename; | 1296 std::string decoded_filename = unescaped_url_filename; |
| 1288 if (!IsStringASCII(decoded_filename)) { | 1297 if (!IsStringASCII(decoded_filename)) { |
| 1289 bool ignore; | 1298 bool ignore; |
| 1290 // TODO(jshin): this is probably not robust enough. To be sure, we | 1299 // TODO(jshin): this is probably not robust enough. To be sure, we |
| (...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2229 | 2238 |
| 2230 NetworkInterface::NetworkInterface(const std::string& name, | 2239 NetworkInterface::NetworkInterface(const std::string& name, |
| 2231 const IPAddressNumber& address) | 2240 const IPAddressNumber& address) |
| 2232 : name(name), address(address) { | 2241 : name(name), address(address) { |
| 2233 } | 2242 } |
| 2234 | 2243 |
| 2235 NetworkInterface::~NetworkInterface() { | 2244 NetworkInterface::~NetworkInterface() { |
| 2236 } | 2245 } |
| 2237 | 2246 |
| 2238 } // namespace net | 2247 } // namespace net |
| OLD | NEW |