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

Side by Side Diff: url/url_parse.cc

Issue 19857005: Do not show translate bar for MHTML files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add and use GURL::ExtractFileExtension() Created 7 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 /* Based on nsURLParsers.cc from Mozilla 1 /* Based on nsURLParsers.cc from Mozilla
2 * ------------------------------------- 2 * -------------------------------------
3 * The contents of this file are subject to the Mozilla Public License Version 3 * The contents of this file are subject to the Mozilla Public License Version
4 * 1.1 (the "License"); you may not use this file except in compliance with 4 * 1.1 (the "License"); you may not use this file except in compliance with
5 * the License. You may obtain a copy of the License at 5 * the License. You may obtain a copy of the License at
6 * http://www.mozilla.org/MPL/ 6 * http://www.mozilla.org/MPL/
7 * 7 *
8 * Software distributed under the License is distributed on an "AS IS" basis, 8 * Software distributed under the License is distributed on an "AS IS" basis,
9 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 9 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10 * for the specific language governing rights and limitations under the 10 * for the specific language governing rights and limitations under the
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 } 638 }
639 } 639 }
640 640
641 // No slash found, this means the input was degenerate (generally paths 641 // No slash found, this means the input was degenerate (generally paths
642 // will start with a slash). Let's call everything the file name. 642 // will start with a slash). Let's call everything the file name.
643 *file_name = MakeRange(path.begin, file_end); 643 *file_name = MakeRange(path.begin, file_end);
644 return; 644 return;
645 } 645 }
646 646
647 template<typename CHAR> 647 template<typename CHAR>
648 void DoExtractFileExtension(const CHAR* spec,
649 const Component& path,
650 Component* file_extension) {
651
652 Component file_name;
653 DoExtractFileName(spec, path, &file_name);
654
655 // If there's no file specified in the path, there's no file extension
656 if (!file_name.is_valid()) {
657 file_extension->reset();
658 return;
659 }
660
661 // Search backwards for file delimiter '.'
662 // We don't check the first character, because if the file name starts with
663 // a '.' the rest of the file name is not typically considered a file
664 // extension.
665 int file_delimiter = -1;
666 for (int i = file_name.end() - 1; i > file_name.begin; i--) {
667 if (spec[i] == '.') {
668 file_delimiter = i;
669 break;
670 }
671 }
672
673 // If we didn't find a file delimiter, there is no file extension
674 if (file_delimiter == -1) {
675 file_extension->reset();
676 return;
677 }
678
679 // Return everything in the filename following the delimiter
680 *file_extension = MakeRange(file_delimiter+1, file_name.end());
681 return;
682
683 }
684
685 template<typename CHAR>
648 bool DoExtractQueryKeyValue(const CHAR* spec, 686 bool DoExtractQueryKeyValue(const CHAR* spec,
649 Component* query, 687 Component* query,
650 Component* key, 688 Component* key,
651 Component* value) { 689 Component* value) {
652 if (!query->is_nonempty()) 690 if (!query->is_nonempty())
653 return false; 691 return false;
654 692
655 int start = query->begin; 693 int start = query->begin;
656 int cur = start; 694 int cur = start;
657 int end = query->end(); 695 int end = query->end();
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 Component* file_name) { 849 Component* file_name) {
812 DoExtractFileName(url, path, file_name); 850 DoExtractFileName(url, path, file_name);
813 } 851 }
814 852
815 void ExtractFileName(const base::char16* url, 853 void ExtractFileName(const base::char16* url,
816 const Component& path, 854 const Component& path,
817 Component* file_name) { 855 Component* file_name) {
818 DoExtractFileName(url, path, file_name); 856 DoExtractFileName(url, path, file_name);
819 } 857 }
820 858
859 void ExtractFileExtension(const char* url,
860 const Component& path,
861 Component* file_extension) {
862 DoExtractFileExtension(url, path, file_extension);
863 }
864
865 void ExtractFileExtension(const base::char16* url,
866 const Component& path,
867 Component* file_extension) {
868 DoExtractFileExtension(url, path, file_extension);
869 }
870
821 bool ExtractQueryKeyValue(const char* url, 871 bool ExtractQueryKeyValue(const char* url,
822 Component* query, 872 Component* query,
823 Component* key, 873 Component* key,
824 Component* value) { 874 Component* value) {
825 return DoExtractQueryKeyValue(url, query, key, value); 875 return DoExtractQueryKeyValue(url, query, key, value);
826 } 876 }
827 877
828 bool ExtractQueryKeyValue(const base::char16* url, 878 bool ExtractQueryKeyValue(const base::char16* url,
829 Component* query, 879 Component* query,
830 Component* key, 880 Component* key,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 } 964 }
915 965
916 void ParseAfterScheme(const base::char16* spec, 966 void ParseAfterScheme(const base::char16* spec,
917 int spec_len, 967 int spec_len,
918 int after_scheme, 968 int after_scheme,
919 Parsed* parsed) { 969 Parsed* parsed) {
920 DoParseAfterScheme(spec, spec_len, after_scheme, parsed); 970 DoParseAfterScheme(spec, spec_len, after_scheme, parsed);
921 } 971 }
922 972
923 } // namespace url_parse 973 } // namespace url_parse
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698