OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "content/public/browser/notification_types.h" | 22 #include "content/public/browser/notification_types.h" |
23 #include "content/public/test/mock_render_process_host.h" | 23 #include "content/public/test/mock_render_process_host.h" |
24 #include "ipc/ipc_message.h" | 24 #include "ipc/ipc_message.h" |
25 #include "ipc/ipc_test_sink.h" | 25 #include "ipc/ipc_test_sink.h" |
26 #include "testing/gmock/include/gmock/gmock.h" | 26 #include "testing/gmock/include/gmock/gmock.h" |
27 #include "url/gurl.h" | 27 #include "url/gurl.h" |
28 | 28 |
29 class MockInstantServiceObserver : public InstantServiceObserver { | 29 class MockInstantServiceObserver : public InstantServiceObserver { |
30 public: | 30 public: |
31 MOCK_METHOD0(DefaultSearchProviderChanged, void()); | 31 MOCK_METHOD0(DefaultSearchProviderChanged, void()); |
| 32 MOCK_METHOD0(GoogleURLUpdated, void()); |
32 MOCK_METHOD1(OmniboxStartMarginChanged, void(int)); | 33 MOCK_METHOD1(OmniboxStartMarginChanged, void(int)); |
33 }; | 34 }; |
34 | 35 |
35 class InstantServiceTest : public InstantUnitTestBase { | 36 class InstantServiceTest : public InstantUnitTestBase { |
36 protected: | 37 protected: |
37 virtual void SetUp() OVERRIDE { | 38 virtual void SetUp() OVERRIDE { |
38 InstantUnitTestBase::SetUp(); | 39 InstantUnitTestBase::SetUp(); |
39 | 40 |
40 instant_service_observer_.reset(new MockInstantServiceObserver()); | 41 instant_service_observer_.reset(new MockInstantServiceObserver()); |
41 instant_service_->AddObserver(instant_service_observer_.get()); | 42 instant_service_->AddObserver(instant_service_observer_.get()); |
42 } | 43 } |
43 | 44 |
44 virtual void TearDown() OVERRIDE { | 45 virtual void TearDown() OVERRIDE { |
45 instant_service_->RemoveObserver(instant_service_observer_.get()); | 46 instant_service_->RemoveObserver(instant_service_observer_.get()); |
46 InstantUnitTestBase::TearDown(); | 47 InstantUnitTestBase::TearDown(); |
47 } | 48 } |
48 | 49 |
49 InstantSearchPrerenderer* GetInstantSearchPrerenderer() { | 50 InstantSearchPrerenderer* GetInstantSearchPrerenderer() { |
50 return instant_service_->instant_search_prerenderer(); | 51 return instant_service_->instant_search_prerenderer(); |
51 } | 52 } |
52 | 53 |
53 void UpdateOmniboxStartMargin(int start_margin) { | 54 void UpdateOmniboxStartMargin(int start_margin) { |
54 instant_service_->OnOmniboxStartMarginChanged(start_margin); | 55 instant_service_->OnOmniboxStartMarginChanged(start_margin); |
55 } | 56 } |
56 | 57 |
57 scoped_ptr<MockInstantServiceObserver> instant_service_observer_; | 58 scoped_ptr<MockInstantServiceObserver> instant_service_observer_; |
58 }; | 59 }; |
59 | 60 |
60 class InstantServiceEnabledTest : public InstantServiceTest { | 61 TEST_F(InstantServiceTest, DispatchDefaultSearchProviderChanged) { |
61 protected: | |
62 virtual void SetUp() OVERRIDE { | |
63 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | |
64 "EmbeddedSearch", "Group1 use_cacheable_ntp:1 prefetch_results:1")); | |
65 InstantServiceTest::SetUp(); | |
66 } | |
67 }; | |
68 | |
69 TEST_F(InstantServiceEnabledTest, DispatchDefaultSearchProviderChanged) { | |
70 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 62 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) |
71 .Times(1); | 63 .Times(1); |
72 | 64 |
73 const std::string new_base_url = "https://bar.com/"; | 65 const std::string& new_base_url = "https://bar.com/"; |
74 SetUserSelectedDefaultSearchProvider(new_base_url); | 66 SetUserSelectedDefaultSearchProvider(new_base_url); |
75 } | 67 } |
76 | 68 |
77 TEST_F(InstantServiceTest, DontDispatchGoogleURLUpdatedForNonGoogleURLs) { | 69 TEST_F(InstantServiceTest, DispatchGoogleURLUpdated) { |
78 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 70 EXPECT_CALL(*instant_service_observer_.get(), GoogleURLUpdated()).Times(1); |
79 .Times(1); | |
80 const std::string new_dsp_url = "https://bar.com/"; | |
81 SetUserSelectedDefaultSearchProvider(new_dsp_url); | |
82 testing::Mock::VerifyAndClearExpectations(instant_service_observer_.get()); | |
83 | 71 |
84 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 72 const std::string& new_base_url = "https://www.google.es/"; |
85 .Times(0); | |
86 const std::string new_base_url = "https://www.google.es/"; | |
87 NotifyGoogleBaseURLUpdate(new_base_url); | 73 NotifyGoogleBaseURLUpdate(new_base_url); |
88 } | 74 } |
89 | 75 |
90 TEST_F(InstantServiceTest, DispatchGoogleURLUpdated) { | 76 TEST_F(InstantServiceTest, SendsSearchURLsToRenderer) { |
91 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 77 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", |
92 .Times(1); | 78 "Group1 use_cacheable_ntp:1")); |
93 | |
94 const std::string new_base_url = "https://www.google.es/"; | |
95 NotifyGoogleBaseURLUpdate(new_base_url); | |
96 } | |
97 | |
98 TEST_F(InstantServiceEnabledTest, SendsSearchURLsToRenderer) { | |
99 scoped_ptr<content::MockRenderProcessHost> rph( | 79 scoped_ptr<content::MockRenderProcessHost> rph( |
100 new content::MockRenderProcessHost(profile())); | 80 new content::MockRenderProcessHost(profile())); |
101 rph->sink().ClearMessages(); | 81 rph->sink().ClearMessages(); |
102 instant_service_->Observe( | 82 instant_service_->Observe( |
103 content::NOTIFICATION_RENDERER_PROCESS_CREATED, | 83 content::NOTIFICATION_RENDERER_PROCESS_CREATED, |
104 content::Source<content::MockRenderProcessHost>(rph.get()), | 84 content::Source<content::MockRenderProcessHost>(rph.get()), |
105 content::NotificationService::NoDetails()); | 85 content::NotificationService::NoDetails()); |
106 EXPECT_EQ(1U, rph->sink().message_count()); | 86 EXPECT_EQ(1U, rph->sink().message_count()); |
107 const IPC::Message* msg = rph->sink().GetMessageAt(0); | 87 const IPC::Message* msg = rph->sink().GetMessageAt(0); |
108 ASSERT_TRUE(msg); | 88 ASSERT_TRUE(msg); |
109 std::vector<GURL> search_urls; | 89 std::vector<GURL> search_urls; |
110 GURL new_tab_page_url; | 90 GURL new_tab_page_url; |
111 ChromeViewMsg_SetSearchURLs::Read(msg, &search_urls, &new_tab_page_url); | 91 ChromeViewMsg_SetSearchURLs::Read(msg, &search_urls, &new_tab_page_url); |
112 EXPECT_EQ(2U, search_urls.size()); | 92 EXPECT_EQ(2U, search_urls.size()); |
113 EXPECT_EQ("https://www.google.com/alt#quux=", search_urls[0].spec()); | 93 EXPECT_EQ("https://www.google.com/alt#quux=", search_urls[0].spec()); |
114 EXPECT_EQ("https://www.google.com/url?bar=", search_urls[1].spec()); | 94 EXPECT_EQ("https://www.google.com/url?bar=", search_urls[1].spec()); |
115 EXPECT_EQ("https://www.google.com/newtab", new_tab_page_url.spec()); | 95 EXPECT_EQ("https://www.google.com/newtab", new_tab_page_url.spec()); |
116 } | 96 } |
117 | 97 |
118 TEST_F(InstantServiceTest, InstantSearchDisabled) { | 98 TEST_F(InstantServiceTest, InstantSearchDisabled) { |
119 // 'prefetch_results' flag is not enabled in field trials. Make sure | 99 // 'prefetch_results' flag is not enabled in field trials. Make sure |
120 // InstantSearchPrerenderer is not initialized. | 100 // InstantSearchPrerenderer is not initialized. |
121 EXPECT_EQ(static_cast<InstantSearchPrerenderer*>(NULL), | 101 EXPECT_EQ(static_cast<InstantSearchPrerenderer*>(NULL), |
122 GetInstantSearchPrerenderer()); | 102 GetInstantSearchPrerenderer()); |
123 } | 103 } |
124 | 104 |
125 TEST_F(InstantServiceEnabledTest, | 105 TEST_F(InstantServiceTest, |
126 ResetInstantSearchPrerenderer_DefaultProviderChanged) { | 106 ResetInstantSearchPrerenderer_DefaultProviderChanged) { |
| 107 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 108 "EmbeddedSearch", "Group1 use_cacheable_ntp:1 prefetch_results:1")); |
127 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 109 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) |
128 .Times(2); | 110 .Times(2); |
129 | 111 |
130 // Set a default search provider that doesn't support Instant. | 112 // Set a default search provider that doesn't support Instant. |
131 TemplateURLData data; | 113 TemplateURLData data; |
132 data.SetURL("https://foobar.com/url?bar={searchTerms}"); | 114 data.SetURL("https://foobar.com/url?bar={searchTerms}"); |
133 TemplateURL* template_url = new TemplateURL(profile(), data); | 115 TemplateURL* template_url = new TemplateURL(profile(), data); |
134 // Takes ownership of |template_url|. | 116 // Takes ownership of |template_url|. |
135 template_url_service_->Add(template_url); | 117 template_url_service_->Add(template_url); |
136 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); | 118 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); |
137 | 119 |
138 EXPECT_EQ(static_cast<InstantSearchPrerenderer*>(NULL), | 120 EXPECT_EQ(static_cast<InstantSearchPrerenderer*>(NULL), |
139 GetInstantSearchPrerenderer()); | 121 GetInstantSearchPrerenderer()); |
140 | 122 |
141 // Set a default search provider that supports Instant and make sure | 123 // Set a default search provider that supports Instant and make sure |
142 // InstantSearchPrerenderer is valid. | 124 // InstantSearchPrerenderer is valid. |
143 SetUserSelectedDefaultSearchProvider("https://google.com/"); | 125 SetUserSelectedDefaultSearchProvider("https://google.com/"); |
144 EXPECT_NE(static_cast<InstantSearchPrerenderer*>(NULL), | 126 EXPECT_NE(static_cast<InstantSearchPrerenderer*>(NULL), |
145 GetInstantSearchPrerenderer()); | 127 GetInstantSearchPrerenderer()); |
146 } | 128 } |
147 | 129 |
148 TEST_F(InstantServiceEnabledTest, | 130 TEST_F(InstantServiceTest, ResetInstantSearchPrerenderer_GoogleBaseURLUpdated) { |
149 ResetInstantSearchPrerenderer_GoogleBaseURLUpdated) { | 131 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 132 "EmbeddedSearch", "Group1 use_cacheable_ntp:1 prefetch_results:1")); |
150 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) | 133 EXPECT_CALL(*instant_service_observer_.get(), DefaultSearchProviderChanged()) |
151 .Times(1); | 134 .Times(1); |
| 135 EXPECT_CALL(*instant_service_observer_.get(), GoogleURLUpdated()).Times(1); |
152 | 136 |
| 137 SetUserSelectedDefaultSearchProvider("https://google.com/"); |
153 InstantSearchPrerenderer* old_prerenderer = GetInstantSearchPrerenderer(); | 138 InstantSearchPrerenderer* old_prerenderer = GetInstantSearchPrerenderer(); |
154 EXPECT_TRUE(old_prerenderer != NULL); | 139 EXPECT_NE(static_cast<InstantSearchPrerenderer*>(NULL), old_prerenderer); |
155 | 140 |
156 const std::string new_base_url = "https://www.google.es/"; | 141 const std::string& new_base_url = "https://www.google.es/"; |
157 NotifyGoogleBaseURLUpdate(new_base_url); | 142 NotifyGoogleBaseURLUpdate(new_base_url); |
158 EXPECT_NE(old_prerenderer, GetInstantSearchPrerenderer()); | 143 EXPECT_NE(old_prerenderer, GetInstantSearchPrerenderer()); |
159 } | 144 } |
160 | 145 |
161 TEST_F(InstantServiceTest, OmniboxStartMarginChanged) { | 146 TEST_F(InstantServiceTest, OmniboxStartMarginChanged) { |
162 int new_start_margin = 92; | 147 int new_start_margin = 92; |
163 EXPECT_CALL(*instant_service_observer_.get(), | 148 EXPECT_CALL(*instant_service_observer_.get(), |
164 OmniboxStartMarginChanged(new_start_margin)).Times(1); | 149 OmniboxStartMarginChanged(new_start_margin)).Times(1); |
165 UpdateOmniboxStartMargin(new_start_margin); | 150 UpdateOmniboxStartMargin(new_start_margin); |
166 } | 151 } |
OLD | NEW |