OLD | NEW |
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 "chrome/common/net/url_fixer_upper.h" | 5 #include "chrome/common/net/url_fixer_upper.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #if defined(OS_POSIX) | 9 #if defined(OS_POSIX) |
10 #include "base/environment.h" | 10 #include "base/environment.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 parts->port = | 67 parts->port = |
68 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.port); | 68 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.port); |
69 parts->path = | 69 parts->path = |
70 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.path); | 70 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.path); |
71 parts->query = | 71 parts->query = |
72 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.query); | 72 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.query); |
73 parts->ref = | 73 parts->ref = |
74 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.ref); | 74 UTF8ComponentToUTF16Component(text_utf8, parts_utf8.ref); |
75 } | 75 } |
76 | 76 |
77 TrimPositions TrimWhitespaceUTF8(const std::string& input, | 77 base::TrimPositions TrimWhitespaceUTF8(const std::string& input, |
78 TrimPositions positions, | 78 base::TrimPositions positions, |
79 std::string* output) { | 79 std::string* output) { |
80 // This implementation is not so fast since it converts the text encoding | 80 // This implementation is not so fast since it converts the text encoding |
81 // twice. Please feel free to file a bug if this function hurts the | 81 // twice. Please feel free to file a bug if this function hurts the |
82 // performance of Chrome. | 82 // performance of Chrome. |
83 DCHECK(IsStringUTF8(input)); | 83 DCHECK(IsStringUTF8(input)); |
84 base::string16 input16 = base::UTF8ToUTF16(input); | 84 base::string16 input16 = base::UTF8ToUTF16(input); |
85 base::string16 output16; | 85 base::string16 output16; |
86 TrimPositions result = TrimWhitespace(input16, positions, &output16); | 86 base::TrimPositions result = |
| 87 base::TrimWhitespace(input16, positions, &output16); |
87 *output = base::UTF16ToUTF8(output16); | 88 *output = base::UTF16ToUTF8(output16); |
88 return result; | 89 return result; |
89 } | 90 } |
90 | 91 |
91 // does some basic fixes for input that we want to test for file-ness | 92 // does some basic fixes for input that we want to test for file-ness |
92 void PrepareStringForFileOps(const base::FilePath& text, | 93 void PrepareStringForFileOps(const base::FilePath& text, |
93 base::FilePath::StringType* output) { | 94 base::FilePath::StringType* output) { |
94 #if defined(OS_WIN) | 95 #if defined(OS_WIN) |
95 TrimWhitespace(text.value(), TRIM_ALL, output); | 96 base::TrimWhitespace(text.value(), base::TRIM_ALL, output); |
96 replace(output->begin(), output->end(), '/', '\\'); | 97 replace(output->begin(), output->end(), '/', '\\'); |
97 #else | 98 #else |
98 TrimWhitespaceUTF8(text.value(), TRIM_ALL, output); | 99 TrimWhitespaceUTF8(text.value(), base::TRIM_ALL, output); |
99 #endif | 100 #endif |
100 } | 101 } |
101 | 102 |
102 // Tries to create a full path from |text|. If the result is valid and the | 103 // Tries to create a full path from |text|. If the result is valid and the |
103 // file exists, returns true and sets |full_path| to the result. Otherwise, | 104 // file exists, returns true and sets |full_path| to the result. Otherwise, |
104 // returns false and leaves |full_path| unchanged. | 105 // returns false and leaves |full_path| unchanged. |
105 bool ValidPathForFile(const base::FilePath::StringType& text, | 106 bool ValidPathForFile(const base::FilePath::StringType& text, |
106 base::FilePath* full_path) { | 107 base::FilePath* full_path) { |
107 base::FilePath file_path = base::MakeAbsoluteFilePath(base::FilePath(text)); | 108 base::FilePath file_path = base::MakeAbsoluteFilePath(base::FilePath(text)); |
108 if (file_path.empty()) | 109 if (file_path.empty()) |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 } | 383 } |
383 | 384 |
384 // Performs the work for URLFixerUpper::SegmentURL. |text| may be modified on | 385 // Performs the work for URLFixerUpper::SegmentURL. |text| may be modified on |
385 // output on success: a semicolon following a valid scheme is replaced with a | 386 // output on success: a semicolon following a valid scheme is replaced with a |
386 // colon. | 387 // colon. |
387 std::string SegmentURLInternal(std::string* text, url_parse::Parsed* parts) { | 388 std::string SegmentURLInternal(std::string* text, url_parse::Parsed* parts) { |
388 // Initialize the result. | 389 // Initialize the result. |
389 *parts = url_parse::Parsed(); | 390 *parts = url_parse::Parsed(); |
390 | 391 |
391 std::string trimmed; | 392 std::string trimmed; |
392 TrimWhitespaceUTF8(*text, TRIM_ALL, &trimmed); | 393 TrimWhitespaceUTF8(*text, base::TRIM_ALL, &trimmed); |
393 if (trimmed.empty()) | 394 if (trimmed.empty()) |
394 return std::string(); // Nothing to segment. | 395 return std::string(); // Nothing to segment. |
395 | 396 |
396 #if defined(OS_WIN) | 397 #if defined(OS_WIN) |
397 int trimmed_length = static_cast<int>(trimmed.length()); | 398 int trimmed_length = static_cast<int>(trimmed.length()); |
398 if (url_parse::DoesBeginWindowsDriveSpec(trimmed.data(), 0, trimmed_length) || | 399 if (url_parse::DoesBeginWindowsDriveSpec(trimmed.data(), 0, trimmed_length) || |
399 url_parse::DoesBeginUNCPath(trimmed.data(), 0, trimmed_length, true)) | 400 url_parse::DoesBeginUNCPath(trimmed.data(), 0, trimmed_length, true)) |
400 return "file"; | 401 return "file"; |
401 #elif defined(OS_POSIX) | 402 #elif defined(OS_POSIX) |
402 if (base::FilePath::IsSeparator(trimmed.data()[0]) || | 403 if (base::FilePath::IsSeparator(trimmed.data()[0]) || |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 std::string text_utf8 = base::UTF16ToUTF8(text); | 495 std::string text_utf8 = base::UTF16ToUTF8(text); |
495 url_parse::Parsed parts_utf8; | 496 url_parse::Parsed parts_utf8; |
496 std::string scheme_utf8 = SegmentURL(text_utf8, &parts_utf8); | 497 std::string scheme_utf8 = SegmentURL(text_utf8, &parts_utf8); |
497 UTF8PartsToUTF16Parts(text_utf8, parts_utf8, parts); | 498 UTF8PartsToUTF16Parts(text_utf8, parts_utf8, parts); |
498 return base::UTF8ToUTF16(scheme_utf8); | 499 return base::UTF8ToUTF16(scheme_utf8); |
499 } | 500 } |
500 | 501 |
501 GURL URLFixerUpper::FixupURL(const std::string& text, | 502 GURL URLFixerUpper::FixupURL(const std::string& text, |
502 const std::string& desired_tld) { | 503 const std::string& desired_tld) { |
503 std::string trimmed; | 504 std::string trimmed; |
504 TrimWhitespaceUTF8(text, TRIM_ALL, &trimmed); | 505 TrimWhitespaceUTF8(text, base::TRIM_ALL, &trimmed); |
505 if (trimmed.empty()) | 506 if (trimmed.empty()) |
506 return GURL(); // Nothing here. | 507 return GURL(); // Nothing here. |
507 | 508 |
508 // Segment the URL. | 509 // Segment the URL. |
509 url_parse::Parsed parts; | 510 url_parse::Parsed parts; |
510 std::string scheme(SegmentURLInternal(&trimmed, &parts)); | 511 std::string scheme(SegmentURLInternal(&trimmed, &parts)); |
511 | 512 |
512 // For view-source: URLs, we strip "view-source:", do fixup, and stick it back | 513 // For view-source: URLs, we strip "view-source:", do fixup, and stick it back |
513 // on. This allows us to handle things like "view-source:google.com". | 514 // on. This allows us to handle things like "view-source:google.com". |
514 if (scheme == content::kViewSourceScheme) { | 515 if (scheme == content::kViewSourceScheme) { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 | 644 |
644 if (part->is_valid()) { | 645 if (part->is_valid()) { |
645 // Offset the location of this component. | 646 // Offset the location of this component. |
646 part->begin += offset; | 647 part->begin += offset; |
647 | 648 |
648 // This part might not have existed in the original text. | 649 // This part might not have existed in the original text. |
649 if (part->begin < 0) | 650 if (part->begin < 0) |
650 part->reset(); | 651 part->reset(); |
651 } | 652 } |
652 } | 653 } |
OLD | NEW |