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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/search/search_ipc_router.h"
6
7 #include <vector>
8
9 #include "base/command_line.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/metrics/field_trial.h"
12 #include "base/strings/string16.h"
13 #include "base/strings/utf_string_conversions.h"
14 #include "base/tuple.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/search/search.h"
17 #include "chrome/browser/search_engines/template_url_service.h"
18 #include "chrome/browser/search_engines/template_url_service_factory.h"
19 #include "chrome/browser/ui/search/search_ipc_router_policy_impl.h"
20 #include "chrome/browser/ui/search/search_tab_helper.h"
21 #include "chrome/browser/ui/tabs/tab_strip_model.h"
22 #include "chrome/common/chrome_switches.h"
23 #include "chrome/common/instant_types.h"
24 #include "chrome/common/ntp_logging_events.h"
25 #include "chrome/common/omnibox_focus_state.h"
26 #include "chrome/common/render_messages.h"
27 #include "chrome/common/url_constants.h"
28 #include "chrome/test/base/browser_with_test_window_test.h"
29 #include "chrome/test/base/ui_test_utils.h"
30 #include "content/public/browser/navigation_controller.h"
31 #include "content/public/browser/navigation_entry.h"
32 #include "content/public/browser/web_contents.h"
33 #include "content/public/test/mock_render_process_host.h"
34 #include "ipc/ipc_message.h"
35 #include "ipc/ipc_test_sink.h"
36 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h"
38 #include "ui/base/window_open_disposition.h"
39 #include "url/gurl.h"
40
41 namespace {
42
43 class MockSearchIPCRouterDelegate : public SearchIPCRouter::Delegate {
44 public:
~MockSearchIPCRouterDelegate()45 virtual ~MockSearchIPCRouterDelegate() {}
46
47 MOCK_METHOD1(OnInstantSupportDetermined, void(bool supports_instant));
48 MOCK_METHOD1(OnSetVoiceSearchSupport, void(bool supports_voice_search));
49 MOCK_METHOD1(FocusOmnibox, void(OmniboxFocusState state));
50 MOCK_METHOD3(NavigateToURL, void(const GURL&, WindowOpenDisposition, bool));
51 MOCK_METHOD1(OnDeleteMostVisitedItem, void(const GURL& url));
52 MOCK_METHOD1(OnUndoMostVisitedDeletion, void(const GURL& url));
53 MOCK_METHOD0(OnUndoAllMostVisitedDeletions, void());
54 MOCK_METHOD1(OnLogEvent, void(NTPLoggingEventType event));
55 MOCK_METHOD2(OnLogImpression, void(int position,
56 const base::string16& provider));
57 MOCK_METHOD1(PasteIntoOmnibox, void(const base::string16&));
58 MOCK_METHOD1(OnChromeIdentityCheck, void(const base::string16& identity));
59 };
60
61 class MockSearchIPCRouterPolicy : public SearchIPCRouter::Policy {
62 public:
~MockSearchIPCRouterPolicy()63 virtual ~MockSearchIPCRouterPolicy() {}
64
65 MOCK_METHOD0(ShouldProcessSetVoiceSearchSupport, bool());
66 MOCK_METHOD1(ShouldProcessFocusOmnibox, bool(bool));
67 MOCK_METHOD1(ShouldProcessNavigateToURL, bool(bool));
68 MOCK_METHOD0(ShouldProcessDeleteMostVisitedItem, bool());
69 MOCK_METHOD0(ShouldProcessUndoMostVisitedDeletion, bool());
70 MOCK_METHOD0(ShouldProcessUndoAllMostVisitedDeletions, bool());
71 MOCK_METHOD0(ShouldProcessLogEvent, bool());
72 MOCK_METHOD1(ShouldProcessPasteIntoOmnibox, bool(bool));
73 MOCK_METHOD0(ShouldProcessChromeIdentityCheck, bool());
74 MOCK_METHOD0(ShouldSendSetPromoInformation, bool());
75 MOCK_METHOD0(ShouldSendSetDisplayInstantResults, bool());
76 MOCK_METHOD0(ShouldSendSetSuggestionToPrefetch, bool());
77 MOCK_METHOD0(ShouldSendMostVisitedItems, bool());
78 MOCK_METHOD0(ShouldSendThemeBackgroundInfo, bool());
79 MOCK_METHOD0(ShouldSendToggleVoiceSearch, bool());
80 MOCK_METHOD0(ShouldSubmitQuery, bool());
81 };
82
83 } // namespace
84
85 class SearchIPCRouterTest : public BrowserWithTestWindowTest {
86 public:
SearchIPCRouterTest()87 SearchIPCRouterTest() : field_trial_list_(NULL) {}
88
SetUp()89 virtual void SetUp() {
90 BrowserWithTestWindowTest::SetUp();
91 AddTab(browser(), GURL("chrome://blank"));
92 SearchTabHelper::CreateForWebContents(web_contents());
93
94 TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
95 profile(),
96 &TemplateURLServiceFactory::BuildInstanceFor);
97 TemplateURLService* template_url_service =
98 TemplateURLServiceFactory::GetForProfile(profile());
99 ui_test_utils::WaitForTemplateURLServiceToLoad(template_url_service);
100
101 TemplateURLData data;
102 data.SetURL("http://foo.com/url?bar={searchTerms}");
103 data.instant_url = "http://foo.com/instant?"
104 "{google:omniboxStartMarginParameter}foo=foo#foo=foo&espv";
105 data.new_tab_url = "https://foo.com/newtab?espv";
106 data.alternate_urls.push_back("http://foo.com/alt#quux={searchTerms}");
107 data.search_terms_replacement_key = "espv";
108
109 TemplateURL* template_url = new TemplateURL(profile(), data);
110 // Takes ownership of |template_url|.
111 template_url_service->Add(template_url);
112 template_url_service->SetDefaultSearchProvider(template_url);
113 process()->sink().ClearMessages();
114 }
115
web_contents()116 content::WebContents* web_contents() {
117 return browser()->tab_strip_model()->GetActiveWebContents();
118 }
119
process()120 content::MockRenderProcessHost* process() {
121 return static_cast<content::MockRenderProcessHost*>(
122 web_contents()->GetRenderViewHost()->GetProcess());
123 }
124
GetSearchTabHelper(content::WebContents * web_contents)125 SearchTabHelper* GetSearchTabHelper(
126 content::WebContents* web_contents) {
127 EXPECT_NE(static_cast<content::WebContents*>(NULL), web_contents);
128 return SearchTabHelper::FromWebContents(web_contents);
129 }
130
SetupMockDelegateAndPolicy()131 void SetupMockDelegateAndPolicy() {
132 content::WebContents* contents = web_contents();
133 ASSERT_NE(static_cast<content::WebContents*>(NULL), contents);
134 SearchTabHelper* search_tab_helper = GetSearchTabHelper(contents);
135 ASSERT_NE(static_cast<SearchTabHelper*>(NULL), search_tab_helper);
136 search_tab_helper->ipc_router().set_delegate(mock_delegate());
137 search_tab_helper->ipc_router().set_policy(
138 make_scoped_ptr(new MockSearchIPCRouterPolicy)
139 .PassAs<SearchIPCRouter::Policy>());
140 }
141
MessageWasSent(uint32 id)142 bool MessageWasSent(uint32 id) {
143 return process()->sink().GetFirstMessageMatching(id) != NULL;
144 }
145
VerifyDisplayInstantResultsMsg(bool expected_param_value)146 void VerifyDisplayInstantResultsMsg(bool expected_param_value) {
147 SetupMockDelegateAndPolicy();
148 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
149 EXPECT_CALL(*policy, ShouldSendSetDisplayInstantResults()).Times(1)
150 .WillOnce(testing::Return(true));
151
152 GetSearchIPCRouter().SetDisplayInstantResults();
153 const IPC::Message* message = process()->sink().GetFirstMessageMatching(
154 ChromeViewMsg_SearchBoxSetDisplayInstantResults::ID);
155 EXPECT_NE(static_cast<const IPC::Message*>(NULL), message);
156 Tuple1<bool> display_instant_results_param;
157 ChromeViewMsg_SearchBoxSetDisplayInstantResults::Read(
158 message, &display_instant_results_param);
159 EXPECT_EQ(expected_param_value, display_instant_results_param.a);
160 }
161
mock_delegate()162 MockSearchIPCRouterDelegate* mock_delegate() { return &delegate_; }
163
GetSearchIPCRouterPolicy()164 MockSearchIPCRouterPolicy* GetSearchIPCRouterPolicy() {
165 content::WebContents* contents = web_contents();
166 EXPECT_NE(static_cast<content::WebContents*>(NULL), contents);
167 SearchTabHelper* search_tab_helper = GetSearchTabHelper(contents);
168 EXPECT_NE(static_cast<SearchTabHelper*>(NULL), search_tab_helper);
169 return static_cast<MockSearchIPCRouterPolicy*>(
170 search_tab_helper->ipc_router().policy());
171 }
172
GetSearchIPCRouter()173 SearchIPCRouter& GetSearchIPCRouter() {
174 return GetSearchTabHelper(web_contents())->ipc_router();
175 }
176
OnMessageReceived(const IPC::Message & message)177 void OnMessageReceived(const IPC::Message& message) {
178 GetSearchIPCRouter().OnMessageReceived(message);
179 }
180
IsActiveTab(content::WebContents * contents)181 bool IsActiveTab(content::WebContents* contents) {
182 return GetSearchTabHelper(contents)->ipc_router().is_active_tab_;
183 }
184
185 private:
186 MockSearchIPCRouterDelegate delegate_;
187 base::FieldTrialList field_trial_list_;
188 };
189
TEST_F(SearchIPCRouterTest,ProcessVoiceSearchSupportMsg)190 TEST_F(SearchIPCRouterTest, ProcessVoiceSearchSupportMsg) {
191 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
192 SetupMockDelegateAndPolicy();
193 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
194 EXPECT_CALL(*mock_delegate(), OnSetVoiceSearchSupport(true)).Times(1);
195 EXPECT_CALL(*(policy), ShouldProcessSetVoiceSearchSupport()).Times(1)
196 .WillOnce(testing::Return(true));
197
198 content::WebContents* contents = web_contents();
199 scoped_ptr<IPC::Message> message(
200 new ChromeViewHostMsg_SetVoiceSearchSupported(
201 contents->GetRoutingID(),
202 contents->GetController().GetVisibleEntry()->GetPageID(),
203 true));
204 OnMessageReceived(*message);
205 }
206
TEST_F(SearchIPCRouterTest,IgnoreVoiceSearchSupportMsg)207 TEST_F(SearchIPCRouterTest, IgnoreVoiceSearchSupportMsg) {
208 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
209 EXPECT_CALL(*mock_delegate(), OnSetVoiceSearchSupport(true)).Times(0);
210 SetupMockDelegateAndPolicy();
211 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
212 EXPECT_CALL(*policy, ShouldProcessSetVoiceSearchSupport()).Times(1)
213 .WillOnce(testing::Return(false));
214
215 content::WebContents* contents = web_contents();
216 scoped_ptr<IPC::Message> message(
217 new ChromeViewHostMsg_SetVoiceSearchSupported(
218 contents->GetRoutingID(),
219 contents->GetController().GetVisibleEntry()->GetPageID(),
220 true));
221 OnMessageReceived(*message);
222 }
223
TEST_F(SearchIPCRouterTest,ProcessFocusOmniboxMsg)224 TEST_F(SearchIPCRouterTest, ProcessFocusOmniboxMsg) {
225 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
226 SetupMockDelegateAndPolicy();
227 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
228 EXPECT_CALL(*mock_delegate(), FocusOmnibox(OMNIBOX_FOCUS_VISIBLE)).Times(1);
229
230 content::WebContents* contents = web_contents();
231 bool is_active_tab = IsActiveTab(contents);
232 EXPECT_TRUE(is_active_tab);
233 EXPECT_CALL(*policy, ShouldProcessFocusOmnibox(is_active_tab)).Times(1)
234 .WillOnce(testing::Return(true));
235
236 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_FocusOmnibox(
237 contents->GetRoutingID(),
238 contents->GetController().GetVisibleEntry()->GetPageID(),
239 OMNIBOX_FOCUS_VISIBLE));
240 OnMessageReceived(*message);
241 }
242
TEST_F(SearchIPCRouterTest,IgnoreFocusOmniboxMsg)243 TEST_F(SearchIPCRouterTest, IgnoreFocusOmniboxMsg) {
244 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
245 SetupMockDelegateAndPolicy();
246 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
247 EXPECT_CALL(*mock_delegate(), FocusOmnibox(OMNIBOX_FOCUS_VISIBLE)).Times(0);
248
249 content::WebContents* contents = web_contents();
250 bool is_active_tab = IsActiveTab(contents);
251 EXPECT_TRUE(is_active_tab);
252 EXPECT_CALL(*policy, ShouldProcessFocusOmnibox(is_active_tab)).Times(1)
253 .WillOnce(testing::Return(false));
254
255 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_FocusOmnibox(
256 contents->GetRoutingID(),
257 contents->GetController().GetVisibleEntry()->GetPageID(),
258 OMNIBOX_FOCUS_VISIBLE));
259 OnMessageReceived(*message);
260 }
261
TEST_F(SearchIPCRouterTest,HandleTabChangedEvents)262 TEST_F(SearchIPCRouterTest, HandleTabChangedEvents) {
263 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
264 content::WebContents* contents = web_contents();
265 EXPECT_EQ(0, browser()->tab_strip_model()->GetIndexOfWebContents(contents));
266 EXPECT_TRUE(IsActiveTab(contents));
267
268 // Add a new tab to deactivate the current tab.
269 AddTab(browser(), GURL(content::kAboutBlankURL));
270 EXPECT_EQ(2, browser()->tab_strip_model()->count());
271 EXPECT_EQ(1, browser()->tab_strip_model()->GetIndexOfWebContents(contents));
272 EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
273 EXPECT_FALSE(IsActiveTab(contents));
274
275 // Activate the first tab.
276 browser()->tab_strip_model()->ActivateTabAt(1, false);
277 EXPECT_EQ(browser()->tab_strip_model()->active_index(),
278 browser()->tab_strip_model()->GetIndexOfWebContents(contents));
279 EXPECT_TRUE(IsActiveTab(contents));
280 }
281
TEST_F(SearchIPCRouterTest,ProcessNavigateToURLMsg)282 TEST_F(SearchIPCRouterTest, ProcessNavigateToURLMsg) {
283 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
284 SetupMockDelegateAndPolicy();
285 GURL destination_url("www.foo.com");
286 EXPECT_CALL(*mock_delegate(), NavigateToURL(destination_url, CURRENT_TAB,
287 true)).Times(1);
288 content::WebContents* contents = web_contents();
289 bool is_active_tab = IsActiveTab(contents);
290 EXPECT_TRUE(is_active_tab);
291
292 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
293 EXPECT_CALL(*policy, ShouldProcessNavigateToURL(is_active_tab)).Times(1)
294 .WillOnce(testing::Return(true));
295
296 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_SearchBoxNavigate(
297 contents->GetRoutingID(),
298 contents->GetController().GetVisibleEntry()->GetPageID(),
299 destination_url, CURRENT_TAB, true));
300 OnMessageReceived(*message);
301 }
302
TEST_F(SearchIPCRouterTest,IgnoreNavigateToURLMsg)303 TEST_F(SearchIPCRouterTest, IgnoreNavigateToURLMsg) {
304 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
305 SetupMockDelegateAndPolicy();
306 GURL destination_url("www.foo.com");
307 EXPECT_CALL(*mock_delegate(), NavigateToURL(destination_url, CURRENT_TAB,
308 true)).Times(0);
309 content::WebContents* contents = web_contents();
310 bool is_active_tab = IsActiveTab(contents);
311 EXPECT_TRUE(is_active_tab);
312
313 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
314 EXPECT_CALL(*policy, ShouldProcessNavigateToURL(is_active_tab)).Times(1)
315 .WillOnce(testing::Return(false));
316
317 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_SearchBoxNavigate(
318 contents->GetRoutingID(),
319 contents->GetController().GetVisibleEntry()->GetPageID(),
320 destination_url, CURRENT_TAB, true));
321 OnMessageReceived(*message);
322 }
323
TEST_F(SearchIPCRouterTest,ProcessLogEventMsg)324 TEST_F(SearchIPCRouterTest, ProcessLogEventMsg) {
325 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
326 SetupMockDelegateAndPolicy();
327 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
328 EXPECT_CALL(*mock_delegate(), OnLogEvent(NTP_MOUSEOVER)).Times(1);
329 EXPECT_CALL(*policy, ShouldProcessLogEvent()).Times(1)
330 .WillOnce(testing::Return(true));
331
332 content::WebContents* contents = web_contents();
333 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_LogEvent(
334 contents->GetRoutingID(),
335 contents->GetController().GetVisibleEntry()->GetPageID(),
336 NTP_MOUSEOVER));
337 OnMessageReceived(*message);
338 }
339
TEST_F(SearchIPCRouterTest,IgnoreLogEventMsg)340 TEST_F(SearchIPCRouterTest, IgnoreLogEventMsg) {
341 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
342 SetupMockDelegateAndPolicy();
343 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
344 EXPECT_CALL(*mock_delegate(), OnLogEvent(NTP_MOUSEOVER)).Times(0);
345 EXPECT_CALL(*policy, ShouldProcessLogEvent()).Times(1)
346 .WillOnce(testing::Return(false));
347
348 content::WebContents* contents = web_contents();
349 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_LogEvent(
350 contents->GetRoutingID(),
351 contents->GetController().GetVisibleEntry()->GetPageID(),
352 NTP_MOUSEOVER));
353 OnMessageReceived(*message);
354 }
355
TEST_F(SearchIPCRouterTest,ProcessLogImpressionMsg)356 TEST_F(SearchIPCRouterTest, ProcessLogImpressionMsg) {
357 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
358 SetupMockDelegateAndPolicy();
359 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
360 EXPECT_CALL(*mock_delegate(),
361 OnLogImpression(3, ASCIIToUTF16("Server"))).Times(1);
362 EXPECT_CALL(*policy, ShouldProcessLogEvent()).Times(1)
363 .WillOnce(testing::Return(true));
364
365 content::WebContents* contents = web_contents();
366 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_LogImpression(
367 contents->GetRoutingID(),
368 contents->GetController().GetVisibleEntry()->GetPageID(),
369 3,
370 ASCIIToUTF16("Server")));
371 OnMessageReceived(*message);
372 }
373
TEST_F(SearchIPCRouterTest,ProcessChromeIdentityCheckMsg)374 TEST_F(SearchIPCRouterTest, ProcessChromeIdentityCheckMsg) {
375 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
376 SetupMockDelegateAndPolicy();
377 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
378 const base::string16 test_identity = ASCIIToUTF16("foo@bar.com");
379 EXPECT_CALL(*mock_delegate(), OnChromeIdentityCheck(test_identity)).Times(1);
380 EXPECT_CALL(*policy, ShouldProcessChromeIdentityCheck()).Times(1)
381 .WillOnce(testing::Return(true));
382
383 content::WebContents* contents = web_contents();
384 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_ChromeIdentityCheck(
385 contents->GetRoutingID(),
386 contents->GetController().GetVisibleEntry()->GetPageID(),
387 test_identity));
388 OnMessageReceived(*message);
389 }
390
TEST_F(SearchIPCRouterTest,IgnoreChromeIdentityCheckMsg)391 TEST_F(SearchIPCRouterTest, IgnoreChromeIdentityCheckMsg) {
392 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
393 SetupMockDelegateAndPolicy();
394 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
395
396 const base::string16 test_identity = ASCIIToUTF16("foo@bar.com");
397 EXPECT_CALL(*mock_delegate(), OnChromeIdentityCheck(test_identity)).Times(0);
398 EXPECT_CALL(*policy, ShouldProcessChromeIdentityCheck()).Times(1)
399 .WillOnce(testing::Return(false));
400
401 content::WebContents* contents = web_contents();
402 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_ChromeIdentityCheck(
403 contents->GetRoutingID(),
404 contents->GetController().GetVisibleEntry()->GetPageID(),
405 test_identity));
406 OnMessageReceived(*message);
407 }
408
TEST_F(SearchIPCRouterTest,ProcessDeleteMostVisitedItemMsg)409 TEST_F(SearchIPCRouterTest, ProcessDeleteMostVisitedItemMsg) {
410 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
411 SetupMockDelegateAndPolicy();
412 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
413 GURL item_url("www.foo.com");
414 EXPECT_CALL(*mock_delegate(), OnDeleteMostVisitedItem(item_url)).Times(1);
415 EXPECT_CALL(*policy, ShouldProcessDeleteMostVisitedItem()).Times(1)
416 .WillOnce(testing::Return(true));
417
418 content::WebContents* contents = web_contents();
419 scoped_ptr<IPC::Message> message(
420 new ChromeViewHostMsg_SearchBoxDeleteMostVisitedItem(
421 contents->GetRoutingID(),
422 contents->GetController().GetVisibleEntry()->GetPageID(),
423 item_url));
424 OnMessageReceived(*message);
425 }
426
TEST_F(SearchIPCRouterTest,IgnoreDeleteMostVisitedItemMsg)427 TEST_F(SearchIPCRouterTest, IgnoreDeleteMostVisitedItemMsg) {
428 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
429 SetupMockDelegateAndPolicy();
430 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
431 GURL item_url("www.foo.com");
432 EXPECT_CALL(*mock_delegate(), OnDeleteMostVisitedItem(item_url)).Times(0);
433 EXPECT_CALL(*policy, ShouldProcessDeleteMostVisitedItem()).Times(1)
434 .WillOnce(testing::Return(false));
435
436 content::WebContents* contents = web_contents();
437 scoped_ptr<IPC::Message> message(
438 new ChromeViewHostMsg_SearchBoxDeleteMostVisitedItem(
439 contents->GetRoutingID(),
440 contents->GetController().GetVisibleEntry()->GetPageID(),
441 item_url));
442 OnMessageReceived(*message);
443 }
444
TEST_F(SearchIPCRouterTest,ProcessUndoMostVisitedDeletionMsg)445 TEST_F(SearchIPCRouterTest, ProcessUndoMostVisitedDeletionMsg) {
446 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
447 SetupMockDelegateAndPolicy();
448 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
449 GURL item_url("www.foo.com");
450 EXPECT_CALL(*mock_delegate(), OnUndoMostVisitedDeletion(item_url)).Times(1);
451 EXPECT_CALL(*policy, ShouldProcessUndoMostVisitedDeletion()).Times(1)
452 .WillOnce(testing::Return(true));
453
454 content::WebContents* contents = web_contents();
455 scoped_ptr<IPC::Message> message(
456 new ChromeViewHostMsg_SearchBoxUndoMostVisitedDeletion(
457 contents->GetRoutingID(),
458 contents->GetController().GetVisibleEntry()->GetPageID(),
459 item_url));
460 OnMessageReceived(*message);
461 }
462
TEST_F(SearchIPCRouterTest,IgnoreUndoMostVisitedDeletionMsg)463 TEST_F(SearchIPCRouterTest, IgnoreUndoMostVisitedDeletionMsg) {
464 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
465 SetupMockDelegateAndPolicy();
466 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
467 GURL item_url("www.foo.com");
468 EXPECT_CALL(*mock_delegate(), OnUndoMostVisitedDeletion(item_url)).Times(0);
469 EXPECT_CALL(*policy, ShouldProcessUndoMostVisitedDeletion()).Times(1)
470 .WillOnce(testing::Return(false));
471
472 content::WebContents* contents = web_contents();
473 scoped_ptr<IPC::Message> message(
474 new ChromeViewHostMsg_SearchBoxUndoMostVisitedDeletion(
475 contents->GetRoutingID(),
476 contents->GetController().GetVisibleEntry()->GetPageID(),
477 item_url));
478 OnMessageReceived(*message);
479 }
480
TEST_F(SearchIPCRouterTest,ProcessUndoAllMostVisitedDeletionsMsg)481 TEST_F(SearchIPCRouterTest, ProcessUndoAllMostVisitedDeletionsMsg) {
482 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
483 SetupMockDelegateAndPolicy();
484 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
485 EXPECT_CALL(*mock_delegate(), OnUndoAllMostVisitedDeletions()).Times(1);
486 EXPECT_CALL(*policy, ShouldProcessUndoAllMostVisitedDeletions()).Times(1)
487 .WillOnce(testing::Return(true));
488
489 content::WebContents* contents = web_contents();
490 scoped_ptr<IPC::Message> message(
491 new ChromeViewHostMsg_SearchBoxUndoAllMostVisitedDeletions(
492 contents->GetRoutingID(),
493 contents->GetController().GetVisibleEntry()->GetPageID()));
494 OnMessageReceived(*message);
495 }
496
TEST_F(SearchIPCRouterTest,IgnoreUndoAllMostVisitedDeletionsMsg)497 TEST_F(SearchIPCRouterTest, IgnoreUndoAllMostVisitedDeletionsMsg) {
498 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
499 SetupMockDelegateAndPolicy();
500 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
501 EXPECT_CALL(*mock_delegate(), OnUndoAllMostVisitedDeletions()).Times(0);
502 EXPECT_CALL(*policy, ShouldProcessUndoAllMostVisitedDeletions()).Times(1)
503 .WillOnce(testing::Return(false));
504
505 content::WebContents* contents = web_contents();
506 scoped_ptr<IPC::Message> message(
507 new ChromeViewHostMsg_SearchBoxUndoAllMostVisitedDeletions(
508 contents->GetRoutingID(),
509 contents->GetController().GetVisibleEntry()->GetPageID()));
510 OnMessageReceived(*message);
511 }
512
TEST_F(SearchIPCRouterTest,IgnoreMessageIfThePageIsNotActive)513 TEST_F(SearchIPCRouterTest, IgnoreMessageIfThePageIsNotActive) {
514 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
515 SetupMockDelegateAndPolicy();
516 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
517
518 content::WebContents* contents = web_contents();
519 bool is_active_tab = IsActiveTab(contents);
520 int invalid_page_id = 1000;
521 GURL item_url("www.foo.com");
522 EXPECT_CALL(*mock_delegate(), NavigateToURL(item_url, CURRENT_TAB,
523 true)).Times(0);
524 EXPECT_CALL(*policy, ShouldProcessNavigateToURL(is_active_tab)).Times(0);
525
526 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_SearchBoxNavigate(
527 contents->GetRoutingID(), invalid_page_id, item_url, CURRENT_TAB,
528 true));
529 OnMessageReceived(*message);
530
531 EXPECT_CALL(*mock_delegate(), OnDeleteMostVisitedItem(item_url)).Times(0);
532 EXPECT_CALL(*policy, ShouldProcessDeleteMostVisitedItem()).Times(0);
533 message.reset(new ChromeViewHostMsg_SearchBoxDeleteMostVisitedItem(
534 contents->GetRoutingID(), invalid_page_id, item_url));
535 OnMessageReceived(*message);
536
537 EXPECT_CALL(*mock_delegate(), OnUndoMostVisitedDeletion(item_url)).Times(0);
538 EXPECT_CALL(*policy, ShouldProcessUndoMostVisitedDeletion()).Times(0);
539 message.reset(new ChromeViewHostMsg_SearchBoxUndoMostVisitedDeletion(
540 contents->GetRoutingID(), invalid_page_id, item_url));
541 OnMessageReceived(*message);
542
543 EXPECT_CALL(*mock_delegate(), OnUndoAllMostVisitedDeletions()).Times(0);
544 EXPECT_CALL(*policy, ShouldProcessUndoAllMostVisitedDeletions()).Times(0);
545 message.reset(new ChromeViewHostMsg_SearchBoxUndoAllMostVisitedDeletions(
546 contents->GetRoutingID(), invalid_page_id));
547 OnMessageReceived(*message);
548
549 EXPECT_CALL(*mock_delegate(), FocusOmnibox(OMNIBOX_FOCUS_VISIBLE)).Times(0);
550 EXPECT_CALL(*policy, ShouldProcessFocusOmnibox(is_active_tab)).Times(0);
551 message.reset(new ChromeViewHostMsg_FocusOmnibox(
552 contents->GetRoutingID(), invalid_page_id, OMNIBOX_FOCUS_VISIBLE));
553 OnMessageReceived(*message);
554
555 EXPECT_CALL(*mock_delegate(), OnLogEvent(NTP_MOUSEOVER)).Times(0);
556 EXPECT_CALL(*policy, ShouldProcessLogEvent()).Times(0);
557 message.reset(new ChromeViewHostMsg_LogEvent(contents->GetRoutingID(),
558 invalid_page_id, NTP_MOUSEOVER));
559 OnMessageReceived(*message);
560
561 base::string16 text;
562 EXPECT_CALL(*mock_delegate(), PasteIntoOmnibox(text)).Times(0);
563 EXPECT_CALL(*policy, ShouldProcessPasteIntoOmnibox(is_active_tab)).Times(0);
564 message.reset(new ChromeViewHostMsg_PasteAndOpenDropdown(
565 contents->GetRoutingID(), invalid_page_id, text));
566 OnMessageReceived(*message);
567 }
568
TEST_F(SearchIPCRouterTest,ProcessPasteAndOpenDropdownMsg)569 TEST_F(SearchIPCRouterTest, ProcessPasteAndOpenDropdownMsg) {
570 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
571 SetupMockDelegateAndPolicy();
572 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
573
574 content::WebContents* contents = web_contents();
575 bool is_active_tab = IsActiveTab(contents);
576 EXPECT_TRUE(is_active_tab);
577
578 base::string16 text;
579 EXPECT_CALL(*mock_delegate(), PasteIntoOmnibox(text)).Times(1);
580 EXPECT_CALL(*policy, ShouldProcessPasteIntoOmnibox(is_active_tab)).Times(1)
581 .WillOnce(testing::Return(true));
582 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_PasteAndOpenDropdown(
583 contents->GetRoutingID(),
584 contents->GetController().GetVisibleEntry()->GetPageID(), text));
585 OnMessageReceived(*message);
586 }
587
TEST_F(SearchIPCRouterTest,IgnorePasteAndOpenDropdownMsg)588 TEST_F(SearchIPCRouterTest, IgnorePasteAndOpenDropdownMsg) {
589 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
590 SetupMockDelegateAndPolicy();
591 base::string16 text;
592 EXPECT_CALL(*mock_delegate(), PasteIntoOmnibox(text)).Times(0);
593
594 content::WebContents* contents = web_contents();
595 bool is_active_tab = IsActiveTab(contents);
596 EXPECT_TRUE(is_active_tab);
597
598 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
599 EXPECT_CALL(*policy, ShouldProcessPasteIntoOmnibox(is_active_tab)).Times(1)
600 .WillOnce(testing::Return(false));
601
602 scoped_ptr<IPC::Message> message(new ChromeViewHostMsg_PasteAndOpenDropdown(
603 contents->GetRoutingID(),
604 contents->GetController().GetVisibleEntry()->GetPageID(), text));
605 OnMessageReceived(*message);
606 }
607
TEST_F(SearchIPCRouterTest,SendSetPromoInformationMsg)608 TEST_F(SearchIPCRouterTest, SendSetPromoInformationMsg) {
609 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
610 SetupMockDelegateAndPolicy();
611 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
612 EXPECT_CALL(*policy, ShouldSendSetPromoInformation()).Times(1)
613 .WillOnce(testing::Return(true));
614
615 GetSearchIPCRouter().SetPromoInformation(true);
616 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxPromoInformation::ID));
617 }
618
TEST_F(SearchIPCRouterTest,DoNotSendSetPromoInformationMsg)619 TEST_F(SearchIPCRouterTest, DoNotSendSetPromoInformationMsg) {
620 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
621 SetupMockDelegateAndPolicy();
622 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
623 EXPECT_CALL(*policy, ShouldSendSetPromoInformation()).Times(1)
624 .WillOnce(testing::Return(false));
625
626 GetSearchIPCRouter().SetPromoInformation(false);
627 EXPECT_FALSE(MessageWasSent(ChromeViewMsg_SearchBoxPromoInformation::ID));
628 }
629
TEST_F(SearchIPCRouterTest,SendSetDisplayInstantResultsMsg_EnableInstantOnResultsPage)630 TEST_F(SearchIPCRouterTest,
631 SendSetDisplayInstantResultsMsg_EnableInstantOnResultsPage) {
632 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
633 "EmbeddedSearch",
634 "Group1 espv:42 query_extraction:1 prefetch_results_srp:1"));
635 NavigateAndCommitActiveTab(GURL("https://foo.com/url?espv&bar=abc"));
636
637 // Make sure ChromeViewMsg_SearchBoxSetDisplayInstantResults message param is
638 // set to true if the underlying page is a results page and
639 // "prefetch_results_srp" flag is enabled via field trials.
640 VerifyDisplayInstantResultsMsg(true);
641 }
642
TEST_F(SearchIPCRouterTest,SendSetDisplayInstantResultsMsg_DisableInstantOnResultsPage)643 TEST_F(SearchIPCRouterTest,
644 SendSetDisplayInstantResultsMsg_DisableInstantOnResultsPage) {
645 // |prefetch_results_srp" flag is disabled via field trials.
646 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
647 "EmbeddedSearch", "Group1 espv:42 prefetch_results_srp:0"));
648 NavigateAndCommitActiveTab(GURL("https://foo.com/url?espv&bar=abc"));
649
650 // Make sure ChromeViewMsg_SearchBoxSetDisplayInstantResults message param is
651 // set to false.
652 VerifyDisplayInstantResultsMsg(false);
653 }
654
TEST_F(SearchIPCRouterTest,SendSetDisplayInstantResultsMsg_DisableInstantOutsideResultsPage)655 TEST_F(SearchIPCRouterTest,
656 SendSetDisplayInstantResultsMsg_DisableInstantOutsideResultsPage) {
657 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
658 "EmbeddedSearch", "Group1 espv:42 prefetch_results_srp:1"));
659 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
660
661 // Make sure ChromeViewMsg_SearchBoxSetDisplayInstantResults param is set to
662 // false if the underlying page is not a search results page.
663 VerifyDisplayInstantResultsMsg(false);
664 }
665
TEST_F(SearchIPCRouterTest,SendSetDisplayInstantResultsMsg_InstantSearchEnabled)666 TEST_F(SearchIPCRouterTest,
667 SendSetDisplayInstantResultsMsg_InstantSearchEnabled) {
668 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
669 "EmbeddedSearch",
670 "Group1 espv:42 prefetch_results:1 use_cacheable_ntp:1"));
671 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
672
673 // If the "prefetch_results" flag is enabled via field trials, then
674 // ChromeViewMsg_SearchBoxSetDisplayInstantResults message param is set to
675 // true irrespective of the underlying page.
676 VerifyDisplayInstantResultsMsg(true);
677 }
678
TEST_F(SearchIPCRouterTest,SendSetDisplayInstantResultsMsg_InstantSearchDisabled)679 TEST_F(SearchIPCRouterTest,
680 SendSetDisplayInstantResultsMsg_InstantSearchDisabled) {
681 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
682 "EmbeddedSearch",
683 "Group1 espv:42 use_cacheable_ntp:1 prefetch_results:0"));
684 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
685
686 // Make sure ChromeViewMsg_SearchBoxSetDisplayInstantResults param is set to
687 // false if the "prefetch_results" flag is disabled via field trials.
688 VerifyDisplayInstantResultsMsg(false);
689 }
690
TEST_F(SearchIPCRouterTest,DoNotSendSetDisplayInstantResultsMsg)691 TEST_F(SearchIPCRouterTest, DoNotSendSetDisplayInstantResultsMsg) {
692 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
693 SetupMockDelegateAndPolicy();
694 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
695 EXPECT_CALL(*policy, ShouldSendSetDisplayInstantResults()).Times(1)
696 .WillOnce(testing::Return(false));
697
698 process()->sink().ClearMessages();
699 GetSearchIPCRouter().SetDisplayInstantResults();
700 EXPECT_FALSE(MessageWasSent(
701 ChromeViewMsg_SearchBoxSetDisplayInstantResults::ID));
702 }
703
TEST_F(SearchIPCRouterTest,SendSetSuggestionToPrefetch)704 TEST_F(SearchIPCRouterTest, SendSetSuggestionToPrefetch) {
705 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
706 SetupMockDelegateAndPolicy();
707 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
708 EXPECT_CALL(*policy, ShouldSendSetSuggestionToPrefetch()).Times(1)
709 .WillOnce(testing::Return(true));
710
711 process()->sink().ClearMessages();
712 content::WebContents* contents = web_contents();
713 GetSearchTabHelper(contents)->SetSuggestionToPrefetch(InstantSuggestion());
714 EXPECT_TRUE(MessageWasSent(
715 ChromeViewMsg_SearchBoxSetSuggestionToPrefetch::ID));
716 }
717
TEST_F(SearchIPCRouterTest,DoNotSendSetSuggestionToPrefetch)718 TEST_F(SearchIPCRouterTest, DoNotSendSetSuggestionToPrefetch) {
719 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
720 SetupMockDelegateAndPolicy();
721 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
722 EXPECT_CALL(*policy, ShouldSendSetSuggestionToPrefetch()).Times(1)
723 .WillOnce(testing::Return(false));
724
725 process()->sink().ClearMessages();
726 content::WebContents* contents = web_contents();
727 GetSearchTabHelper(contents)->SetSuggestionToPrefetch(InstantSuggestion());
728 EXPECT_FALSE(MessageWasSent(
729 ChromeViewMsg_SearchBoxSetSuggestionToPrefetch::ID));
730 }
731
TEST_F(SearchIPCRouterTest,SendMostVisitedItemsMsg)732 TEST_F(SearchIPCRouterTest, SendMostVisitedItemsMsg) {
733 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
734 SetupMockDelegateAndPolicy();
735 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
736 EXPECT_CALL(*policy, ShouldSendMostVisitedItems()).Times(1)
737 .WillOnce(testing::Return(true));
738
739 process()->sink().ClearMessages();
740 GetSearchIPCRouter().SendMostVisitedItems(
741 std::vector<InstantMostVisitedItem>());
742 EXPECT_TRUE(MessageWasSent(
743 ChromeViewMsg_SearchBoxMostVisitedItemsChanged::ID));
744 }
745
TEST_F(SearchIPCRouterTest,DoNotSendMostVisitedItemsMsg)746 TEST_F(SearchIPCRouterTest, DoNotSendMostVisitedItemsMsg) {
747 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
748 SetupMockDelegateAndPolicy();
749 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
750 EXPECT_CALL(*policy, ShouldSendMostVisitedItems()).Times(1)
751 .WillOnce(testing::Return(false));
752
753 process()->sink().ClearMessages();
754 GetSearchIPCRouter().SendMostVisitedItems(
755 std::vector<InstantMostVisitedItem>());
756 EXPECT_FALSE(MessageWasSent(
757 ChromeViewMsg_SearchBoxMostVisitedItemsChanged::ID));
758 }
759
TEST_F(SearchIPCRouterTest,SendThemeBackgroundInfoMsg)760 TEST_F(SearchIPCRouterTest, SendThemeBackgroundInfoMsg) {
761 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
762 SetupMockDelegateAndPolicy();
763 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
764 EXPECT_CALL(*policy, ShouldSendThemeBackgroundInfo()).Times(1)
765 .WillOnce(testing::Return(true));
766
767 process()->sink().ClearMessages();
768 GetSearchIPCRouter().SendThemeBackgroundInfo(ThemeBackgroundInfo());
769 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxThemeChanged::ID));
770 }
771
TEST_F(SearchIPCRouterTest,DoNotSendThemeBackgroundInfoMsg)772 TEST_F(SearchIPCRouterTest, DoNotSendThemeBackgroundInfoMsg) {
773 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
774 SetupMockDelegateAndPolicy();
775 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
776 EXPECT_CALL(*policy, ShouldSendThemeBackgroundInfo()).Times(1)
777 .WillOnce(testing::Return(false));
778
779 process()->sink().ClearMessages();
780 GetSearchIPCRouter().SendThemeBackgroundInfo(ThemeBackgroundInfo());
781 EXPECT_FALSE(MessageWasSent(ChromeViewMsg_SearchBoxThemeChanged::ID));
782 }
783
TEST_F(SearchIPCRouterTest,SendSubmitMsg)784 TEST_F(SearchIPCRouterTest, SendSubmitMsg) {
785 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
786 SetupMockDelegateAndPolicy();
787 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
788 EXPECT_CALL(*policy, ShouldSubmitQuery()).Times(1)
789 .WillOnce(testing::Return(true));
790
791 process()->sink().ClearMessages();
792 GetSearchIPCRouter().Submit(base::string16());
793 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxSubmit::ID));
794 }
795
TEST_F(SearchIPCRouterTest,DoNotSendSubmitMsg)796 TEST_F(SearchIPCRouterTest, DoNotSendSubmitMsg) {
797 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl));
798 SetupMockDelegateAndPolicy();
799 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
800 EXPECT_CALL(*policy, ShouldSubmitQuery()).Times(1)
801 .WillOnce(testing::Return(false));
802
803 process()->sink().ClearMessages();
804 GetSearchIPCRouter().Submit(base::string16());
805 EXPECT_FALSE(MessageWasSent(ChromeViewMsg_SearchBoxSubmit::ID));
806 }
807
TEST_F(SearchIPCRouterTest,SendToggleVoiceSearch)808 TEST_F(SearchIPCRouterTest, SendToggleVoiceSearch) {
809 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
810 SetupMockDelegateAndPolicy();
811 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
812 EXPECT_CALL(*policy, ShouldSendToggleVoiceSearch()).Times(1)
813 .WillOnce(testing::Return(true));
814
815 process()->sink().ClearMessages();
816 GetSearchIPCRouter().ToggleVoiceSearch();
817 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxToggleVoiceSearch::ID));
818 }
819
TEST_F(SearchIPCRouterTest,DoNotSendToggleVoiceSearch)820 TEST_F(SearchIPCRouterTest, DoNotSendToggleVoiceSearch) {
821 NavigateAndCommitActiveTab(GURL("chrome-search://foo/bar"));
822 SetupMockDelegateAndPolicy();
823 MockSearchIPCRouterPolicy* policy = GetSearchIPCRouterPolicy();
824 EXPECT_CALL(*policy, ShouldSendToggleVoiceSearch()).Times(1)
825 .WillOnce(testing::Return(false));
826
827 process()->sink().ClearMessages();
828 GetSearchIPCRouter().ToggleVoiceSearch();
829 EXPECT_FALSE(MessageWasSent(ChromeViewMsg_SearchBoxToggleVoiceSearch::ID));
830 }
831