summaryrefslogtreecommitdiff
path: root/chromium/components/url_formatter/elide_url.h
blob: 9ec74f981086282e10af2af7af9720901338f325 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file defines utility functions for eliding URLs.

#ifndef COMPONENTS_URL_FORMATTER_ELIDE_URL_H_
#define COMPONENTS_URL_FORMATTER_ELIDE_URL_H_

#include <string>

#include "build/build_config.h"

class GURL;

namespace gfx {
class FontList;
}

namespace url {
class Origin;
}

namespace url_formatter {

// ElideUrl and Elide host require
// gfx::GetStringWidthF which is not implemented in Android
#if !BUILDFLAG(IS_ANDROID)
// This function takes a GURL object and elides it. It returns a string
// composed of parts from subdomain, domain, path, filename and query.
// A "..." is added automatically at the end if the elided string is bigger
// than the |available_pixel_width|. For |available_pixel_width| == 0, a
// formatted, but un-elided, string is returned.
//
// Note: in RTL locales, if the URL returned by this function is going to be
// displayed in the UI, then it is likely that the string needs to be marked
// as an LTR string (using base::i18n::WrapStringWithLTRFormatting()) so that it
// is displayed properly in an RTL context. Please refer to
// http://crbug.com/6487 for more information.
std::u16string ElideUrl(const GURL& url,
                        const gfx::FontList& font_list,
                        float available_pixel_width);

// This function takes a GURL object and elides the host to fit within
// the given width. The function will never elide past the TLD+1 point,
// but after that, will leading-elide the domain name to fit the width.
// Example: http://sub.domain.com ---> "...domain.com", or "...b.domain.com"
// depending on the width.
std::u16string ElideHost(const GURL& host_url,
                         const gfx::FontList& font_list,
                         float available_pixel_width);
#endif  // !BUILDFLAG(IS_ANDROID)

// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.url_formatter
enum class SchemeDisplay {
  SHOW,
  OMIT_HTTP_AND_HTTPS,
  // Omit cryptographic (i.e. https and wss).
  OMIT_CRYPTOGRAPHIC,
};

// This is a convenience function for formatting a URL in a concise and
// human-friendly way, to help users make security-related decisions (or in
// other circumstances when people need to distinguish sites, origins, or
// otherwise-simplified URLs from each other).
//
// Internationalized domain names (IDN) will be presented in Unicode if
// they're regarded safe except that domain names with RTL characters
// will still be in ACE/punycode for now (http://crbug.com/650760).
// See http://dev.chromium.org/developers/design-documents/idn-in-google-chrome
// for details on the algorithm.
//
// - Omits the path for standard schemes, excepting file and filesystem.
// - Omits the port if it is the default for the scheme.
//
// Do not use this for URLs which will be parsed or sent to other applications.
//
// Generally, prefer SchemeDisplay::SHOW to omitting the scheme unless there is
// plenty of indication as to whether the origin is secure elsewhere in the UX.
// For example, in Chrome's Page Info Bubble, there are icons and strings
// indicating origin (non-)security. But in the HTTP Basic Auth prompt (for
// example), the scheme may be the only indicator.
std::u16string FormatUrlForSecurityDisplay(
    const GURL& origin,
    const SchemeDisplay scheme_display = SchemeDisplay::SHOW);

// This is a convenience function for formatting a url::Origin in a concise and
// human-friendly way, to help users make security-related decisions.
//
// - Omits the port if it is 0 or the default for the scheme.
//
// Do not use this for origins which will be parsed or sent to other
// applications.
//
// Generally, prefer SchemeDisplay::SHOW to omitting the scheme unless there is
// plenty of indication as to whether the origin is secure elsewhere in the UX.
std::u16string FormatOriginForSecurityDisplay(
    const url::Origin& origin,
    const SchemeDisplay scheme_display = SchemeDisplay::SHOW);

// This is a convenience function for formatting a URL in a concise and
// human-friendly way, omitting the HTTP/HTTPS scheme, the username and
// password, the path and removing trivial subdomains.

// The IDN hostname is turned to Unicode if the Unicode representation is deemed
// safe, including RTL characters (as opposed to
// `url_formatter::FormatUrlForSecurityDisplay()`).

// Example:
//  - "http://user:password@example.com/%20test" -> "example.com"
//  - "http://user:password@example.com/" -> "example.com"
//  - "http://www.xn--frgbolaget-q5a.se" -> "färgbolaget.se"
std::u16string FormatUrlForDisplayOmitSchemePathAndTrivialSubdomains(
    const GURL& url);

// This is a convenience function for formatting a URL in a concise and
// human-friendly way, omitting the HTTP/HTTPS scheme, the username and
// password, the path and removing trivial subdomains and the mobile prefix
// "m.".

// The IDN hostname is turned to Unicode if the Unicode representation is deemed
// safe, including RTL characters (as opposed to
// `url_formatter::FormatUrlForSecurityDisplay()`).

// Example:
//  - "http://user:password@example.com/%20test" -> "example.com"
//  - "http://user:password@example.com/" -> "example.com"
//  - "http://www.xn--frgbolaget-q5a.se" -> "färgbolaget.se"
//  - "http://www.m.google.com" -> "google.com"
//  - "http://m.google.com" -> "google.com"
#if BUILDFLAG(IS_IOS)
std::u16string
FormatUrlForDisplayOmitSchemePathTrivialSubdomainsAndMobilePrefix(
    const GURL& url);
#endif

// Splits the hostname in the `url` into sub-strings for the full hostname,
// the domain (TLD+1), and the subdomain (everything leading the domain).
// The `url_subdomain` may be nullptr if it isn't needed by the caller.
void SplitHost(const GURL& url,
               std::u16string* url_host,
               std::u16string* url_domain,
               std::u16string* url_subdomain);

}  // namespace url_formatter

#endif  // COMPONENTS_URL_FORMATTER_ELIDE_URL_H_