Index: chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
index 99e1c1c9e30facdc57f328f9d7fb18cf20a9f772..bfd6d126d85462b6480702b03b2baac4a064bdbb 100644 |
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/macros.h" |
#include "build/build_config.h" |
+#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" |
#include "chrome/browser/command_updater.h" |
#include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h" |
#include "chrome/test/base/testing_profile.h" |
@@ -32,10 +33,14 @@ class TestingOmniboxViewViews : public OmniboxViewViews { |
TestingOmniboxViewViews(OmniboxEditController* controller, |
Profile* profile, |
CommandUpdater* command_updater) |
- : OmniboxViewViews(controller, profile, command_updater, false, NULL, |
+ : OmniboxViewViews(controller, |
+ profile, |
+ command_updater, |
+ false, |
+ NULL, |
Peter Kasting
2017/03/01 02:39:11
Nit: While here: nullptr
elawrence
2017/03/01 21:49:01
Done.
|
gfx::FontList()), |
- update_popup_call_count_(0) { |
- } |
+ update_popup_call_count_(0), |
+ profile_(profile) {} |
void CheckUpdatePopupCallInfo(size_t call_count, const base::string16& text, |
const gfx::Range& selection_range) { |
@@ -44,6 +49,30 @@ class TestingOmniboxViewViews : public OmniboxViewViews { |
EXPECT_EQ(selection_range, update_popup_selection_range_); |
} |
+ void EmphasizeURLComponents() override { |
+ ApplyEmphasis(text(), ChromeAutocompleteSchemeClassifier(profile_)); |
+ } |
+ |
+ void SetEmphasis(bool emphasize, gfx::Range range) override { |
+ if (range == gfx::Range::InvalidRange()) { |
+ base_text_is_emphasized_ = emphasize; |
+ return; |
+ } |
+ |
+ EXPECT_TRUE(emphasize); |
+ emphasis_range_ = range; |
+ } |
+ |
+ void UpdateSchemeEmphasis(gfx::Range range) override { |
+ scheme_range_ = range; |
+ } |
+ |
+ 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.
|
+ |
+ gfx::Range GetEmphasisRange() { return emphasis_range_; } |
+ |
+ bool IsBaseTextEmphasized() { return base_text_is_emphasized_; } |
+ |
private: |
// OmniboxView: |
void UpdatePopup() override { |
@@ -55,6 +84,16 @@ class TestingOmniboxViewViews : public OmniboxViewViews { |
size_t update_popup_call_count_; |
base::string16 update_popup_text_; |
gfx::Range update_popup_selection_range_; |
+ Profile* profile_; |
+ |
+ // Range of the last scheme logged by |UpdateSchemeEmphasis()|. |
+ gfx::Range scheme_range_; |
+ |
+ // Range of the last text emphasized by |SetEmphasis()|. |
+ gfx::Range emphasis_range_; |
+ |
+ // |SetEmphasis()| logs whether the base color of the text is emphasized. |
+ bool base_text_is_emphasized_; |
DISALLOW_COPY_AND_ASSIGN(TestingOmniboxViewViews); |
}; |
@@ -163,3 +202,81 @@ TEST_F(OmniboxViewViewsTest, ScheduledTextEditCommand) { |
EXPECT_EQ(ui::TextEditCommand::INVALID_COMMAND, |
scheduled_text_edit_command()); |
} |
+ |
+// Ensure only scheme is emphasized for data: URLs. |
+TEST_F(OmniboxViewViewsTest, TestEmphasisForDATA) { |
+ omnibox_textfield()->SetText( |
+ base::ASCIIToUTF16("data:text/html,Hello%20World")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// Ensure only origin is emphasized for http: URLs. |
+TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTP) { |
+ omnibox_textfield()->SetText( |
+ base::ASCIIToUTF16("http://www.example.com/path/file.htm")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(7, 22), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// Ensure only origin is emphasized for https: URLs. |
+TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTPS) { |
+ omnibox_textfield()->SetText( |
+ base::ASCIIToUTF16("https://www.example.com/path/file.htm")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 5), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(8, 23), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// Ensure that nothing is emphasized for chrome-extension: URLs. |
+TEST_F(OmniboxViewViewsTest, TestEmphasisForChromeExtensionScheme) { |
+ omnibox_textfield()->SetText(base::ASCIIToUTF16( |
+ "chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 16), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// 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.
|
+TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownHierarchicalScheme) { |
+ omnibox_textfield()->SetText( |
+ base::ASCIIToUTF16("nosuchscheme://opaque/string")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->GetSchemeRange()); |
+ EXPECT_TRUE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// Ensure that everything is emphasized for unknown scheme URLs. |
+TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownScheme) { |
+ omnibox_textfield()->SetText(base::ASCIIToUTF16("nosuchscheme:opaquestring")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->GetSchemeRange()); |
+ EXPECT_TRUE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// 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.
|
+TEST_F(OmniboxViewViewsTest, TestEmphasisForPartialURLs) { |
+ omnibox_textfield()->SetText(base::ASCIIToUTF16("example/path/file")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range::InvalidRange(), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(0, 7), omnibox_view()->GetEmphasisRange()); |
+} |
+ |
+// Non-URL text gets treated as a URL where the entire string is interpreted |
+// 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
|
+TEST_F(OmniboxViewViewsTest, TestEmphasisForNonURLs) { |
+ omnibox_textfield()->SetText(base::ASCIIToUTF16("This is plain text")); |
+ omnibox_view()->EmphasizeURLComponents(); |
+ EXPECT_EQ(gfx::Range::InvalidRange(), omnibox_view()->GetSchemeRange()); |
+ EXPECT_FALSE(omnibox_view()->IsBaseTextEmphasized()); |
+ EXPECT_EQ(gfx::Range(0, 18), omnibox_view()->GetEmphasisRange()); |
+} |