Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: net/base/mime_util.cc

Issue 1215933004: New new versions of Starts/EndsWith and SplitString in net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@starts_with
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <algorithm> 5 #include <algorithm>
6 #include <iterator> 6 #include <iterator>
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 return MatchesMimeTypeParameters(mime_type_pattern, mime_type); 273 return MatchesMimeTypeParameters(mime_type_pattern, mime_type);
274 } else { 274 } else {
275 return false; 275 return false;
276 } 276 }
277 } 277 }
278 278
279 // Test length to prevent overlap between |left| and |right|. 279 // Test length to prevent overlap between |left| and |right|.
280 if (base_type.length() < base_pattern.length() - 1) 280 if (base_type.length() < base_pattern.length() - 1)
281 return false; 281 return false;
282 282
283 const std::string left(base_pattern.substr(0, star)); 283 base::StringPiece base_pattern_piece(base_pattern);
284 const std::string right(base_pattern.substr(star + 1)); 284 base::StringPiece left(base_pattern_piece.substr(0, star));
285 base::StringPiece right(base_pattern_piece.substr(star + 1));
285 286
286 if (!base::StartsWithASCII(base_type, left, false)) 287 if (!base::StartsWith(base_type, left, base::CompareCase::INSENSITIVE_ASCII))
287 return false; 288 return false;
288 289
289 if (!right.empty() && !base::EndsWith(base_type, right, false)) 290 if (!right.empty() &&
291 !base::EndsWith(base_type, right, base::CompareCase::INSENSITIVE_ASCII))
290 return false; 292 return false;
291 293
292 return MatchesMimeTypeParameters(mime_type_pattern, mime_type); 294 return MatchesMimeTypeParameters(mime_type_pattern, mime_type);
293 } 295 }
294 296
295 // See http://www.iana.org/assignments/media-types/media-types.xhtml 297 // See http://www.iana.org/assignments/media-types/media-types.xhtml
296 static const char* const legal_top_level_types[] = { 298 static const char* const legal_top_level_types[] = {
297 "application", 299 "application",
298 "audio", 300 "audio",
299 "example", 301 "example",
300 "image", 302 "image",
301 "message", 303 "message",
302 "model", 304 "model",
303 "multipart", 305 "multipart",
304 "text", 306 "text",
305 "video", 307 "video",
306 }; 308 };
307 309
308 bool MimeUtil::ParseMimeTypeWithoutParameter( 310 bool MimeUtil::ParseMimeTypeWithoutParameter(
309 const std::string& type_string, 311 const std::string& type_string,
310 std::string* top_level_type, 312 std::string* top_level_type,
311 std::string* subtype) const { 313 std::string* subtype) const {
312 std::vector<std::string> components; 314 std::vector<std::string> components = base::SplitString(
313 base::SplitString(type_string, '/', &components); 315 type_string, "/", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
314 if (components.size() != 2 || 316 if (components.size() != 2 ||
315 !HttpUtil::IsToken(components[0]) || 317 !HttpUtil::IsToken(components[0]) ||
316 !HttpUtil::IsToken(components[1])) 318 !HttpUtil::IsToken(components[1]))
317 return false; 319 return false;
318 320
319 if (top_level_type) 321 if (top_level_type)
320 *top_level_type = components[0]; 322 *top_level_type = components[0];
321 if (subtype) 323 if (subtype)
322 *subtype = components[1]; 324 *subtype = components[1];
323 return true; 325 return true;
324 } 326 }
325 327
326 bool MimeUtil::IsValidTopLevelMimeType(const std::string& type_string) const { 328 bool MimeUtil::IsValidTopLevelMimeType(const std::string& type_string) const {
327 std::string lower_type = base::StringToLowerASCII(type_string); 329 std::string lower_type = base::StringToLowerASCII(type_string);
328 for (size_t i = 0; i < arraysize(legal_top_level_types); ++i) { 330 for (size_t i = 0; i < arraysize(legal_top_level_types); ++i) {
329 if (lower_type.compare(legal_top_level_types[i]) == 0) 331 if (lower_type.compare(legal_top_level_types[i]) == 0)
330 return true; 332 return true;
331 } 333 }
332 334
333 return type_string.size() > 2 && 335 return type_string.size() > 2 &&
334 base::StartsWithASCII(type_string, "x-", false); 336 base::StartsWith(type_string, "x-",
337 base::CompareCase::INSENSITIVE_ASCII);
335 } 338 }
336 339
337 //---------------------------------------------------------------------------- 340 //----------------------------------------------------------------------------
338 // Wrappers for the singleton 341 // Wrappers for the singleton
339 //---------------------------------------------------------------------------- 342 //----------------------------------------------------------------------------
340 343
341 bool GetMimeTypeFromExtension(const base::FilePath::StringType& ext, 344 bool GetMimeTypeFromExtension(const base::FilePath::StringType& ext,
342 std::string* mime_type) { 345 std::string* mime_type) {
343 return g_mime_util.Get().GetMimeTypeFromExtension(ext, mime_type); 346 return g_mime_util.Get().GetMimeTypeFromExtension(ext, mime_type);
344 } 347 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 { "video/", kStandardVideoTypes, arraysize(kStandardVideoTypes) }, 454 { "video/", kStandardVideoTypes, arraysize(kStandardVideoTypes) },
452 { NULL, NULL, 0 } 455 { NULL, NULL, 0 }
453 }; 456 };
454 457
455 void GetExtensionsFromHardCodedMappings( 458 void GetExtensionsFromHardCodedMappings(
456 const MimeInfo* mappings, 459 const MimeInfo* mappings,
457 size_t mappings_len, 460 size_t mappings_len,
458 const std::string& leading_mime_type, 461 const std::string& leading_mime_type,
459 base::hash_set<base::FilePath::StringType>* extensions) { 462 base::hash_set<base::FilePath::StringType>* extensions) {
460 for (size_t i = 0; i < mappings_len; ++i) { 463 for (size_t i = 0; i < mappings_len; ++i) {
461 if (base::StartsWithASCII(mappings[i].mime_type, leading_mime_type, 464 if (base::StartsWith(mappings[i].mime_type, leading_mime_type,
462 false)) { 465 base::CompareCase::INSENSITIVE_ASCII)) {
463 std::vector<string> this_extensions; 466 for (const base::StringPiece& this_extension : base::SplitStringPiece(
464 base::SplitString(mappings[i].extensions, ',', &this_extensions); 467 mappings[i].extensions, ",", base::TRIM_WHITESPACE,
465 for (size_t j = 0; j < this_extensions.size(); ++j) { 468 base::SPLIT_WANT_ALL)) {
466 #if defined(OS_WIN) 469 #if defined(OS_WIN)
467 base::FilePath::StringType extension( 470 extensions->insert(base::UTF8ToWide(this_extension));
468 base::UTF8ToWide(this_extensions[j]));
469 #else 471 #else
470 base::FilePath::StringType extension(this_extensions[j]); 472 extensions->insert(this_extension.as_string());
471 #endif 473 #endif
Ryan Sleevi 2015/07/06 08:52:01 OBSERVATION: Functionally, this behaviour if equiv
brettw 2015/07/06 16:52:34 I'm not calling any implicit constructors, I'm sup
472 extensions->insert(extension);
473 } 474 }
474 } 475 }
475 } 476 }
476 } 477 }
477 478
478 void GetExtensionsHelper( 479 void GetExtensionsHelper(
479 const char* const* standard_types, 480 const char* const* standard_types,
480 size_t standard_types_len, 481 size_t standard_types_len,
481 const std::string& leading_mime_type, 482 const std::string& leading_mime_type,
482 base::hash_set<base::FilePath::StringType>* extensions) { 483 base::hash_set<base::FilePath::StringType>* extensions) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 post_data->append("\r\n" + value + "\r\n"); 578 post_data->append("\r\n" + value + "\r\n");
578 } 579 }
579 580
580 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, 581 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary,
581 std::string* post_data) { 582 std::string* post_data) {
582 DCHECK(post_data); 583 DCHECK(post_data);
583 post_data->append("--" + mime_boundary + "--\r\n"); 584 post_data->append("--" + mime_boundary + "--\r\n");
584 } 585 }
585 586
586 } // namespace net 587 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698