Commit 5c48792e authored by Trent Apted's avatar Trent Apted Committed by Commit Bot

Use gfx::Typesetter::BROWSER for url_formatter::ElideUrl()

StatusBarMac is the last remaining consumer of gfx:: elide and
string width functions that draws Cocoa UI but is not passing info
about the typesetter to use when eliding. It's also the only thing
on Mac that uses url_formatter::ElideUrl(), so it's sufficient to
pass gfx::Typesetter::BROWSER to ensure correct behavior.

elide_url.cc is also the last remaining consumer of GetStringWidth
that may draw to Cocoa UI but does not pass a typesetter. So,
after this, gfx::Typesetter::DEFAULT can switch from BROWSER to
HARFBUZZ to address subtle typesetting differences in Harmony UI,
without adversely affecting any Cocoa browser UI. (gfx::Typesetter
can disappear once mac_views_browser ships).

Bug: 798927
Change-Id: I6f5ff9b6a325b3b4c3b766ae5d9aabc6470ca8b5
Reviewed-on: https://chromium-review.googlesource.com/856023Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Commit-Queue: Trent Apted <tapted@chromium.org>
Cr-Commit-Position: refs/heads/master@{#529603}
parent b970abb9
...@@ -70,9 +70,11 @@ base::string16 ElideComponentizedPath( ...@@ -70,9 +70,11 @@ base::string16 ElideComponentizedPath(
for (size_t i = url_path_number_of_elements - 1; i > 0; --i) { for (size_t i = url_path_number_of_elements - 1; i > 0; --i) {
base::string16 elided_path = BuildPathFromComponents( base::string16 elided_path = BuildPathFromComponents(
url_path_prefix, url_path_elements, url_filename, i); url_path_prefix, url_path_elements, url_filename, i);
if (available_pixel_width >= gfx::GetStringWidthF(elided_path, font_list)) if (available_pixel_width >=
gfx::GetStringWidthF(elided_path, font_list, gfx::Typesetter::BROWSER))
return gfx::ElideText(elided_path + url_query, font_list, return gfx::ElideText(elided_path + url_query, font_list,
available_pixel_width, gfx::ELIDE_TAIL); available_pixel_width, gfx::ELIDE_TAIL,
gfx::Typesetter::BROWSER);
} }
return base::string16(); return base::string16();
...@@ -178,7 +180,8 @@ base::string16 ElideParsedUrlString(const base::string16& original, ...@@ -178,7 +180,8 @@ base::string16 ElideParsedUrlString(const base::string16& original,
DCHECK(behavior == gfx::ELIDE_TAIL || behavior == gfx::ELIDE_HEAD); DCHECK(behavior == gfx::ELIDE_TAIL || behavior == gfx::ELIDE_HEAD);
base::string16 elided = base::string16 elided =
gfx::ElideText(original, font_list, available_pixel_width, behavior); gfx::ElideText(original, font_list, available_pixel_width, behavior,
gfx::Typesetter::BROWSER);
if (elided == original) if (elided == original)
return elided; return elided;
...@@ -236,14 +239,15 @@ base::string16 ElideUrl(const GURL& url, ...@@ -236,14 +239,15 @@ base::string16 ElideUrl(const GURL& url,
if (available_pixel_width <= 0) if (available_pixel_width <= 0)
return url_string; return url_string;
if (!url.IsStandard()) if (!url.IsStandard()) {
return gfx::ElideText(url_string, font_list, available_pixel_width, return gfx::ElideText(url_string, font_list, available_pixel_width,
gfx::ELIDE_TAIL); gfx::ELIDE_TAIL, gfx::Typesetter::BROWSER);
}
// Now start eliding url_string to fit within available pixel width. // Now start eliding url_string to fit within available pixel width.
// Fist pass - check to see whether entire url_string fits. // Fist pass - check to see whether entire url_string fits.
const float pixel_width_url_string = const float pixel_width_url_string =
gfx::GetStringWidthF(url_string, font_list); gfx::GetStringWidthF(url_string, font_list, gfx::Typesetter::BROWSER);
if (available_pixel_width >= pixel_width_url_string) if (available_pixel_width >= pixel_width_url_string)
return url_string; return url_string;
...@@ -260,9 +264,11 @@ base::string16 ElideUrl(const GURL& url, ...@@ -260,9 +264,11 @@ base::string16 ElideUrl(const GURL& url,
// Return general elided text if url minus the query fits. // Return general elided text if url minus the query fits.
const base::string16 url_minus_query = const base::string16 url_minus_query =
url_string.substr(0, path_start_index + path_len); url_string.substr(0, path_start_index + path_len);
if (available_pixel_width >= gfx::GetStringWidthF(url_minus_query, font_list)) if (available_pixel_width >= gfx::GetStringWidthF(url_minus_query, font_list,
gfx::Typesetter::BROWSER)) {
return gfx::ElideText(url_string, font_list, available_pixel_width, return gfx::ElideText(url_string, font_list, available_pixel_width,
gfx::ELIDE_TAIL); gfx::ELIDE_TAIL, gfx::Typesetter::BROWSER);
}
base::string16 url_host; base::string16 url_host;
base::string16 url_domain; base::string16 url_domain;
...@@ -288,32 +294,36 @@ base::string16 ElideUrl(const GURL& url, ...@@ -288,32 +294,36 @@ base::string16 ElideUrl(const GURL& url,
} }
// Second Pass - remove scheme - the rest fits. // Second Pass - remove scheme - the rest fits.
const float pixel_width_url_host = gfx::GetStringWidthF(url_host, font_list); const float pixel_width_url_host =
const float pixel_width_url_path = gfx::GetStringWidthF(url_host, font_list, gfx::Typesetter::BROWSER);
gfx::GetStringWidthF(url_path_query_etc, font_list); const float pixel_width_url_path = gfx::GetStringWidthF(
url_path_query_etc, font_list, gfx::Typesetter::BROWSER);
if (available_pixel_width >= pixel_width_url_host + pixel_width_url_path) if (available_pixel_width >= pixel_width_url_host + pixel_width_url_path)
return url_host + url_path_query_etc; return url_host + url_path_query_etc;
// Third Pass: Subdomain, domain and entire path fits. // Third Pass: Subdomain, domain and entire path fits.
const float pixel_width_url_domain = const float pixel_width_url_domain =
gfx::GetStringWidthF(url_domain, font_list); gfx::GetStringWidthF(url_domain, font_list, gfx::Typesetter::BROWSER);
const float pixel_width_url_subdomain = const float pixel_width_url_subdomain =
gfx::GetStringWidthF(url_subdomain, font_list); gfx::GetStringWidthF(url_subdomain, font_list, gfx::Typesetter::BROWSER);
if (available_pixel_width >= if (available_pixel_width >=
pixel_width_url_subdomain + pixel_width_url_domain + pixel_width_url_path) pixel_width_url_subdomain + pixel_width_url_domain + pixel_width_url_path)
return url_subdomain + url_domain + url_path_query_etc; return url_subdomain + url_domain + url_path_query_etc;
// Query element. // Query element.
base::string16 url_query; base::string16 url_query;
const float kPixelWidthDotsTrailer = const float kPixelWidthDotsTrailer = gfx::GetStringWidthF(
gfx::GetStringWidthF(base::string16(gfx::kEllipsisUTF16), font_list); base::string16(gfx::kEllipsisUTF16), font_list, gfx::Typesetter::BROWSER);
if (parsed.query.is_nonempty()) { if (parsed.query.is_nonempty()) {
url_query = base::UTF8ToUTF16("?") + url_string.substr(parsed.query.begin); url_query = base::UTF8ToUTF16("?") + url_string.substr(parsed.query.begin);
if (available_pixel_width >= if (available_pixel_width >=
(pixel_width_url_subdomain + pixel_width_url_domain + (pixel_width_url_subdomain + pixel_width_url_domain +
pixel_width_url_path - gfx::GetStringWidthF(url_query, font_list))) { pixel_width_url_path -
gfx::GetStringWidthF(url_query, font_list,
gfx::Typesetter::BROWSER))) {
return gfx::ElideText(url_subdomain + url_domain + url_path_query_etc, return gfx::ElideText(url_subdomain + url_domain + url_path_query_etc,
font_list, available_pixel_width, gfx::ELIDE_TAIL); font_list, available_pixel_width, gfx::ELIDE_TAIL,
gfx::Typesetter::BROWSER);
} }
} }
...@@ -343,14 +353,15 @@ base::string16 ElideUrl(const GURL& url, ...@@ -343,14 +353,15 @@ base::string16 ElideUrl(const GURL& url,
// ElideText if we don't know the entire domain will fit, or else we might // ElideText if we don't know the entire domain will fit, or else we might
// chop off the TLD. https://crbug.com/739975. // chop off the TLD. https://crbug.com/739975.
return gfx::ElideText(url_subdomain + url_domain + url_path_query_etc, return gfx::ElideText(url_subdomain + url_domain + url_path_query_etc,
font_list, available_pixel_width, gfx::ELIDE_TAIL); font_list, available_pixel_width, gfx::ELIDE_TAIL,
gfx::Typesetter::BROWSER);
} }
// Start eliding the path and replacing elements by ".../". // Start eliding the path and replacing elements by ".../".
const base::string16 kEllipsisAndSlash = const base::string16 kEllipsisAndSlash =
base::string16(gfx::kEllipsisUTF16) + gfx::kForwardSlash; base::string16(gfx::kEllipsisUTF16) + gfx::kForwardSlash;
const float pixel_width_ellipsis_slash = const float pixel_width_ellipsis_slash = gfx::GetStringWidthF(
gfx::GetStringWidthF(kEllipsisAndSlash, font_list); kEllipsisAndSlash, font_list, gfx::Typesetter::BROWSER);
// Check with both subdomain and domain. // Check with both subdomain and domain.
if (url_path_number_of_elements > 0) { if (url_path_number_of_elements > 0) {
...@@ -384,14 +395,15 @@ base::string16 ElideUrl(const GURL& url, ...@@ -384,14 +395,15 @@ base::string16 ElideUrl(const GURL& url,
// Return elided domain/.../filename anyway. // Return elided domain/.../filename anyway.
base::string16 final_elided_url_string(url_elided_domain); base::string16 final_elided_url_string(url_elided_domain);
const float url_elided_domain_width = const float url_elided_domain_width = gfx::GetStringWidthF(
gfx::GetStringWidthF(url_elided_domain, font_list); url_elided_domain, font_list, gfx::Typesetter::BROWSER);
// A hack to prevent trailing ".../...". // A hack to prevent trailing ".../...".
if (url_path_number_of_elements > 0 && if (url_path_number_of_elements > 0 &&
url_elided_domain_width + pixel_width_ellipsis_slash + url_elided_domain_width + pixel_width_ellipsis_slash +
kPixelWidthDotsTrailer + kPixelWidthDotsTrailer +
gfx::GetStringWidthF(base::ASCIIToUTF16("UV"), font_list) < gfx::GetStringWidthF(base::ASCIIToUTF16("UV"), font_list,
gfx::Typesetter::BROWSER) <
available_pixel_width) { available_pixel_width) {
final_elided_url_string += BuildPathFromComponents( final_elided_url_string += BuildPathFromComponents(
base::string16(), url_path_elements, url_filename, 1); base::string16(), url_path_elements, url_filename, 1);
...@@ -400,7 +412,8 @@ base::string16 ElideUrl(const GURL& url, ...@@ -400,7 +412,8 @@ base::string16 ElideUrl(const GURL& url,
} }
return gfx::ElideText(final_elided_url_string, font_list, return gfx::ElideText(final_elided_url_string, font_list,
available_pixel_width, gfx::ELIDE_TAIL); available_pixel_width, gfx::ELIDE_TAIL,
gfx::Typesetter::BROWSER);
} }
base::string16 ElideHost(const GURL& url, base::string16 ElideHost(const GURL& url,
...@@ -412,8 +425,7 @@ base::string16 ElideHost(const GURL& url, ...@@ -412,8 +425,7 @@ base::string16 ElideHost(const GURL& url,
base::string16 url_subdomain; base::string16 url_subdomain;
SplitHost(url, &url_host, &url_domain, &url_subdomain); SplitHost(url, &url_host, &url_domain, &url_subdomain);
const float pixel_width_url_host = const float pixel_width_url_host = gfx::GetStringWidthF(url_host, font_list);
gfx::GetStringWidthF(url_host, font_list, typesetter);
if (available_pixel_width >= pixel_width_url_host) if (available_pixel_width >= pixel_width_url_host)
return url_host; return url_host;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment