OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 "base/strings/string_util.h" | |
6 #include "base/strings/utf_string_conversions.h" | |
7 #include "chrome/browser/chrome_notification_types.h" | |
8 #include "chrome/browser/ui/browser.h" | |
9 #include "chrome/browser/ui/browser_commands.h" | |
10 #include "chrome/browser/ui/browser_tabstrip.h" | |
11 #include "chrome/browser/ui/find_bar/find_bar_controller.h" | |
12 #include "chrome/browser/ui/find_bar/find_notification_details.h" | |
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
14 #include "chrome/browser/ui/view_ids.h" | |
15 #include "chrome/browser/ui/views/find_bar_host.h" | |
16 #include "chrome/browser/ui/views/frame/browser_view.h" | |
17 #include "chrome/test/base/in_process_browser_test.h" | |
18 #include "chrome/test/base/interactive_test_utils.h" | |
19 #include "chrome/test/base/ui_test_utils.h" | |
20 #include "content/public/browser/notification_service.h" | |
21 #include "content/public/browser/web_contents.h" | |
22 #include "net/test/spawned_test_server/spawned_test_server.h" | |
23 #include "ui/base/clipboard/clipboard.h" | |
24 #include "ui/events/keycodes/keyboard_codes.h" | |
25 #include "ui/views/focus/focus_manager.h" | |
26 #include "ui/views/view.h" | |
27 | |
28 using base::ASCIIToUTF16; | |
29 using content::WebContents; | |
30 | |
31 namespace { | |
32 | |
33 static const char kSimplePage[] = "files/find_in_page/simple.html"; | |
34 | |
35 class FindInPageTest : public InProcessBrowserTest { | |
36 public: | |
37 FindInPageTest() { | |
38 FindBarHost::disable_animations_during_testing_ = true; | |
39 } | |
40 | |
41 base::string16 GetFindBarText() { | |
42 FindBar* find_bar = browser()->GetFindBarController()->find_bar(); | |
43 return find_bar->GetFindText(); | |
44 } | |
45 | |
46 base::string16 GetFindBarSelectedText() { | |
47 FindBarTesting* find_bar = | |
48 browser()->GetFindBarController()->find_bar()->GetFindBarTesting(); | |
49 return find_bar->GetFindSelectedText(); | |
50 } | |
51 | |
52 private: | |
53 DISALLOW_COPY_AND_ASSIGN(FindInPageTest); | |
54 }; | |
55 | |
56 } // namespace | |
57 | |
58 // Flaky because the test server fails to start? See: http://crbug.com/96594. | |
59 IN_PROC_BROWSER_TEST_F(FindInPageTest, CrashEscHandlers) { | |
60 ASSERT_TRUE(test_server()->Start()); | |
61 | |
62 // First we navigate to our test page (tab A). | |
63 GURL url = test_server()->GetURL(kSimplePage); | |
64 ui_test_utils::NavigateToURL(browser(), url); | |
65 | |
66 chrome::Find(browser()); | |
67 | |
68 // Open another tab (tab B). | |
69 chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED); | |
70 | |
71 chrome::Find(browser()); | |
72 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
73 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
74 | |
75 // Select tab A. | |
76 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
77 | |
78 // Close tab B. | |
79 browser()->tab_strip_model()->CloseWebContentsAt(1, | |
80 TabStripModel::CLOSE_NONE); | |
81 | |
82 // Click on the location bar so that Find box loses focus. | |
83 ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), | |
84 VIEW_ID_OMNIBOX)); | |
85 // Check the location bar is focused. | |
86 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
87 | |
88 // This used to crash until bug 1303709 was fixed. | |
89 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
90 browser(), ui::VKEY_ESCAPE, false, false, false, false)); | |
91 } | |
92 | |
93 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) | |
94 // TODO(erg): linux_aura bringup: http://crbug.com/163931 | |
95 #define MAYBE_FocusRestore DISABLED_FocusRestore | |
96 #else | |
97 #define MAYBE_FocusRestore FocusRestore | |
98 #endif | |
99 | |
100 // Flaky because the test server fails to start? See: http://crbug.com/96594. | |
101 IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_FocusRestore) { | |
102 ASSERT_TRUE(test_server()->Start()); | |
103 | |
104 GURL url = test_server()->GetURL("title1.html"); | |
105 ui_test_utils::NavigateToURL(browser(), url); | |
106 | |
107 // Focus the location bar, open and close the find-in-page, focus should | |
108 // return to the location bar. | |
109 chrome::FocusLocationBar(browser()); | |
110 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
111 // Ensure the creation of the find bar controller. | |
112 browser()->GetFindBarController()->Show(); | |
113 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
114 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
115 browser()->GetFindBarController()->EndFindSession( | |
116 FindBarController::kKeepSelectionOnPage, | |
117 FindBarController::kKeepResultsInFindBox); | |
118 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
119 | |
120 // Focus the location bar, find something on the page, close the find box, | |
121 // focus should go to the page. | |
122 chrome::FocusLocationBar(browser()); | |
123 chrome::Find(browser()); | |
124 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
125 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
126 ui_test_utils::FindInPage( | |
127 browser()->tab_strip_model()->GetActiveWebContents(), | |
128 ASCIIToUTF16("a"), true, false, NULL, NULL); | |
129 browser()->GetFindBarController()->EndFindSession( | |
130 FindBarController::kKeepSelectionOnPage, | |
131 FindBarController::kKeepResultsInFindBox); | |
132 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); | |
133 | |
134 // Focus the location bar, open and close the find box, focus should return to | |
135 // the location bar (same as before, just checking that http://crbug.com/23599 | |
136 // is fixed). | |
137 chrome::FocusLocationBar(browser()); | |
138 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
139 browser()->GetFindBarController()->Show(); | |
140 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
141 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
142 browser()->GetFindBarController()->EndFindSession( | |
143 FindBarController::kKeepSelectionOnPage, | |
144 FindBarController::kKeepResultsInFindBox); | |
145 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
146 } | |
147 | |
148 | |
149 // TODO(phajdan.jr): Disabling due to possible timing issues on XP | |
150 // interactive_ui_tests. | |
151 // http://crbug.com/311363 | |
152 IN_PROC_BROWSER_TEST_F(FindInPageTest, DISABLED_SelectionRestoreOnTabSwitch) { | |
153 ASSERT_TRUE(test_server()->Start()); | |
154 | |
155 // Make sure Chrome is in the foreground, otherwise sending input | |
156 // won't do anything and the test will hang. | |
157 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | |
158 | |
159 // First we navigate to any page in the current tab (tab A). | |
160 GURL url = test_server()->GetURL(kSimplePage); | |
161 ui_test_utils::NavigateToURL(browser(), url); | |
162 | |
163 // Show the Find bar. | |
164 browser()->GetFindBarController()->Show(); | |
165 | |
166 // Search for "abc". | |
167 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
168 browser(), ui::VKEY_A, false, false, false, false)); | |
169 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
170 browser(), ui::VKEY_B, false, false, false, false)); | |
171 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
172 browser(), ui::VKEY_C, false, false, false, false)); | |
173 EXPECT_EQ(ASCIIToUTF16("abc"), GetFindBarText()); | |
174 | |
175 // Select "bc". | |
176 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
177 browser(), ui::VKEY_LEFT, false, true, false, false)); | |
178 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
179 browser(), ui::VKEY_LEFT, false, true, false, false)); | |
180 EXPECT_EQ(ASCIIToUTF16("bc"), GetFindBarSelectedText()); | |
181 | |
182 // Open another tab (tab B). | |
183 content::WindowedNotificationObserver observer( | |
184 content::NOTIFICATION_LOAD_STOP, | |
185 content::NotificationService::AllSources()); | |
186 chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED); | |
187 observer.Wait(); | |
188 | |
189 // Show the Find bar. | |
190 browser()->GetFindBarController()->Show(); | |
191 | |
192 // Search for "def". | |
193 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
194 browser(), ui::VKEY_D, false, false, false, false)); | |
195 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
196 browser(), ui::VKEY_E, false, false, false, false)); | |
197 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
198 browser(), ui::VKEY_F, false, false, false, false)); | |
199 EXPECT_EQ(ASCIIToUTF16("def"), GetFindBarText()); | |
200 | |
201 // Select "de". | |
202 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
203 browser(), ui::VKEY_HOME, false, false, false, false)); | |
204 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
205 browser(), ui::VKEY_RIGHT, false, true, false, false)); | |
206 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
207 browser(), ui::VKEY_RIGHT, false, true, false, false)); | |
208 EXPECT_EQ(ASCIIToUTF16("de"), GetFindBarSelectedText()); | |
209 | |
210 // Select tab A. Find bar should select "bc". | |
211 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
212 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
213 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
214 EXPECT_EQ(ASCIIToUTF16("bc"), GetFindBarSelectedText()); | |
215 | |
216 // Select tab B. Find bar should select "de". | |
217 browser()->tab_strip_model()->ActivateTabAt(1, true); | |
218 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
219 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
220 EXPECT_EQ(ASCIIToUTF16("de"), GetFindBarSelectedText()); | |
221 } | |
222 | |
223 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) | |
224 // TODO(erg): linux_aura bringup: http://crbug.com/163931 | |
225 #define MAYBE_FocusRestoreOnTabSwitch DISABLED_FocusRestoreOnTabSwitch | |
226 #else | |
227 #define MAYBE_FocusRestoreOnTabSwitch FocusRestoreOnTabSwitch | |
228 #endif | |
229 | |
230 // Flaky because the test server fails to start? See: http://crbug.com/96594. | |
231 IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_FocusRestoreOnTabSwitch) { | |
232 ASSERT_TRUE(test_server()->Start()); | |
233 | |
234 // First we navigate to our test page (tab A). | |
235 GURL url = test_server()->GetURL(kSimplePage); | |
236 ui_test_utils::NavigateToURL(browser(), url); | |
237 | |
238 chrome::Find(browser()); | |
239 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
240 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
241 | |
242 // Search for 'a'. | |
243 ui_test_utils::FindInPage( | |
244 browser()->tab_strip_model()->GetActiveWebContents(), | |
245 ASCIIToUTF16("a"), true, false, NULL, NULL); | |
246 EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText()); | |
247 | |
248 // Open another tab (tab B). | |
249 content::WindowedNotificationObserver observer( | |
250 content::NOTIFICATION_LOAD_STOP, | |
251 content::NotificationService::AllSources()); | |
252 chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED); | |
253 observer.Wait(); | |
254 | |
255 // Make sure Find box is open. | |
256 chrome::Find(browser()); | |
257 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
258 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
259 | |
260 // Search for 'b'. | |
261 ui_test_utils::FindInPage( | |
262 browser()->tab_strip_model()->GetActiveWebContents(), | |
263 ASCIIToUTF16("b"), true, false, NULL, NULL); | |
264 EXPECT_EQ(ASCIIToUTF16("b"), GetFindBarSelectedText()); | |
265 | |
266 // Set focus away from the Find bar (to the Location bar). | |
267 chrome::FocusLocationBar(browser()); | |
268 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
269 | |
270 // Select tab A. Find bar should get focus. | |
271 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
272 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
273 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
274 EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText()); | |
275 | |
276 // Select tab B. Location bar should get focus. | |
277 browser()->tab_strip_model()->ActivateTabAt(1, true); | |
278 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); | |
279 } | |
280 | |
281 // FindInPage on Mac doesn't use prepopulated values. Search there is global. | |
282 #if !defined(OS_MACOSX) && !defined(USE_AURA) | |
283 // Flaky because the test server fails to start? See: http://crbug.com/96594. | |
284 // This tests that whenever you clear values from the Find box and close it that | |
285 // it respects that and doesn't show you the last search, as reported in bug: | |
286 // http://crbug.com/40121. For Aura see bug http://crbug.com/292299. | |
287 IN_PROC_BROWSER_TEST_F(FindInPageTest, PrepopulateRespectBlank) { | |
288 ASSERT_TRUE(test_server()->Start()); | |
289 | |
290 // Make sure Chrome is in the foreground, otherwise sending input | |
291 // won't do anything and the test will hang. | |
292 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | |
293 | |
294 // First we navigate to any page. | |
295 GURL url = test_server()->GetURL(kSimplePage); | |
296 ui_test_utils::NavigateToURL(browser(), url); | |
297 | |
298 // Show the Find bar. | |
299 browser()->GetFindBarController()->Show(); | |
300 | |
301 // Search for "a". | |
302 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
303 browser(), ui::VKEY_A, false, false, false, false)); | |
304 | |
305 // We should find "a" here. | |
306 EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarText()); | |
307 | |
308 // Delete "a". | |
309 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
310 browser(), ui::VKEY_BACK, false, false, false, false)); | |
311 | |
312 // Validate we have cleared the text. | |
313 EXPECT_EQ(base::string16(), GetFindBarText()); | |
314 | |
315 // Close the Find box. | |
316 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
317 browser(), ui::VKEY_ESCAPE, false, false, false, false)); | |
318 | |
319 // Show the Find bar. | |
320 browser()->GetFindBarController()->Show(); | |
321 | |
322 // After the Find box has been reopened, it should not have been prepopulated | |
323 // with "a" again. | |
324 EXPECT_EQ(base::string16(), GetFindBarText()); | |
325 | |
326 // Close the Find box. | |
327 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
328 browser(), ui::VKEY_ESCAPE, false, false, false, false)); | |
329 | |
330 // Press F3 to trigger FindNext. | |
331 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
332 browser(), ui::VKEY_F3, false, false, false, false)); | |
333 | |
334 // After the Find box has been reopened, it should still have no prepopulate | |
335 // value. | |
336 EXPECT_EQ(base::string16(), GetFindBarText()); | |
337 } | |
338 #endif | |
339 | |
340 // Flaky on Win. http://crbug.com/92467 | |
341 // Flaky on ChromeOS. http://crbug.com/118216 | |
342 // Flaky on linux aura. http://crbug.com/163931 | |
343 #if defined(TOOLKIT_VIEWS) | |
344 #define MAYBE_PasteWithoutTextChange DISABLED_PasteWithoutTextChange | |
345 #else | |
346 #define MAYBE_PasteWithoutTextChange PasteWithoutTextChange | |
347 #endif | |
348 | |
349 IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_PasteWithoutTextChange) { | |
350 ASSERT_TRUE(test_server()->Start()); | |
351 | |
352 // Make sure Chrome is in the foreground, otherwise sending input | |
353 // won't do anything and the test will hang. | |
354 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | |
355 | |
356 // First we navigate to any page. | |
357 GURL url = test_server()->GetURL(kSimplePage); | |
358 ui_test_utils::NavigateToURL(browser(), url); | |
359 | |
360 // Show the Find bar. | |
361 browser()->GetFindBarController()->Show(); | |
362 | |
363 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
364 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
365 | |
366 // Search for "a". | |
367 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
368 browser(), ui::VKEY_A, false, false, false, false)); | |
369 | |
370 // We should find "a" here. | |
371 EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarText()); | |
372 | |
373 // Reload the page to clear the matching result. | |
374 chrome::Reload(browser(), CURRENT_TAB); | |
375 | |
376 // Focus the Find bar again to make sure the text is selected. | |
377 browser()->GetFindBarController()->Show(); | |
378 | |
379 EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), | |
380 VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | |
381 | |
382 // "a" should be selected. | |
383 EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText()); | |
384 | |
385 // Press Ctrl-C to copy the content. | |
386 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
387 browser(), ui::VKEY_C, true, false, false, false)); | |
388 | |
389 base::string16 str; | |
390 ui::Clipboard::GetForCurrentThread()->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, | |
391 &str); | |
392 | |
393 // Make sure the text is copied successfully. | |
394 EXPECT_EQ(ASCIIToUTF16("a"), str); | |
395 | |
396 // Press Ctrl-V to paste the content back, it should start finding even if the | |
397 // content is not changed. | |
398 content::Source<WebContents> notification_source( | |
399 browser()->tab_strip_model()->GetActiveWebContents()); | |
400 ui_test_utils::WindowedNotificationObserverWithDetails | |
401 <FindNotificationDetails> observer( | |
402 chrome::NOTIFICATION_FIND_RESULT_AVAILABLE, notification_source); | |
403 | |
404 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
405 browser(), ui::VKEY_V, true, false, false, false)); | |
406 | |
407 ASSERT_NO_FATAL_FAILURE(observer.Wait()); | |
408 FindNotificationDetails details; | |
409 ASSERT_TRUE(observer.GetDetailsFor(notification_source.map_key(), &details)); | |
410 EXPECT_TRUE(details.number_of_matches() > 0); | |
411 } | |
412 | |
413 #if defined(OS_WIN) | |
414 // TODO(phajdan.jr): Disabling due to possible timing issues on XP | |
415 // interactive_ui_tests. | |
416 // http://crbug.com/311363 | |
417 IN_PROC_BROWSER_TEST_F(FindInPageTest, DISABLED_CtrlEnter) { | |
418 ui_test_utils::NavigateToURL(browser(), | |
419 GURL("data:text/html,This is some text with a " | |
420 "<a href=\"about:blank\">link</a>.")); | |
421 | |
422 browser()->GetFindBarController()->Show(); | |
423 | |
424 // Search for "link". | |
425 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
426 browser(), ui::VKEY_L, false, false, false, false)); | |
427 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
428 browser(), ui::VKEY_I, false, false, false, false)); | |
429 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
430 browser(), ui::VKEY_N, false, false, false, false)); | |
431 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
432 browser(), ui::VKEY_K, false, false, false, false)); | |
433 EXPECT_EQ(ASCIIToUTF16("link"), GetFindBarText()); | |
434 | |
435 ui_test_utils::UrlLoadObserver observer( | |
436 GURL("about:blank"), content::NotificationService::AllSources()); | |
437 | |
438 // Send Ctrl-Enter, should cause navigation to about:blank. | |
439 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | |
440 browser(), ui::VKEY_RETURN, true, false, false, false)); | |
441 | |
442 observer.Wait(); | |
443 } | |
444 #endif | |
OLD | NEW |