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

Side by Side Diff: chrome/browser/views/find_bar_win_browsertest.cc

Issue 200035: First cut at implementation of FindBar for views / gtk... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2009 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/message_loop.h"
6 #include "chrome/browser/browser.h"
7 #include "chrome/browser/browser_window.h"
8 #include "chrome/browser/find_bar_controller.h"
9 #include "chrome/browser/find_notification_details.h"
10 #include "chrome/browser/renderer_host/render_view_host.h"
11 #include "chrome/browser/tab_contents/tab_contents.h"
12 #include "chrome/browser/tab_contents/tab_contents_view.h"
13 #include "chrome/browser/views/find_bar_win.h"
14 #include "chrome/common/notification_service.h"
15 #include "chrome/test/in_process_browser_test.h"
16 #include "chrome/test/ui_test_utils.h"
17 #include "views/focus/focus_manager.h"
18
19 const std::wstring kSimplePage = L"404_is_enough_for_us.html";
20 const std::wstring kFramePage = L"files/find_in_page/frames.html";
21 const std::wstring kFrameData = L"files/find_in_page/framedata_general.html";
22 const std::wstring kUserSelectPage = L"files/find_in_page/user-select.html";
23 const std::wstring kCrashPage = L"files/find_in_page/crash_1341577.html";
24 const std::wstring kTooFewMatchesPage = L"files/find_in_page/bug_1155639.html";
25 const std::wstring kEndState = L"files/find_in_page/end_state.html";
26 const std::wstring kPrematureEnd = L"files/find_in_page/premature_end.html";
27 const std::wstring kMoveIfOver = L"files/find_in_page/move_if_obscuring.html";
28 const std::wstring kBitstackCrash = L"files/find_in_page/crash_14491.html";
29
30 namespace {
31
32 class FindInPageNotificationObserver : public NotificationObserver {
33 public:
34 explicit FindInPageNotificationObserver(TabContents* parent_tab)
35 : parent_tab_(parent_tab),
36 active_match_ordinal_(-1),
37 number_of_matches_(0) {
38 current_find_request_id_ = parent_tab->current_find_request_id();
39 registrar_.Add(this, NotificationType::FIND_RESULT_AVAILABLE,
40 Source<TabContents>(parent_tab_));
41 ui_test_utils::RunMessageLoop();
42 }
43
44 int active_match_ordinal() const { return active_match_ordinal_; }
45
46 int number_of_matches() const { return number_of_matches_; }
47
48 virtual void Observe(NotificationType type, const NotificationSource& source,
49 const NotificationDetails& details) {
50 if (type == NotificationType::FIND_RESULT_AVAILABLE) {
51 Details<FindNotificationDetails> find_details(details);
52 if (find_details->request_id() == current_find_request_id_) {
53 // We get multiple responses and one of those will contain the ordinal.
54 // This message comes to us before the final update is sent.
55 if (find_details->active_match_ordinal() > -1)
56 active_match_ordinal_ = find_details->active_match_ordinal();
57 if (find_details->final_update()) {
58 number_of_matches_ = find_details->number_of_matches();
59 MessageLoopForUI::current()->Quit();
60 } else {
61 DLOG(INFO) << "Ignoring, since we only care about the final message";
62 }
63 }
64 } else {
65 NOTREACHED();
66 }
67 }
68
69 private:
70 NotificationRegistrar registrar_;
71 TabContents* parent_tab_;
72 // We will at some point (before final update) be notified of the ordinal and
73 // we need to preserve it so we can send it later.
74 int active_match_ordinal_;
75 int number_of_matches_;
76 // The id of the current find request, obtained from TabContents. Allows us
77 // to monitor when the search completes.
78 int current_find_request_id_;
79 };
80
81 } // namespace
82
83 typedef enum { BACK = 0, FWD = 1 } FindInPageDirection;
84 typedef enum { IGNORE_CASE = 0, CASE_SENSITIVE = 1 } FindInPageCase;
85
86 class FindInPageControllerTest : public InProcessBrowserTest {
87 public:
88 FindInPageControllerTest() {
89 EnableDOMAutomation();
90 }
91
92 protected:
93 int FindInPage(const std::wstring& search_string,
94 FindInPageDirection forward,
95 FindInPageCase match_case,
96 int* ordinal) {
97 TabContents* tab_contents = browser()->GetSelectedTabContents();
98 tab_contents->StartFinding(search_string, forward == FWD,
99 match_case == CASE_SENSITIVE);
100
101 FindInPageNotificationObserver observer =
102 FindInPageNotificationObserver(tab_contents);
103 if (ordinal)
104 *ordinal = observer.active_match_ordinal();
105 return observer.number_of_matches();
106 }
107
108 void GetFindBarWindowInfo(gfx::Point* position, bool* fully_visible) {
109 FindBarTesting* find_bar =
110 browser()->find_bar()->find_bar()->GetFindBarTesting();
111 find_bar->GetFindBarWindowInfo(position, fully_visible);
112 }
113 };
114
115 // This test loads a page with frames and starts FindInPage requests.
116 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageFrames) {
117 HTTPTestServer* server = StartHTTPServer();
118
119 // First we navigate to our frames page.
120 GURL url = server->TestServerPageW(kFramePage);
121 ui_test_utils::NavigateToURL(browser(), url);
122
123 // Try incremental search (mimicking user typing in).
124 int ordinal = 0;
125 EXPECT_EQ(18, FindInPage(L"g", FWD, IGNORE_CASE, &ordinal));
126 EXPECT_EQ(1, ordinal);
127 EXPECT_EQ(11, FindInPage(L"go", FWD, IGNORE_CASE, &ordinal));
128 EXPECT_EQ(1, ordinal);
129 EXPECT_EQ(04, FindInPage(L"goo", FWD, IGNORE_CASE, &ordinal));
130 EXPECT_EQ(1, ordinal);
131 EXPECT_EQ(03, FindInPage(L"goog", FWD, IGNORE_CASE, &ordinal));
132 EXPECT_EQ(1, ordinal);
133 EXPECT_EQ(02, FindInPage(L"googl", FWD, IGNORE_CASE, &ordinal));
134 EXPECT_EQ(1, ordinal);
135 EXPECT_EQ(01, FindInPage(L"google", FWD, IGNORE_CASE, &ordinal));
136 EXPECT_EQ(1, ordinal);
137 EXPECT_EQ(00, FindInPage(L"google!", FWD, IGNORE_CASE, &ordinal));
138 EXPECT_EQ(0, ordinal);
139
140 // Negative test (no matches should be found).
141 EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, &ordinal));
142 EXPECT_EQ(0, ordinal);
143
144 // 'horse' only exists in the three right frames.
145 EXPECT_EQ(3, FindInPage(L"horse", FWD, IGNORE_CASE, &ordinal));
146 EXPECT_EQ(1, ordinal);
147
148 // 'cat' only exists in the first frame.
149 EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, &ordinal));
150 EXPECT_EQ(1, ordinal);
151
152 // Try searching again, should still come up with 1 match.
153 EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, &ordinal));
154 EXPECT_EQ(1, ordinal);
155
156 // Try searching backwards, ignoring case, should still come up with 1 match.
157 EXPECT_EQ(1, FindInPage(L"CAT", BACK, IGNORE_CASE, &ordinal));
158 EXPECT_EQ(1, ordinal);
159
160 // Try case sensitive, should NOT find it.
161 EXPECT_EQ(0, FindInPage(L"CAT", FWD, CASE_SENSITIVE, &ordinal));
162 EXPECT_EQ(0, ordinal);
163
164 // Try again case sensitive, but this time with right case.
165 EXPECT_EQ(1, FindInPage(L"dog", FWD, CASE_SENSITIVE, &ordinal));
166 EXPECT_EQ(1, ordinal);
167
168 // Try non-Latin characters ('Hreggvidur' with 'eth' for 'd' in left frame).
169 EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, IGNORE_CASE, &ordinal));
170 EXPECT_EQ(1, ordinal);
171 EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, CASE_SENSITIVE, &ordinal));
172 EXPECT_EQ(1, ordinal);
173 EXPECT_EQ(0, FindInPage(L"hreggvi\u00F0ur", FWD, CASE_SENSITIVE, &ordinal));
174 EXPECT_EQ(0, ordinal);
175 }
176
177 std::string FocusedOnPage(TabContents* tab_contents) {
178 std::string result;
179 ui_test_utils::ExecuteJavaScriptAndExtractString(
180 tab_contents->render_view_host(),
181 L"",
182 L"window.domAutomationController.send(getFocusedElement());",
183 &result);
184 return result;
185 }
186
187 // This tests the FindInPage end-state, in other words: what is focused when you
188 // close the Find box (ie. if you find within a link the link should be
189 // focused).
190 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageEndState) {
191 HTTPTestServer* server = StartHTTPServer();
192
193 // First we navigate to our special focus tracking page.
194 GURL url = server->TestServerPageW(kEndState);
195 ui_test_utils::NavigateToURL(browser(), url);
196
197 TabContents* tab_contents = browser()->GetSelectedTabContents();
198 ASSERT_TRUE(NULL != tab_contents);
199
200 // Verify that nothing has focus.
201 ASSERT_STREQ("{nothing focused}", FocusedOnPage(tab_contents).c_str());
202
203 // Search for a text that exists within a link on the page.
204 int ordinal = 0;
205 EXPECT_EQ(1, FindInPage(L"nk", FWD, IGNORE_CASE, &ordinal));
206 EXPECT_EQ(1, ordinal);
207
208 // End the find session, which should set focus to the link.
209 tab_contents->StopFinding(false);
210
211 // Verify that the link is focused.
212 EXPECT_STREQ("link1", FocusedOnPage(tab_contents).c_str());
213
214 // Search for a text that exists within a link on the page.
215 EXPECT_EQ(1, FindInPage(L"Google", FWD, IGNORE_CASE, &ordinal));
216 EXPECT_EQ(1, ordinal);
217
218 // Move the selection to link 1, after searching.
219 std::string result;
220 ui_test_utils::ExecuteJavaScriptAndExtractString(
221 tab_contents->render_view_host(),
222 L"",
223 L"window.domAutomationController.send(selectLink1());",
224 &result);
225
226 // End the find session.
227 tab_contents->StopFinding(false);
228
229 // Verify that link2 is not focused.
230 EXPECT_STREQ("", FocusedOnPage(tab_contents).c_str());
231 }
232
233 // This test loads a single-frame page and makes sure the ordinal returned makes
234 // sense as we FindNext over all the items.
235 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageOrdinal) {
236 HTTPTestServer* server = StartHTTPServer();
237
238 // First we navigate to our page.
239 GURL url = server->TestServerPageW(kFrameData);
240 ui_test_utils::NavigateToURL(browser(), url);
241
242 // Search for 'o', which should make the first item active and return
243 // '1 in 3' (1st ordinal of a total of 3 matches).
244 int ordinal = 0;
245 EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, &ordinal));
246 EXPECT_EQ(1, ordinal);
247 EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, &ordinal));
248 EXPECT_EQ(2, ordinal);
249 EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, &ordinal));
250 EXPECT_EQ(3, ordinal);
251 // Go back one match.
252 EXPECT_EQ(3, FindInPage(L"o", BACK, IGNORE_CASE, &ordinal));
253 EXPECT_EQ(2, ordinal);
254 EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, &ordinal));
255 EXPECT_EQ(3, ordinal);
256 // This should wrap to the top.
257 EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, &ordinal));
258 EXPECT_EQ(1, ordinal);
259 // This should go back to the end.
260 EXPECT_EQ(3, FindInPage(L"o", BACK, IGNORE_CASE, &ordinal));
261 EXPECT_EQ(3, ordinal);
262 }
263
264 // This test loads a page with frames and makes sure the ordinal returned makes
265 // sense.
266 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageMultiFramesOrdinal) {
267 HTTPTestServer* server = StartHTTPServer();
268
269 // First we navigate to our page.
270 GURL url = server->TestServerPageW(kFramePage);
271 ui_test_utils::NavigateToURL(browser(), url);
272
273 // Search for 'a', which should make the first item active and return
274 // '1 in 7' (1st ordinal of a total of 7 matches).
275 int ordinal = 0;
276 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
277 EXPECT_EQ(1, ordinal);
278 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
279 EXPECT_EQ(2, ordinal);
280 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
281 EXPECT_EQ(3, ordinal);
282 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
283 EXPECT_EQ(4, ordinal);
284 // Go back one, which should go back one frame.
285 EXPECT_EQ(7, FindInPage(L"a", BACK, IGNORE_CASE, &ordinal));
286 EXPECT_EQ(3, ordinal);
287 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
288 EXPECT_EQ(4, ordinal);
289 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
290 EXPECT_EQ(5, ordinal);
291 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
292 EXPECT_EQ(6, ordinal);
293 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
294 EXPECT_EQ(7, ordinal);
295 // Now we should wrap back to frame 1.
296 EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, &ordinal));
297 EXPECT_EQ(1, ordinal);
298 // Now we should wrap back to frame last frame.
299 EXPECT_EQ(7, FindInPage(L"a", BACK, IGNORE_CASE, &ordinal));
300 EXPECT_EQ(7, ordinal);
301 }
302
303 // We could get ordinals out of whack when restarting search in subframes.
304 // See http://crbug.com/5132
305 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPage_Issue5132) {
306 HTTPTestServer* server = StartHTTPServer();
307
308 // First we navigate to our page.
309 GURL url = server->TestServerPageW(kFramePage);
310 ui_test_utils::NavigateToURL(browser(), url);
311
312 // Search for 'goa' three times (6 matches on page).
313 int ordinal = 0;
314 EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, &ordinal));
315 EXPECT_EQ(1, ordinal);
316 EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, &ordinal));
317 EXPECT_EQ(2, ordinal);
318 EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, &ordinal));
319 EXPECT_EQ(3, ordinal);
320 // Add space to search (should result in no matches).
321 EXPECT_EQ(0, FindInPage(L"goa ", FWD, IGNORE_CASE, &ordinal));
322 EXPECT_EQ(0, ordinal);
323 // Remove the space, should be back to '3 out of 6')
324 EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, &ordinal));
325 EXPECT_EQ(3, ordinal);
326 }
327
328 // Load a page with no selectable text and make sure we don't crash.
329 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindUnSelectableText) {
330 HTTPTestServer* server = StartHTTPServer();
331
332 // First we navigate to our page.
333 GURL url = server->TestServerPageW(kUserSelectPage);
334 ui_test_utils::NavigateToURL(browser(), url);
335
336 int ordinal = 0;
337 EXPECT_EQ(0, FindInPage(L"text", FWD, IGNORE_CASE, &ordinal));
338 EXPECT_EQ(-1, ordinal); // Nothing is selected.
339 EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, &ordinal));
340 EXPECT_EQ(0, ordinal);
341 }
342
343 // Try to reproduce the crash seen in issue 1341577.
344 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindCrash_Issue1341577) {
345 HTTPTestServer* server = StartHTTPServer();
346
347 // First we navigate to our page.
348 GURL url = server->TestServerPageW(kCrashPage);
349 ui_test_utils::NavigateToURL(browser(), url);
350
351 // This would crash the tab. These must be the first two find requests issued
352 // against the frame, otherwise an active frame pointer is set and it wont
353 // produce the crash.
354 // We used to check the return value and |ordinal|. With ICU 4.2, FiP does
355 // not find a stand-alone dependent vowel sign of Indic scripts. So, the
356 // exptected values are all 0. To make this test pass regardless of
357 // ICU version, we just call FiP and see if there's any crash.
358 // TODO(jungshik): According to a native Malayalam speaker, it's ok not
359 // to find U+0D4C. Still need to investigate further this issue.
360 int ordinal = 0;
361 FindInPage(L"\u0D4C", FWD, IGNORE_CASE, &ordinal);
362 FindInPage(L"\u0D4C", FWD, IGNORE_CASE, &ordinal);
363
364 // This should work fine.
365 EXPECT_EQ(1, FindInPage(L"\u0D24\u0D46", FWD, IGNORE_CASE, &ordinal));
366 EXPECT_EQ(1, ordinal);
367 EXPECT_EQ(0, FindInPage(L"nostring", FWD, IGNORE_CASE, &ordinal));
368 EXPECT_EQ(0, ordinal);
369 }
370
371 // Try to reproduce the crash seen in http://crbug.com/14491, where an assert
372 // hits in the BitStack size comparison in WebKit.
373 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindCrash_Issue14491) {
374 HTTPTestServer* server = StartHTTPServer();
375
376 // First we navigate to our page.
377 GURL url = server->TestServerPageW(kBitstackCrash);
378 ui_test_utils::NavigateToURL(browser(), url);
379
380 // This used to crash the tab.
381 int ordinal = 0;
382 EXPECT_EQ(0, FindInPage(L"s", FWD, IGNORE_CASE, &ordinal));
383 EXPECT_EQ(0, ordinal);
384 }
385
386 // Test to make sure Find does the right thing when restarting from a timeout.
387 // We used to have a problem where we'd stop finding matches when all of the
388 // following conditions were true:
389 // 1) The page has a lot of text to search.
390 // 2) The page contains more than one match.
391 // 3) It takes longer than the time-slice given to each Find operation (100
392 // ms) to find one or more of those matches (so Find times out and has to try
393 // again from where it left off).
394 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindRestarts_Issue1155639) {
395 HTTPTestServer* server = StartHTTPServer();
396
397 // First we navigate to our page.
398 GURL url = server->TestServerPageW(kTooFewMatchesPage);
399 ui_test_utils::NavigateToURL(browser(), url);
400
401 // This string appears 5 times at the bottom of a long page. If Find restarts
402 // properly after a timeout, it will find 5 matches, not just 1.
403 int ordinal = 0;
404 EXPECT_EQ(5, FindInPage(L"008.xml", FWD, IGNORE_CASE, &ordinal));
405 EXPECT_EQ(1, ordinal);
406 }
407
408 // This tests bug 11761: FindInPage terminates search prematurely.
409 // This test will be enabled once the bug is fixed.
410 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest,
411 DISABLED_FindInPagePrematureEnd) {
412 HTTPTestServer* server = StartHTTPServer();
413
414 // First we navigate to our special focus tracking page.
415 GURL url = server->TestServerPageW(kPrematureEnd);
416 ui_test_utils::NavigateToURL(browser(), url);
417
418 TabContents* tab_contents = browser()->GetSelectedTabContents();
419 ASSERT_TRUE(NULL != tab_contents);
420
421 // Search for a text that exists within a link on the page.
422 int ordinal = 0;
423 EXPECT_EQ(2, FindInPage(L"html ", FWD, IGNORE_CASE, &ordinal));
424 EXPECT_EQ(1, ordinal);
425 }
426
427 // Make sure Find box disappears on Navigate but not on Refresh.
428 // Flaky, see http://crbug.com/16447.
429 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest,
430 DISABLED_FindDisappearOnNavigate) {
431 HTTPTestServer* server = StartHTTPServer();
432
433 // First we navigate to our special focus tracking page.
434 GURL url = server->TestServerPageW(kSimplePage);
435 GURL url2 = server->TestServerPageW(kFramePage);
436 ui_test_utils::NavigateToURL(browser(), url);
437
438 // Open the Find window with animations disabled.
439 FindBarWin::disable_animations_during_testing_ = true;
440 browser()->ShowFindBar();
441
442 gfx::Point position;
443 bool fully_visible = false;
444
445 // Make sure it is open.
446 GetFindBarWindowInfo(&position, &fully_visible);
447 EXPECT_TRUE(fully_visible);
448
449 // Reload the tab and make sure Find window doesn't go away.
450 browser()->Reload();
451
452 GetFindBarWindowInfo(&position, &fully_visible);
453 EXPECT_TRUE(fully_visible);
454
455 // Navigate and make sure the Find window goes away.
456 ui_test_utils::NavigateToURL(browser(), url2);
457
458 GetFindBarWindowInfo(&position, &fully_visible);
459 EXPECT_FALSE(fully_visible);
460 }
461
462 // Make sure Find box disappears when History/Downloads page is opened, and
463 // when a New Tab is opened.
464 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest,
465 FindDisappearOnNewTabAndHistory) {
466 HTTPTestServer* server = StartHTTPServer();
467
468 // First we navigate to our special focus tracking page.
469 GURL url = server->TestServerPageW(kSimplePage);
470 ui_test_utils::NavigateToURL(browser(), url);
471
472 // Open the Find window with animations disabled.
473 FindBarWin::disable_animations_during_testing_ = true;
474 browser()->ShowFindBar();
475
476 gfx::Point position;
477 bool fully_visible = false;
478
479 // Make sure it is open.
480 GetFindBarWindowInfo(&position, &fully_visible);
481 EXPECT_TRUE(fully_visible);
482
483 // Open another tab (tab B).
484 browser()->NewTab();
485 ui_test_utils::NavigateToURL(browser(), url);
486
487 // Make sure Find box is closed.
488 GetFindBarWindowInfo(&position, &fully_visible);
489 EXPECT_FALSE(fully_visible);
490
491 // Close tab B.
492 browser()->CloseTab();
493
494 // Make sure Find window appears again.
495 GetFindBarWindowInfo(&position, &fully_visible);
496 EXPECT_TRUE(fully_visible);
497
498 browser()->ShowHistoryTab();
499
500 // Make sure Find box is closed.
501 GetFindBarWindowInfo(&position, &fully_visible);
502 EXPECT_FALSE(fully_visible);
503 }
504
505 // Make sure Find box moves out of the way if it is obscuring the active match.
506 // Flaky, see http://crbug.com/16447.
507 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest,
508 DISABLED_FindMovesWhenObscuring) {
509 HTTPTestServer* server = StartHTTPServer();
510
511 GURL url = server->TestServerPageW(kMoveIfOver);
512 ui_test_utils::NavigateToURL(browser(), url);
513
514 // Open the Find window with animations disabled.
515 FindBarWin::disable_animations_during_testing_ = true;
516 browser()->ShowFindBar();
517
518 gfx::Point start_position;
519 gfx::Point position;
520 bool fully_visible = false;
521
522 // Make sure it is open.
523 GetFindBarWindowInfo(&start_position, &fully_visible);
524 EXPECT_TRUE(fully_visible);
525
526 // Search for 'dream' which the Find box is obscuring.
527 int ordinal = 0;
528 EXPECT_EQ(1, FindInPage(L"dream", FWD, IGNORE_CASE, &ordinal));
529 EXPECT_EQ(1, ordinal);
530
531 // Make sure Find box has moved.
532 GetFindBarWindowInfo(&position, &fully_visible);
533 EXPECT_EQ(start_position.y(), position.y());
534 EXPECT_NE(start_position.x(), position.x());
535 EXPECT_TRUE(fully_visible);
536
537 // Search for 'Too much' which the Find box is not obscuring.
538 EXPECT_EQ(1, FindInPage(L"Too much", FWD, IGNORE_CASE, &ordinal));
539 EXPECT_EQ(1, ordinal);
540
541 // Make sure Find box has moved back to its original location.
542 GetFindBarWindowInfo(&position, &fully_visible);
543 EXPECT_EQ(start_position, position);
544 EXPECT_TRUE(fully_visible);
545 }
546
547 // Make sure F3 in a new tab works if Find has previous string to search for.
548 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest,
549 FindNextInNewTabUsesPrepopulate) {
550 HTTPTestServer* server = StartHTTPServer();
551
552 // First we navigate to any page.
553 GURL url = server->TestServerPageW(kSimplePage);
554 ui_test_utils::NavigateToURL(browser(), url);
555
556 // Search for 'no_match'. No matches should be found.
557 int ordinal = 0;
558 EXPECT_EQ(0, FindInPage(L"no_match", FWD, IGNORE_CASE, &ordinal));
559 EXPECT_EQ(0, ordinal);
560
561 // Open another tab (tab B).
562 browser()->NewTab();
563 ui_test_utils::NavigateToURL(browser(), url);
564
565 // Simulate what happens when you press F3 for FindNext. We should get a
566 // response here (a hang means search was aborted).
567 EXPECT_EQ(0, FindInPage(std::wstring(), FWD, IGNORE_CASE, &ordinal));
568 EXPECT_EQ(0, ordinal);
569
570 // Open another tab (tab C).
571 browser()->NewTab();
572 ui_test_utils::NavigateToURL(browser(), url);
573
574 // Simulate what happens when you press F3 for FindNext. We should get a
575 // response here (a hang means search was aborted).
576 EXPECT_EQ(0, FindInPage(std::wstring(), FWD, IGNORE_CASE, &ordinal));
577 EXPECT_EQ(0, ordinal);
578 }
579
580 // Make sure Find box grabs the Esc accelerator and restores it again.
581 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, AcceleratorRestoring) {
582 HTTPTestServer* server = StartHTTPServer();
583
584 // First we navigate to any page.
585 GURL url = server->TestServerPageW(kSimplePage);
586 ui_test_utils::NavigateToURL(browser(), url);
587
588 gfx::NativeView browser_view = browser()->window()->GetNativeHandle();
589 views::FocusManager* focus_manager =
590 views::FocusManager::GetFocusManagerForNativeView(browser_view);
591
592 // See where Escape is registered.
593 views::Accelerator escape(VK_ESCAPE, false, false, false);
594 views::AcceleratorTarget* old_target =
595 focus_manager->GetCurrentTargetForAccelerator(escape);
596 EXPECT_TRUE(old_target != NULL);
597
598 // Open the Find box.
599 browser()->ShowFindBar();
600
601 // Our Find bar should be the new target.
602 views::AcceleratorTarget* new_target =
603 focus_manager->GetCurrentTargetForAccelerator(escape);
604
605 EXPECT_TRUE(new_target != NULL);
606 EXPECT_NE(new_target, old_target);
607
608 // Close the Find box.
609 browser()->find_bar()->EndFindSession();
610
611 // The accelerator for Escape should be back to what it was before.
612 EXPECT_EQ(old_target, focus_manager->GetCurrentTargetForAccelerator(escape));
613 }
614
615 // Make sure Find box does not become UI-inactive when no text is in the box as
616 // we switch to a tab contents with an empty find string. See issue 13570.
617 IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, StayActive) {
618 HTTPTestServer* server = StartHTTPServer();
619
620 // First we navigate to any page.
621 GURL url = server->TestServerPageW(kSimplePage);
622 ui_test_utils::NavigateToURL(browser(), url);
623
624 // Open the Find window with animations disabled.
625 FindBarWin::disable_animations_during_testing_ = true;
626 browser()->ShowFindBar();
627
628 // Simulate a user clearing the search string. Ideally, we should be
629 // simulating keypresses here for searching for something and pressing
630 // backspace, but that's been proven flaky in the past, so we go straight to
631 // tab_contents.
632 TabContents* tab_contents = browser()->GetSelectedTabContents();
633 // Stop the (non-existing) find operation, and clear the selection (which
634 // signals the UI is still active).
635 tab_contents->StopFinding(true);
636 // Make sure the Find UI flag hasn't been cleared, it must be so that the UI
637 // still responds to browser window resizing.
638 ASSERT_TRUE(tab_contents->find_ui_active());
639 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698