| Index: app/gfx/text_elider.cc
|
| ===================================================================
|
| --- app/gfx/text_elider.cc (revision 16437)
|
| +++ app/gfx/text_elider.cc (working copy)
|
| @@ -16,23 +16,6 @@
|
|
|
| namespace gfx {
|
|
|
| -// Appends the given part of the original URL to the output string formatted for
|
| -// the user. The given parsed structure will be updated. The host name formatter
|
| -// also takes the same accept languages component as ElideURL. |new_parsed| may
|
| -// be null.
|
| -static void AppendFormattedHost(const GURL& url,
|
| - const std::wstring& languages,
|
| - std::wstring* output,
|
| - url_parse::Parsed* new_parsed);
|
| -
|
| -// Calls the unescaper for the substring |in_component| inside of the URL
|
| -// |spec|. The decoded string will be appended to |output| and the resulting
|
| -// range will be filled into |out_component|.
|
| -static void AppendFormattedComponent(const std::string& spec,
|
| - const url_parse::Component& in_component,
|
| - std::wstring* output,
|
| - url_parse::Component* out_component);
|
| -
|
| // This function takes a GURL object and elides it. It returns a string
|
| // which composed of parts from subdomain, domain, path, filename and query.
|
| // A "..." is added automatically at the end if the elided string is bigger
|
| @@ -49,8 +32,8 @@
|
| const std::wstring& languages) {
|
| // Get a formatted string and corresponding parsing of the url.
|
| url_parse::Parsed parsed;
|
| - std::wstring url_string = GetCleanStringFromUrl(url, languages, &parsed,
|
| - NULL);
|
| + std::wstring url_string =
|
| + net::FormatUrl(url, languages, true, true, &parsed, NULL);
|
| if (available_pixel_width <= 0)
|
| return url_string;
|
|
|
| @@ -338,124 +321,15 @@
|
| return text.substr(0, lo) + kEllipsis;
|
| }
|
|
|
| -void AppendFormattedHost(const GURL& url,
|
| - const std::wstring& languages,
|
| - std::wstring* output,
|
| - url_parse::Parsed* new_parsed) {
|
| - const url_parse::Component& host =
|
| - url.parsed_for_possibly_invalid_spec().host;
|
| -
|
| - if (host.is_nonempty()) {
|
| - // Handle possible IDN in the host name.
|
| - if (new_parsed)
|
| - new_parsed->host.begin = static_cast<int>(output->length());
|
| -
|
| - const std::string& spec = url.possibly_invalid_spec();
|
| - DCHECK(host.begin >= 0 &&
|
| - ((spec.length() == 0 && host.begin == 0) ||
|
| - host.begin < static_cast<int>(spec.length())));
|
| - net::IDNToUnicode(&spec[host.begin], host.len, languages, output);
|
| -
|
| - if (new_parsed) {
|
| - new_parsed->host.len =
|
| - static_cast<int>(output->length()) - new_parsed->host.begin;
|
| - }
|
| - } else if (new_parsed) {
|
| - new_parsed->host.reset();
|
| - }
|
| -}
|
| -
|
| -void AppendFormattedComponent(const std::string& spec,
|
| - const url_parse::Component& in_component,
|
| - std::wstring* output,
|
| - url_parse::Component* out_component) {
|
| - if (in_component.is_nonempty()) {
|
| - out_component->begin = static_cast<int>(output->length());
|
| -
|
| - output->append(UnescapeAndDecodeUTF8URLComponent(
|
| - spec.substr(in_component.begin, in_component.len),
|
| - UnescapeRule::NORMAL));
|
| -
|
| - out_component->len =
|
| - static_cast<int>(output->length()) - out_component->begin;
|
| - } else {
|
| - out_component->reset();
|
| - }
|
| -}
|
| -
|
| -std::wstring GetCleanStringFromUrl(const GURL& url,
|
| - const std::wstring& languages,
|
| - url_parse::Parsed* new_parsed,
|
| - size_t* prefix_end) {
|
| - url_parse::Parsed parsed_temp;
|
| - if (!new_parsed)
|
| - new_parsed = &parsed_temp;
|
| -
|
| - std::wstring url_string;
|
| -
|
| - // Check for empty URLs or 0 available text width.
|
| - if (url.is_empty()) {
|
| - if (prefix_end)
|
| - *prefix_end = 0;
|
| - return url_string;
|
| - }
|
| -
|
| - // We handle both valid and invalid URLs (this will give us the spec
|
| - // regardless of validity).
|
| - const std::string& spec = url.possibly_invalid_spec();
|
| - const url_parse::Parsed& parsed = url.parsed_for_possibly_invalid_spec();
|
| -
|
| - // Construct a new URL with the username and password fields removed. We
|
| - // don't want to display those to the user since they can be used for
|
| - // attacks, e.g. "http://google.com:search@evil.ru/"
|
| - //
|
| - // Copy everything before the host name we want (the scheme and the
|
| - // separators), minus the username start we computed above. These are ASCII.
|
| - int pre_end = parsed.CountCharactersBefore(
|
| - url_parse::Parsed::USERNAME, true);
|
| - for (int i = 0; i < pre_end; ++i)
|
| - url_string.push_back(spec[i]);
|
| - if (prefix_end)
|
| - *prefix_end = static_cast<size_t>(pre_end);
|
| - new_parsed->scheme = parsed.scheme;
|
| - new_parsed->username.reset();
|
| - new_parsed->password.reset();
|
| -
|
| - AppendFormattedHost(url, languages, &url_string, new_parsed);
|
| -
|
| - // Port.
|
| - if (parsed.port.is_nonempty()) {
|
| - url_string.push_back(':');
|
| - for (int i = parsed.port.begin; i < parsed.port.end(); ++i)
|
| - url_string.push_back(spec[i]);
|
| - }
|
| -
|
| - // Path and query both get the same general unescape & convert treatment.
|
| - AppendFormattedComponent(spec, parsed.path, &url_string, &new_parsed->path);
|
| - if (parsed.query.is_valid())
|
| - url_string.push_back('?');
|
| - AppendFormattedComponent(spec, parsed.query, &url_string, &new_parsed->query);
|
| -
|
| - // Reference is stored in valid, unescaped UTF-8, so we can just convert.
|
| - if (parsed.ref.is_valid()) {
|
| - url_string.push_back('#');
|
| - if (parsed.ref.len > 0)
|
| - url_string.append(UTF8ToWide(std::string(&spec[parsed.ref.begin],
|
| - parsed.ref.len)));
|
| - }
|
| -
|
| - return url_string;
|
| -}
|
| -
|
| SortedDisplayURL::SortedDisplayURL(const GURL& url,
|
| const std::wstring& languages) {
|
| std::wstring host;
|
| - AppendFormattedHost(url, languages, &host, NULL);
|
| + net::AppendFormattedHost(url, languages, &host, NULL);
|
| sort_host_ = WideToUTF16Hack(host);
|
| string16 host_minus_www = WideToUTF16Hack(net::StripWWW(host));
|
| url_parse::Parsed parsed;
|
| - display_url_ = WideToUTF16Hack(GetCleanStringFromUrl(url, languages,
|
| - &parsed, &prefix_end_));
|
| + display_url_ = WideToUTF16Hack(net::FormatUrl(url, languages,
|
| + true, true, &parsed, &prefix_end_));
|
| if (sort_host_.length() > host_minus_www.length()) {
|
| prefix_end_ += sort_host_.length() - host_minus_www.length();
|
| sort_host_.swap(host_minus_www);
|
|
|