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

Side by Side Diff: components/url_formatter/url_fixer.cc

Issue 2378213002: Mark URLs with empty schemes as invalid. (Closed)
Patch Set: . Created 4 years, 2 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 "components/url_formatter/url_fixer.h" 5 #include "components/url_formatter/url_fixer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 473
474 // We need to add a scheme in order for ParseStandardURL to be happy. 474 // We need to add a scheme in order for ParseStandardURL to be happy.
475 // Find the first non-whitespace character. 475 // Find the first non-whitespace character.
476 std::string::iterator first_nonwhite = text->begin(); 476 std::string::iterator first_nonwhite = text->begin();
477 while ((first_nonwhite != text->end()) && 477 while ((first_nonwhite != text->end()) &&
478 base::IsUnicodeWhitespace(*first_nonwhite)) 478 base::IsUnicodeWhitespace(*first_nonwhite))
479 ++first_nonwhite; 479 ++first_nonwhite;
480 480
481 // Construct the text to parse by inserting the scheme. 481 // Construct the text to parse by inserting the scheme.
482 std::string inserted_text(scheme); 482 std::string inserted_text(scheme);
483 inserted_text.append(url::kStandardSchemeSeparator); 483 if (first_nonwhite == text->end() || *first_nonwhite != ':')
484 inserted_text.append(url::kStandardSchemeSeparator); // Add "://".
Peter Kasting 2016/10/05 00:56:30 Nit: After your explanation, I understand why this
brettw 2016/10/05 05:10:12 I did the second.
484 std::string text_to_parse(text->begin(), first_nonwhite); 485 std::string text_to_parse(text->begin(), first_nonwhite);
485 text_to_parse.append(inserted_text); 486 text_to_parse.append(inserted_text);
486 text_to_parse.append(first_nonwhite, text->end()); 487 text_to_parse.append(first_nonwhite, text->end());
487 488
488 // Have the GURL parser do the heavy lifting for us. 489 // Have the GURL parser do the heavy lifting for us.
489 url::ParseStandardURL(text_to_parse.data(), 490 url::ParseStandardURL(text_to_parse.data(),
490 static_cast<int>(text_to_parse.length()), parts); 491 static_cast<int>(text_to_parse.length()), parts);
491 492
492 // Offset the results of the parse to match the original text. 493 // Offset the results of the parse to match the original text.
493 const int offset = -static_cast<int>(inserted_text.length()); 494 const int offset = -static_cast<int>(inserted_text.length());
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 } 676 }
676 677
677 bool IsEquivalentScheme(const std::string& scheme1, 678 bool IsEquivalentScheme(const std::string& scheme1,
678 const std::string& scheme2) { 679 const std::string& scheme2) {
679 return scheme1 == scheme2 || 680 return scheme1 == scheme2 ||
680 (scheme1 == url::kAboutScheme && scheme2 == kChromeUIScheme) || 681 (scheme1 == url::kAboutScheme && scheme2 == kChromeUIScheme) ||
681 (scheme1 == kChromeUIScheme && scheme2 == url::kAboutScheme); 682 (scheme1 == kChromeUIScheme && scheme2 == url::kAboutScheme);
682 } 683 }
683 684
684 } // namespace url_formatter 685 } // namespace url_formatter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698