| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/browser/ui/elide_url.h" | 5 #include "chrome/browser/ui/elide_url.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_split.h" | 8 #include "base/strings/string_split.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "net/base/escape.h" | 10 #include "net/base/escape.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 base::string16 url_host; | 149 base::string16 url_host; |
| 150 base::string16 url_domain; | 150 base::string16 url_domain; |
| 151 base::string16 url_subdomain; | 151 base::string16 url_subdomain; |
| 152 SplitHost(url, &url_host, &url_domain, &url_subdomain); | 152 SplitHost(url, &url_host, &url_domain, &url_subdomain); |
| 153 | 153 |
| 154 // If this is a file type, the path is now defined as everything after ":". | 154 // If this is a file type, the path is now defined as everything after ":". |
| 155 // For example, "C:/aa/aa/bb", the path is "/aa/bb/cc". Interesting, the | 155 // For example, "C:/aa/aa/bb", the path is "/aa/bb/cc". Interesting, the |
| 156 // domain is now C: - this is a nice hack for eliding to work pleasantly. | 156 // domain is now C: - this is a nice hack for eliding to work pleasantly. |
| 157 if (url.SchemeIsFile()) { | 157 if (url.SchemeIsFile()) { |
| 158 // Split the path string using ":" | 158 // Split the path string using ":" |
| 159 std::vector<base::string16> file_path_split; | 159 const base::string16 kColon(1, ':'); |
| 160 base::SplitString(url_path, ':', &file_path_split); | 160 std::vector<base::string16> file_path_split = base::SplitString( |
| 161 url_path, kColon, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 161 if (file_path_split.size() > 1) { // File is of type "file:///C:/.." | 162 if (file_path_split.size() > 1) { // File is of type "file:///C:/.." |
| 162 url_host.clear(); | 163 url_host.clear(); |
| 163 url_domain.clear(); | 164 url_domain.clear(); |
| 164 url_subdomain.clear(); | 165 url_subdomain.clear(); |
| 165 | 166 |
| 166 const base::string16 kColon = UTF8ToUTF16(":"); | |
| 167 url_host = url_domain = file_path_split.at(0).substr(1) + kColon; | 167 url_host = url_domain = file_path_split.at(0).substr(1) + kColon; |
| 168 url_path_query_etc = url_path = file_path_split.at(1); | 168 url_path_query_etc = url_path = file_path_split.at(1); |
| 169 } | 169 } |
| 170 } | 170 } |
| 171 | 171 |
| 172 // Second Pass - remove scheme - the rest fits. | 172 // Second Pass - remove scheme - the rest fits. |
| 173 const float pixel_width_url_host = GetStringWidthF(url_host, font_list); | 173 const float pixel_width_url_host = GetStringWidthF(url_host, font_list); |
| 174 const float pixel_width_url_path = GetStringWidthF(url_path_query_etc, | 174 const float pixel_width_url_path = GetStringWidthF(url_path_query_etc, |
| 175 font_list); | 175 font_list); |
| 176 if (available_pixel_width >= | 176 if (available_pixel_width >= |
| (...skipping 17 matching lines...) Expand all Loading... |
| 194 url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin); | 194 url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin); |
| 195 if (available_pixel_width >= | 195 if (available_pixel_width >= |
| 196 (pixel_width_url_subdomain + pixel_width_url_domain + | 196 (pixel_width_url_subdomain + pixel_width_url_domain + |
| 197 pixel_width_url_path - GetStringWidthF(url_query, font_list))) { | 197 pixel_width_url_path - GetStringWidthF(url_query, font_list))) { |
| 198 return ElideText(url_subdomain + url_domain + url_path_query_etc, | 198 return ElideText(url_subdomain + url_domain + url_path_query_etc, |
| 199 font_list, available_pixel_width, gfx::ELIDE_TAIL); | 199 font_list, available_pixel_width, gfx::ELIDE_TAIL); |
| 200 } | 200 } |
| 201 } | 201 } |
| 202 | 202 |
| 203 // Parse url_path using '/'. | 203 // Parse url_path using '/'. |
| 204 std::vector<base::string16> url_path_elements; | 204 std::vector<base::string16> url_path_elements = base::SplitString( |
| 205 base::SplitString(url_path, kForwardSlash, &url_path_elements); | 205 url_path, base::string16(1, kForwardSlash), |
| 206 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 206 | 207 |
| 207 // Get filename - note that for a path ending with / | 208 // Get filename - note that for a path ending with / |
| 208 // such as www.google.com/intl/ads/, the file name is ads/. | 209 // such as www.google.com/intl/ads/, the file name is ads/. |
| 209 base::string16 url_filename( | 210 base::string16 url_filename( |
| 210 url_path_elements.empty() ? base::string16() : url_path_elements.back()); | 211 url_path_elements.empty() ? base::string16() : url_path_elements.back()); |
| 211 size_t url_path_number_of_elements = url_path_elements.size(); | 212 size_t url_path_number_of_elements = url_path_elements.size(); |
| 212 if (url_filename.empty() && (url_path_number_of_elements > 1)) { | 213 if (url_filename.empty() && (url_path_number_of_elements > 1)) { |
| 213 // Path ends with a '/'. | 214 // Path ends with a '/'. |
| 214 --url_path_number_of_elements; | 215 --url_path_number_of_elements; |
| 215 url_filename = url_path_elements[url_path_number_of_elements - 1] + | 216 url_filename = url_path_elements[url_path_number_of_elements - 1] + |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 result += base::UTF8ToUTF16(host); | 338 result += base::UTF8ToUTF16(host); |
| 338 | 339 |
| 339 const int port = origin.IntPort(); | 340 const int port = origin.IntPort(); |
| 340 const int default_port = url::DefaultPortForScheme(origin.scheme().c_str(), | 341 const int default_port = url::DefaultPortForScheme(origin.scheme().c_str(), |
| 341 origin.scheme().length()); | 342 origin.scheme().length()); |
| 342 if (port != url::PORT_UNSPECIFIED && port != default_port) | 343 if (port != url::PORT_UNSPECIFIED && port != default_port) |
| 343 result += colon + base::UTF8ToUTF16(origin.port()); | 344 result += colon + base::UTF8ToUTF16(origin.port()); |
| 344 | 345 |
| 345 return result; | 346 return result; |
| 346 } | 347 } |
| OLD | NEW |