Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: components/omnibox/browser/physical_web_provider.cc

Issue 2319033006: Include a page title in the Physical Web omnibox overflow item (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 "base/memory/ptr_util.h" 5 #include "base/memory/ptr_util.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "components/omnibox/browser/autocomplete_provider_client.h" 8 #include "components/omnibox/browser/autocomplete_provider_client.h"
9 #include "components/omnibox/browser/autocomplete_provider_listener.h" 9 #include "components/omnibox/browser/autocomplete_provider_listener.h"
10 #include "components/omnibox/browser/history_url_provider.h" 10 #include "components/omnibox/browser/history_url_provider.h"
(...skipping 18 matching lines...) Expand all
29 // suggestion will be the overflow item which navigates to the WebUI when 29 // suggestion will be the overflow item which navigates to the WebUI when
30 // tapped. 30 // tapped.
31 static const size_t kPhysicalWebMaxMatches = 1; 31 static const size_t kPhysicalWebMaxMatches = 1;
32 32
33 // Relevance score of the first Physical Web URL autocomplete match. This score 33 // Relevance score of the first Physical Web URL autocomplete match. This score
34 // is intended to be between ClipboardURLProvider and ZeroSuggestProvider. 34 // is intended to be between ClipboardURLProvider and ZeroSuggestProvider.
35 // Subsequent matches should decrease in relevance to preserve the ordering 35 // Subsequent matches should decrease in relevance to preserve the ordering
36 // in the metadata list. 36 // in the metadata list.
37 static const int kPhysicalWebUrlBaseRelevance = 700; 37 static const int kPhysicalWebUrlBaseRelevance = 700;
38 38
39 // The maximum length of the page title in the overflow item. Longer titles will
Mark P 2016/09/08 18:49:50 nit: consider: "page title in the overflow item" -
mattreynolds 2016/09/09 21:24:54 Done.
40 // be truncated to this length.
41 static const size_t kMaxTitleLength = 15;
Mark P 2016/09/08 18:49:49 Where did you get this number from? Calculations
mattreynolds 2016/09/09 21:24:54 I found the longest string of "m"s that would fit
Mark P 2016/09/13 23:34:42 Is this the number of "m"s that would fit, or the
mattreynolds 2016/09/14 19:04:41 It's the number of "m"s that would fit once the re
42
39 } 43 }
40 44
41 // static 45 // static
42 PhysicalWebProvider* PhysicalWebProvider::Create( 46 PhysicalWebProvider* PhysicalWebProvider::Create(
43 AutocompleteProviderClient* client, 47 AutocompleteProviderClient* client,
44 HistoryURLProvider* history_url_provider) { 48 HistoryURLProvider* history_url_provider) {
45 return new PhysicalWebProvider(client, history_url_provider); 49 return new PhysicalWebProvider(client, history_url_provider);
46 } 50 }
47 51
48 void PhysicalWebProvider::Start(const AutocompleteInput& input, 52 void PhysicalWebProvider::Start(const AutocompleteInput& input,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 119
116 // Add match items with decreasing relevance to preserve the ordering in 120 // Add match items with decreasing relevance to preserve the ordering in
117 // the metadata list. 121 // the metadata list.
118 int relevance = kPhysicalWebUrlBaseRelevance - used_slots; 122 int relevance = kPhysicalWebUrlBaseRelevance - used_slots;
119 123
120 // Append an overflow item if creating a match for each metadata item would 124 // Append an overflow item if creating a match for each metadata item would
121 // exceed the match limit. 125 // exceed the match limit.
122 const size_t remaining_slots = kPhysicalWebMaxMatches - used_slots; 126 const size_t remaining_slots = kPhysicalWebMaxMatches - used_slots;
123 const size_t remaining_metadata = metadata_count - i; 127 const size_t remaining_metadata = metadata_count - i;
124 if ((remaining_slots == 1) && (remaining_metadata > remaining_slots)) { 128 if ((remaining_slots == 1) && (remaining_metadata > remaining_slots)) {
125 AppendOverflowItem(remaining_metadata, relevance); 129 AppendOverflowItem(remaining_metadata, relevance, title_string);
126 return; 130 return;
127 } 131 }
128 132
129 GURL url(url_string); 133 GURL url(url_string);
130 base::string16 title = base::UTF8ToUTF16(title_string); 134 base::string16 title = base::UTF8ToUTF16(title_string);
131 135
132 AutocompleteMatch match(this, relevance, false, 136 AutocompleteMatch match(this, relevance, false,
133 AutocompleteMatchType::PHYSICAL_WEB); 137 AutocompleteMatchType::PHYSICAL_WEB);
134 match.destination_url = url; 138 match.destination_url = url;
135 139
(...skipping 12 matching lines...) Expand all
148 match.description = AutocompleteMatch::SanitizeString(title); 152 match.description = AutocompleteMatch::SanitizeString(title);
149 match.description_class.push_back( 153 match.description_class.push_back(
150 ACMatchClassification(0, ACMatchClassification::NONE)); 154 ACMatchClassification(0, ACMatchClassification::NONE));
151 155
152 matches_.push_back(match); 156 matches_.push_back(match);
153 ++used_slots; 157 ++used_slots;
154 } 158 }
155 } 159 }
156 160
157 void PhysicalWebProvider::AppendOverflowItem(int additional_url_count, 161 void PhysicalWebProvider::AppendOverflowItem(int additional_url_count,
158 int relevance) { 162 int relevance,
163 const std::string& title) {
159 std::string url_string = "chrome://physical-web"; 164 std::string url_string = "chrome://physical-web";
160 GURL url(url_string); 165 GURL url(url_string);
161 166
162 AutocompleteMatch match(this, relevance, false, 167 AutocompleteMatch match(this, relevance, false,
163 AutocompleteMatchType::PHYSICAL_WEB_OVERFLOW); 168 AutocompleteMatchType::PHYSICAL_WEB_OVERFLOW);
164 match.destination_url = url; 169 match.destination_url = url;
165 170
166 // Don't omit the chrome:// scheme when displaying the WebUI URL. 171 std::string contents_title;
167 match.contents = url_formatter::FormatUrl(url, 172 if (title.length() > kMaxTitleLength) {
Mark P 2016/09/08 18:49:49 This is slightly wrong if indeed as you say above
mattreynolds 2016/09/09 21:24:54 I'm now using gfx::TruncateString which ensures th
168 url_formatter::kFormatUrlOmitNothing, net::UnescapeRule::SPACES, 173 contents_title = title.substr(0, kMaxTitleLength) + "... ";
Mark P 2016/09/08 18:49:49 You probably should be using one of the standard c
mattreynolds 2016/09/09 21:24:54 I switched to using gfx::TruncateString, which aut
169 nullptr, nullptr, nullptr); 174 } else {
175 contents_title = title + " ";
176 }
Mark P 2016/09/08 18:49:49 Please also consider what happens with non-latin c
Mark P 2016/09/08 18:49:49 Please consider what happens with empty titles.
mattreynolds 2016/09/09 21:24:54 I'm not sure what the best practices are for RTL i
mattreynolds 2016/09/09 21:24:54 I added an alternate string to use when the title
Mark P 2016/09/13 23:34:42 Good enough for now I think. You may want to brin
mattreynolds 2016/09/14 19:04:41 Acknowledged.
177 base::string16 contents_suffix = l10n_util::GetPluralStringFUTF16(
178 IDS_PHYSICAL_WEB_OVERFLOW, additional_url_count - 1);
179 base::string16 contents_string = base::UTF8ToUTF16(contents_title) +
180 contents_suffix;
181
182 match.contents = contents_string;
170 match.contents_class.push_back( 183 match.contents_class.push_back(
171 ACMatchClassification(0, ACMatchClassification::URL)); 184 ACMatchClassification(0, ACMatchClassification::DIM));
172 185
173 match.fill_into_edit = 186 match.fill_into_edit =
174 AutocompleteInput::FormattedStringWithEquivalentMeaning( 187 AutocompleteInput::FormattedStringWithEquivalentMeaning(
175 url, match.contents, client_->GetSchemeClassifier()); 188 url, match.contents, client_->GetSchemeClassifier());
176 189
177 match.description = l10n_util::GetPluralStringFUTF16( 190 match.description = l10n_util::GetStringUTF16(
178 IDS_PHYSICAL_WEB_OVERFLOW, additional_url_count); 191 IDS_PHYSICAL_WEB_OVERFLOW_DESCRIPTION);
179 match.description_class.push_back( 192 match.description_class.push_back(
180 ACMatchClassification(0, ACMatchClassification::NONE)); 193 ACMatchClassification(0, ACMatchClassification::NONE));
181 194
182 matches_.push_back(match); 195 matches_.push_back(match);
183 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698