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

Side by Side Diff: chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc

Issue 2641003002: Show scheme in black and content in gray for data: protocol urls (Closed)
Patch Set: Update iOS Created 3 years, 9 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) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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/views/omnibox/omnibox_view_views.h" 5 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
13 #include "chrome/browser/command_updater.h" 14 #include "chrome/browser/command_updater.h"
14 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h" 15 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h"
15 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
16 #include "content/public/test/test_browser_thread_bundle.h" 17 #include "content/public/test/test_browser_thread_bundle.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "ui/base/ime/text_edit_commands.h" 19 #include "ui/base/ime/text_edit_commands.h"
19 #include "ui/events/event_utils.h" 20 #include "ui/events/event_utils.h"
20 #include "ui/events/keycodes/dom/dom_code.h" 21 #include "ui/events/keycodes/dom/dom_code.h"
21 #include "ui/views/controls/textfield/textfield_test_api.h" 22 #include "ui/views/controls/textfield/textfield_test_api.h"
22 23
23 #if defined(OS_CHROMEOS) 24 #if defined(OS_CHROMEOS)
24 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" 25 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
25 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h" 26 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
26 #endif 27 #endif
27 28
28 namespace { 29 namespace {
29 30
30 class TestingOmniboxViewViews : public OmniboxViewViews { 31 class TestingOmniboxViewViews : public OmniboxViewViews {
31 public: 32 public:
32 TestingOmniboxViewViews(OmniboxEditController* controller, 33 TestingOmniboxViewViews(OmniboxEditController* controller,
33 Profile* profile, 34 Profile* profile,
34 CommandUpdater* command_updater) 35 CommandUpdater* command_updater)
35 : OmniboxViewViews(controller, profile, command_updater, false, NULL, 36 : OmniboxViewViews(controller,
37 profile,
38 command_updater,
39 false,
40 NULL,
Peter Kasting 2017/03/01 02:39:11 Nit: While here: nullptr
elawrence 2017/03/01 21:49:01 Done.
36 gfx::FontList()), 41 gfx::FontList()),
37 update_popup_call_count_(0) { 42 update_popup_call_count_(0),
38 } 43 profile_(profile) {}
39 44
40 void CheckUpdatePopupCallInfo(size_t call_count, const base::string16& text, 45 void CheckUpdatePopupCallInfo(size_t call_count, const base::string16& text,
41 const gfx::Range& selection_range) { 46 const gfx::Range& selection_range) {
42 EXPECT_EQ(call_count, update_popup_call_count_); 47 EXPECT_EQ(call_count, update_popup_call_count_);
43 EXPECT_EQ(text, update_popup_text_); 48 EXPECT_EQ(text, update_popup_text_);
44 EXPECT_EQ(selection_range, update_popup_selection_range_); 49 EXPECT_EQ(selection_range, update_popup_selection_range_);
45 } 50 }
46 51
52 void EmphasizeURLComponents() override {
53 ApplyEmphasis(text(), ChromeAutocompleteSchemeClassifier(profile_));
54 }
55
56 void SetEmphasis(bool emphasize, gfx::Range range) override {
57 if (range == gfx::Range::InvalidRange()) {
58 base_text_is_emphasized_ = emphasize;
59 return;
60 }
61
62 EXPECT_TRUE(emphasize);
63 emphasis_range_ = range;
64 }
65
66 void UpdateSchemeEmphasis(gfx::Range range) override {
67 scheme_range_ = range;
68 }
69
70 gfx::Range GetSchemeRange() { return scheme_range_; }
Peter Kasting 2017/03/01 02:39:11 Nit: Next three can be const. I suggest naming th
elawrence 2017/03/01 21:49:01 Done.
71
72 gfx::Range GetEmphasisRange() { return emphasis_range_; }
73
74 bool IsBaseTextEmphasized() { return base_text_is_emphasized_; }
75
47 private: 76 private:
48 // OmniboxView: 77 // OmniboxView:
49 void UpdatePopup() override { 78 void UpdatePopup() override {
50 ++update_popup_call_count_; 79 ++update_popup_call_count_;
51 update_popup_text_ = text(); 80 update_popup_text_ = text();
52 update_popup_selection_range_ = GetSelectedRange(); 81 update_popup_selection_range_ = GetSelectedRange();
53 } 82 }
54 83
55 size_t update_popup_call_count_; 84 size_t update_popup_call_count_;
56 base::string16 update_popup_text_; 85 base::string16 update_popup_text_;
57 gfx::Range update_popup_selection_range_; 86 gfx::Range update_popup_selection_range_;
87 Profile* profile_;
88
89 // Range of the last scheme logged by |UpdateSchemeEmphasis()|.
90 gfx::Range scheme_range_;
91
92 // Range of the last text emphasized by |SetEmphasis()|.
93 gfx::Range emphasis_range_;
94
95 // |SetEmphasis()| logs whether the base color of the text is emphasized.
96 bool base_text_is_emphasized_;
58 97
59 DISALLOW_COPY_AND_ASSIGN(TestingOmniboxViewViews); 98 DISALLOW_COPY_AND_ASSIGN(TestingOmniboxViewViews);
60 }; 99 };
61 100
62 class TestingOmniboxEditController : public ChromeOmniboxEditController { 101 class TestingOmniboxEditController : public ChromeOmniboxEditController {
63 public: 102 public:
64 explicit TestingOmniboxEditController(CommandUpdater* command_updater) 103 explicit TestingOmniboxEditController(CommandUpdater* command_updater)
65 : ChromeOmniboxEditController(command_updater) {} 104 : ChromeOmniboxEditController(command_updater) {}
66 105
67 protected: 106 protected:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 TEST_F(OmniboxViewViewsTest, ScheduledTextEditCommand) { 195 TEST_F(OmniboxViewViewsTest, ScheduledTextEditCommand) {
157 omnibox_textfield()->SetTextEditCommandForNextKeyEvent( 196 omnibox_textfield()->SetTextEditCommandForNextKeyEvent(
158 ui::TextEditCommand::MOVE_UP); 197 ui::TextEditCommand::MOVE_UP);
159 EXPECT_EQ(ui::TextEditCommand::MOVE_UP, scheduled_text_edit_command()); 198 EXPECT_EQ(ui::TextEditCommand::MOVE_UP, scheduled_text_edit_command());
160 199
161 ui::KeyEvent up_pressed(ui::ET_KEY_PRESSED, ui::VKEY_UP, 0); 200 ui::KeyEvent up_pressed(ui::ET_KEY_PRESSED, ui::VKEY_UP, 0);
162 omnibox_textfield()->OnKeyEvent(&up_pressed); 201 omnibox_textfield()->OnKeyEvent(&up_pressed);
163 EXPECT_EQ(ui::TextEditCommand::INVALID_COMMAND, 202 EXPECT_EQ(ui::TextEditCommand::INVALID_COMMAND,
164 scheduled_text_edit_command()); 203 scheduled_text_edit_command());
165 } 204 }
205
206 // Ensure only scheme is emphasized for data: URLs.
207 TEST_F(OmniboxViewViewsTest, TestEmphasisForDATA) {
208 omnibox_textfield()->SetText(
209 base::ASCIIToUTF16("data:text/html,Hello%20World"));
210 omnibox_view()->EmphasizeURLComponents();
211 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetSchemeRange());
212 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
213 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetEmphasisRange());
214 }
215
216 // Ensure only origin is emphasized for http: URLs.
217 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTP) {
218 omnibox_textfield()->SetText(
219 base::ASCIIToUTF16("http://www.example.com/path/file.htm"));
220 omnibox_view()->EmphasizeURLComponents();
221 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetSchemeRange());
222 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
223 EXPECT_EQ(gfx::Range(7, 22), omnibox_view()->GetEmphasisRange());
224 }
225
226 // Ensure only origin is emphasized for https: URLs.
227 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTPS) {
228 omnibox_textfield()->SetText(
229 base::ASCIIToUTF16("https://www.example.com/path/file.htm"));
230 omnibox_view()->EmphasizeURLComponents();
231 EXPECT_EQ(gfx::Range(0, 5), omnibox_view()->GetSchemeRange());
232 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
233 EXPECT_EQ(gfx::Range(8, 23), omnibox_view()->GetEmphasisRange());
234 }
235
236 // Ensure that nothing is emphasized for chrome-extension: URLs.
237 TEST_F(OmniboxViewViewsTest, TestEmphasisForChromeExtensionScheme) {
238 omnibox_textfield()->SetText(base::ASCIIToUTF16(
239 "chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl"));
240 omnibox_view()->EmphasizeURLComponents();
241 EXPECT_EQ(gfx::Range(0, 16), omnibox_view()->GetSchemeRange());
242 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
243 EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange());
244 }
245
246 // Ensure that everything is emphasized for unknown scheme heirarchical URLs.
Peter Kasting 2017/03/01 02:39:11 Nit: hierarchical
elawrence 2017/03/01 21:49:01 Done.
247 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownHierarchicalScheme) {
248 omnibox_textfield()->SetText(
249 base::ASCIIToUTF16("nosuchscheme://opaque/string"));
250 omnibox_view()->EmphasizeURLComponents();
251 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->GetSchemeRange());
252 EXPECT_TRUE(omnibox_view()->IsBaseTextEmphasized());
253 EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange());
254 }
255
256 // Ensure that everything is emphasized for unknown scheme URLs.
257 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownScheme) {
258 omnibox_textfield()->SetText(base::ASCIIToUTF16("nosuchscheme:opaquestring"));
259 omnibox_view()->EmphasizeURLComponents();
260 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->GetSchemeRange());
261 EXPECT_TRUE(omnibox_view()->IsBaseTextEmphasized());
262 EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange());
263 }
264
265 // Ensure that Origin is emphasized for URL-like text.
Peter Kasting 2017/03/01 02:39:10 Nit: Origin -> the origin
elawrence 2017/03/01 21:49:01 Done.
266 TEST_F(OmniboxViewViewsTest, TestEmphasisForPartialURLs) {
267 omnibox_textfield()->SetText(base::ASCIIToUTF16("example/path/file"));
268 omnibox_view()->EmphasizeURLComponents();
269 EXPECT_EQ(gfx::Range::InvalidRange(), omnibox_view()->GetSchemeRange());
270 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
271 EXPECT_EQ(gfx::Range(0, 7), omnibox_view()->GetEmphasisRange());
272 }
273
274 // Non-URL text gets treated as a URL where the entire string is interpreted
275 // as a hostname.
Peter Kasting 2017/03/01 02:39:10 That doesn't sound right. CurrentTextIsURL() ough
elawrence 2017/03/01 21:49:01 The problem is that OmniboxEditModel::CurrentTextI
Peter Kasting 2017/03/01 23:18:47 That's because you're calling SetText() in all of
elawrence 2017/03/01 23:50:53 Yes, SetUserText() code path that leads to the des
elawrence 2017/03/02 19:08:01 Exposing CurrentTextIsURL as a virtual function on
276 TEST_F(OmniboxViewViewsTest, TestEmphasisForNonURLs) {
277 omnibox_textfield()->SetText(base::ASCIIToUTF16("This is plain text"));
278 omnibox_view()->EmphasizeURLComponents();
279 EXPECT_EQ(gfx::Range::InvalidRange(), omnibox_view()->GetSchemeRange());
280 EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized());
281 EXPECT_EQ(gfx::Range(0, 18), omnibox_view()->GetEmphasisRange());
282 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698