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/string_util.h" | |
6 #include "chrome/common/url_constants.h" | |
7 #include "chrome/test/automation/automation_proxy.h" | |
8 #include "chrome/test/automation/browser_proxy.h" | |
9 #include "chrome/test/automation/tab_proxy.h" | |
10 #include "chrome/test/ui/ui_test.h" | |
11 #include "grit/generated_resources.h" | |
12 #include "net/base/net_util.h" | |
13 #include "net/test/test_server.h" | |
14 | |
15 namespace { | |
16 | |
17 class SessionHistoryTest : public UITest { | |
18 protected: | |
19 SessionHistoryTest() | |
20 : test_server_(net::TestServer::TYPE_HTTP, | |
21 net::TestServer::kLocalhost, | |
22 FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { | |
23 dom_automation_enabled_ = true; | |
24 } | |
25 | |
26 virtual void SetUp() { | |
27 UITest::SetUp(); | |
28 | |
29 window_ = automation()->GetBrowserWindow(0); | |
30 ASSERT_TRUE(window_.get()); | |
31 | |
32 tab_ = window_->GetActiveTab(); | |
33 ASSERT_TRUE(tab_.get()); | |
34 } | |
35 | |
36 // Simulate clicking a link. Only works on the frames.html testserver page. | |
37 void ClickLink(std::string node_id) { | |
38 GURL url("javascript:clickLink('" + node_id + "')"); | |
39 ASSERT_TRUE(tab_->NavigateToURL(url)); | |
40 } | |
41 | |
42 // Simulate filling in form data. Only works on the frames.html page with | |
43 // subframe = form.html, and on form.html itself. | |
44 void FillForm(std::string node_id, std::string value) { | |
45 GURL url("javascript:fillForm('" + node_id + "', '" + value + "')"); | |
46 // This will return immediately, but since the JS executes synchronously | |
47 // on the renderer, it will complete before the next navigate message is | |
48 // processed. | |
49 ASSERT_TRUE(tab_->NavigateToURLAsync(url)); | |
50 } | |
51 | |
52 // Simulate submitting a form. Only works on the frames.html page with | |
53 // subframe = form.html, and on form.html itself. | |
54 void SubmitForm(std::string node_id) { | |
55 GURL url("javascript:submitForm('" + node_id + "')"); | |
56 ASSERT_TRUE(tab_->NavigateToURL(url)); | |
57 } | |
58 | |
59 // Navigate session history using history.go(distance). | |
60 void JavascriptGo(std::string distance) { | |
61 GURL url("javascript:history.go('" + distance + "')"); | |
62 ASSERT_TRUE(tab_->NavigateToURL(url)); | |
63 } | |
64 | |
65 std::wstring GetTabTitle() { | |
66 std::wstring title; | |
67 EXPECT_TRUE(tab_->GetTabTitle(&title)); | |
68 return title; | |
69 } | |
70 | |
71 GURL GetTabURL() { | |
72 GURL url; | |
73 EXPECT_TRUE(tab_->GetCurrentURL(&url)); | |
74 return url; | |
75 } | |
76 | |
77 protected: | |
78 scoped_refptr<BrowserProxy> window_; | |
79 scoped_refptr<TabProxy> tab_; | |
80 | |
81 net::TestServer test_server_; | |
82 }; | |
83 | |
84 #if defined(OS_WIN) || defined(OS_MACOSX) | |
85 // See http://crbug.com/61619 on windows. | |
86 // See http://crbug.com/102094 on mac. | |
87 #define MAYBE_BasicBackForward DISABLED_BasicBackForward | |
88 #else | |
89 #define MAYBE_BasicBackForward BasicBackForward | |
90 #endif | |
91 | |
92 TEST_F(SessionHistoryTest, MAYBE_BasicBackForward) { | |
93 ASSERT_TRUE(test_server_.Start()); | |
94 | |
95 // about:blank should be loaded first. | |
96 ASSERT_FALSE(tab_->GoBack()); | |
97 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
98 | |
99 ASSERT_TRUE(tab_->NavigateToURL( | |
100 test_server_.GetURL("files/session_history/bot1.html"))); | |
101 EXPECT_EQ(L"bot1", GetTabTitle()); | |
102 | |
103 ASSERT_TRUE(tab_->NavigateToURL( | |
104 test_server_.GetURL("files/session_history/bot2.html"))); | |
105 EXPECT_EQ(L"bot2", GetTabTitle()); | |
106 | |
107 ASSERT_TRUE(tab_->NavigateToURL( | |
108 test_server_.GetURL("files/session_history/bot3.html"))); | |
109 EXPECT_EQ(L"bot3", GetTabTitle()); | |
110 | |
111 // history is [blank, bot1, bot2, *bot3] | |
112 | |
113 ASSERT_TRUE(tab_->GoBack()); | |
114 EXPECT_EQ(L"bot2", GetTabTitle()); | |
115 | |
116 ASSERT_TRUE(tab_->GoBack()); | |
117 EXPECT_EQ(L"bot1", GetTabTitle()); | |
118 | |
119 ASSERT_TRUE(tab_->GoForward()); | |
120 EXPECT_EQ(L"bot2", GetTabTitle()); | |
121 | |
122 ASSERT_TRUE(tab_->GoBack()); | |
123 EXPECT_EQ(L"bot1", GetTabTitle()); | |
124 | |
125 ASSERT_TRUE(tab_->NavigateToURL( | |
126 test_server_.GetURL("files/session_history/bot3.html"))); | |
127 EXPECT_EQ(L"bot3", GetTabTitle()); | |
128 | |
129 // history is [blank, bot1, *bot3] | |
130 | |
131 ASSERT_FALSE(tab_->GoForward()); | |
132 EXPECT_EQ(L"bot3", GetTabTitle()); | |
133 | |
134 ASSERT_TRUE(tab_->GoBack()); | |
135 EXPECT_EQ(L"bot1", GetTabTitle()); | |
136 | |
137 ASSERT_TRUE(tab_->GoBack()); | |
138 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
139 | |
140 ASSERT_FALSE(tab_->GoBack()); | |
141 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
142 | |
143 ASSERT_TRUE(tab_->GoForward()); | |
144 EXPECT_EQ(L"bot1", GetTabTitle()); | |
145 | |
146 ASSERT_TRUE(tab_->GoForward()); | |
147 EXPECT_EQ(L"bot3", GetTabTitle()); | |
148 } | |
149 | |
150 // Test that back/forward works when navigating in subframes. | |
151 #if defined(OS_WIN) | |
152 // http://crbug.com/48833 | |
153 #define FrameBackForward DISABLED_FrameBackForward | |
154 #endif | |
155 TEST_F(SessionHistoryTest, FrameBackForward) { | |
156 ASSERT_TRUE(test_server_.Start()); | |
157 | |
158 // about:blank should be loaded first. | |
159 GURL home(homepage()); | |
160 ASSERT_FALSE(tab_->GoBack()); | |
161 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
162 EXPECT_EQ(home, GetTabURL()); | |
163 | |
164 GURL frames(test_server_.GetURL("files/session_history/frames.html")); | |
165 ASSERT_TRUE(tab_->NavigateToURL(frames)); | |
166 EXPECT_EQ(L"bot1", GetTabTitle()); | |
167 EXPECT_EQ(frames, GetTabURL()); | |
168 | |
169 ClickLink("abot2"); | |
170 EXPECT_EQ(L"bot2", GetTabTitle()); | |
171 EXPECT_EQ(frames, GetTabURL()); | |
172 | |
173 ClickLink("abot3"); | |
174 EXPECT_EQ(L"bot3", GetTabTitle()); | |
175 EXPECT_EQ(frames, GetTabURL()); | |
176 | |
177 // history is [blank, bot1, bot2, *bot3] | |
178 | |
179 ASSERT_TRUE(tab_->GoBack()); | |
180 EXPECT_EQ(L"bot2", GetTabTitle()); | |
181 EXPECT_EQ(frames, GetTabURL()); | |
182 | |
183 ASSERT_TRUE(tab_->GoBack()); | |
184 EXPECT_EQ(L"bot1", GetTabTitle()); | |
185 EXPECT_EQ(frames, GetTabURL()); | |
186 | |
187 ASSERT_TRUE(tab_->GoBack()); | |
188 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
189 EXPECT_EQ(home, GetTabURL()); | |
190 | |
191 ASSERT_TRUE(tab_->GoForward()); | |
192 EXPECT_EQ(L"bot1", GetTabTitle()); | |
193 EXPECT_EQ(frames, GetTabURL()); | |
194 | |
195 ASSERT_TRUE(tab_->GoForward()); | |
196 EXPECT_EQ(L"bot2", GetTabTitle()); | |
197 EXPECT_EQ(frames, GetTabURL()); | |
198 | |
199 ClickLink("abot1"); | |
200 EXPECT_EQ(L"bot1", GetTabTitle()); | |
201 EXPECT_EQ(frames, GetTabURL()); | |
202 | |
203 // history is [blank, bot1, bot2, *bot1] | |
204 | |
205 ASSERT_FALSE(tab_->GoForward()); | |
206 EXPECT_EQ(L"bot1", GetTabTitle()); | |
207 EXPECT_EQ(frames, GetTabURL()); | |
208 | |
209 ASSERT_TRUE(tab_->GoBack()); | |
210 EXPECT_EQ(L"bot2", GetTabTitle()); | |
211 EXPECT_EQ(frames, GetTabURL()); | |
212 | |
213 ASSERT_TRUE(tab_->GoBack()); | |
214 EXPECT_EQ(L"bot1", GetTabTitle()); | |
215 EXPECT_EQ(frames, GetTabURL()); | |
216 } | |
217 | |
218 // See http://crbug.com/61619 | |
219 // Test that back/forward preserves POST data and document state in subframes. | |
220 TEST_F(SessionHistoryTest, DISABLED_FrameFormBackForward) { | |
221 ASSERT_TRUE(test_server_.Start()); | |
222 | |
223 // about:blank should be loaded first. | |
224 ASSERT_FALSE(tab_->GoBack()); | |
225 EXPECT_EQ(L"", GetTabTitle()); | |
226 | |
227 GURL frames(test_server_.GetURL("files/session_history/frames.html")); | |
228 ASSERT_TRUE(tab_->NavigateToURL(frames)); | |
229 EXPECT_EQ(L"bot1", GetTabTitle()); | |
230 | |
231 ClickLink("aform"); | |
232 EXPECT_EQ(L"form", GetTabTitle()); | |
233 EXPECT_EQ(frames, GetTabURL()); | |
234 | |
235 SubmitForm("isubmit"); | |
236 EXPECT_EQ(L"text=&select=a", GetTabTitle()); | |
237 EXPECT_EQ(frames, GetTabURL()); | |
238 | |
239 ASSERT_TRUE(tab_->GoBack()); | |
240 EXPECT_EQ(L"form", GetTabTitle()); | |
241 EXPECT_EQ(frames, GetTabURL()); | |
242 | |
243 // history is [blank, bot1, *form, post] | |
244 | |
245 ClickLink("abot2"); | |
246 EXPECT_EQ(L"bot2", GetTabTitle()); | |
247 EXPECT_EQ(frames, GetTabURL()); | |
248 | |
249 // history is [blank, bot1, form, *bot2] | |
250 | |
251 ASSERT_TRUE(tab_->GoBack()); | |
252 EXPECT_EQ(L"form", GetTabTitle()); | |
253 EXPECT_EQ(frames, GetTabURL()); | |
254 | |
255 SubmitForm("isubmit"); | |
256 EXPECT_EQ(L"text=&select=a", GetTabTitle()); | |
257 EXPECT_EQ(frames, GetTabURL()); | |
258 | |
259 // history is [blank, bot1, form, *post] | |
260 | |
261 if (false) { | |
262 // TODO(mpcomplete): reenable this when WebKit bug 10199 is fixed: | |
263 // "returning to a POST result within a frame does a GET instead of a POST" | |
264 ClickLink("abot2"); | |
265 EXPECT_EQ(L"bot2", GetTabTitle()); | |
266 EXPECT_EQ(frames, GetTabURL()); | |
267 | |
268 ASSERT_TRUE(tab_->GoBack()); | |
269 EXPECT_EQ(L"text=&select=a", GetTabTitle()); | |
270 EXPECT_EQ(frames, GetTabURL()); | |
271 } | |
272 } | |
273 | |
274 // TODO(mpcomplete): enable this when Bug 734372 is fixed: | |
275 // "Doing a session history navigation does not restore newly-created subframe | |
276 // document state" | |
277 // Test that back/forward preserves POST data and document state when navigating | |
278 // across frames (ie, from frame -> nonframe). | |
279 // Hangs, see http://crbug.com/45058. | |
280 TEST_F(SessionHistoryTest, DISABLED_CrossFrameFormBackForward) { | |
281 ASSERT_TRUE(test_server_.Start()); | |
282 | |
283 // about:blank should be loaded first. | |
284 ASSERT_FALSE(tab_->GoBack()); | |
285 EXPECT_EQ(L"", GetTabTitle()); | |
286 | |
287 GURL frames(test_server_.GetURL("files/session_history/frames.html")); | |
288 ASSERT_TRUE(tab_->NavigateToURL(frames)); | |
289 EXPECT_EQ(L"bot1", GetTabTitle()); | |
290 | |
291 ClickLink("aform"); | |
292 EXPECT_EQ(L"form", GetTabTitle()); | |
293 EXPECT_EQ(frames, GetTabURL()); | |
294 | |
295 SubmitForm("isubmit"); | |
296 EXPECT_EQ(L"text=&select=a", GetTabTitle()); | |
297 EXPECT_EQ(frames, GetTabURL()); | |
298 | |
299 ASSERT_TRUE(tab_->GoBack()); | |
300 EXPECT_EQ(L"form", GetTabTitle()); | |
301 EXPECT_EQ(frames, GetTabURL()); | |
302 | |
303 // history is [blank, bot1, *form, post] | |
304 | |
305 // ClickLink(L"abot2"); | |
306 GURL bot2("files/session_history/bot2.html"); | |
307 ASSERT_TRUE(tab_->NavigateToURL(bot2)); | |
308 EXPECT_EQ(L"bot2", GetTabTitle()); | |
309 EXPECT_EQ(bot2, GetTabURL()); | |
310 | |
311 // history is [blank, bot1, form, *bot2] | |
312 | |
313 ASSERT_TRUE(tab_->GoBack()); | |
314 EXPECT_EQ(L"form", GetTabTitle()); | |
315 EXPECT_EQ(frames, GetTabURL()); | |
316 | |
317 SubmitForm("isubmit"); | |
318 EXPECT_EQ(L"text=&select=a", GetTabTitle()); | |
319 EXPECT_EQ(frames, GetTabURL()); | |
320 } | |
321 | |
322 | |
323 #if defined(OS_WIN) | |
324 // See http://crbug.com/61619 | |
325 #define MAYBE_FragmentBackForward DISABLED_FragmentBackForward | |
326 #else | |
327 #define MAYBE_FragmentBackForward FragmentBackForward | |
328 #endif | |
329 | |
330 // Test that back/forward entries are created for reference fragment | |
331 // navigations. Bug 730379. | |
332 TEST_F(SessionHistoryTest, MAYBE_FragmentBackForward) { | |
333 ASSERT_TRUE(test_server_.Start()); | |
334 | |
335 // about:blank should be loaded first. | |
336 ASSERT_FALSE(tab_->GoBack()); | |
337 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
338 | |
339 GURL fragment(test_server_.GetURL("files/session_history/fragment.html")); | |
340 ASSERT_TRUE(tab_->NavigateToURL(fragment)); | |
341 EXPECT_EQ(L"fragment", GetTabTitle()); | |
342 EXPECT_EQ(fragment, GetTabURL()); | |
343 | |
344 GURL::Replacements ref_params; | |
345 | |
346 ref_params.SetRef("a", url_parse::Component(0, 1)); | |
347 GURL fragment_a(fragment.ReplaceComponents(ref_params)); | |
348 ASSERT_TRUE(tab_->NavigateToURL(fragment_a)); | |
349 EXPECT_EQ(L"fragment", GetTabTitle()); | |
350 EXPECT_EQ(fragment_a, GetTabURL()); | |
351 | |
352 ref_params.SetRef("b", url_parse::Component(0, 1)); | |
353 GURL fragment_b(fragment.ReplaceComponents(ref_params)); | |
354 ASSERT_TRUE(tab_->NavigateToURL(fragment_b)); | |
355 EXPECT_EQ(L"fragment", GetTabTitle()); | |
356 EXPECT_EQ(fragment_b, GetTabURL()); | |
357 | |
358 ref_params.SetRef("c", url_parse::Component(0, 1)); | |
359 GURL fragment_c(fragment.ReplaceComponents(ref_params)); | |
360 ASSERT_TRUE(tab_->NavigateToURL(fragment_c)); | |
361 EXPECT_EQ(L"fragment", GetTabTitle()); | |
362 EXPECT_EQ(fragment_c, GetTabURL()); | |
363 | |
364 // history is [blank, fragment, fragment#a, fragment#b, *fragment#c] | |
365 | |
366 ASSERT_TRUE(tab_->GoBack()); | |
367 EXPECT_EQ(fragment_b, GetTabURL()); | |
368 | |
369 ASSERT_TRUE(tab_->GoBack()); | |
370 EXPECT_EQ(fragment_a, GetTabURL()); | |
371 | |
372 ASSERT_TRUE(tab_->GoBack()); | |
373 EXPECT_EQ(fragment, GetTabURL()); | |
374 | |
375 ASSERT_TRUE(tab_->GoForward()); | |
376 EXPECT_EQ(fragment_a, GetTabURL()); | |
377 | |
378 GURL bot3(test_server_.GetURL("files/session_history/bot3.html")); | |
379 ASSERT_TRUE(tab_->NavigateToURL(bot3)); | |
380 EXPECT_EQ(L"bot3", GetTabTitle()); | |
381 EXPECT_EQ(bot3, GetTabURL()); | |
382 | |
383 // history is [blank, fragment, fragment#a, bot3] | |
384 | |
385 ASSERT_FALSE(tab_->GoForward()); | |
386 EXPECT_EQ(bot3, GetTabURL()); | |
387 | |
388 ASSERT_TRUE(tab_->GoBack()); | |
389 EXPECT_EQ(fragment_a, GetTabURL()); | |
390 | |
391 ASSERT_TRUE(tab_->GoBack()); | |
392 EXPECT_EQ(fragment, GetTabURL()); | |
393 } | |
394 | |
395 // Test that the javascript window.history object works. | |
396 // NOTE: history.go(N) does not do anything if N is outside the bounds of the | |
397 // back/forward list (such as trigger our start/stop loading events). This | |
398 // means the test will hang if it attempts to navigate too far forward or back, | |
399 // since we'll be waiting forever for a load stop event. | |
400 // | |
401 // TODO(brettw) bug 50648: fix flakyness. This test seems like it was failing | |
402 // about 1/4 of the time on Vista by failing to execute JavascriptGo (see bug). | |
403 TEST_F(SessionHistoryTest, DISABLED_JavascriptHistory) { | |
404 ASSERT_TRUE(test_server_.Start()); | |
405 | |
406 // about:blank should be loaded first. | |
407 ASSERT_FALSE(tab_->GoBack()); | |
408 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
409 | |
410 ASSERT_TRUE(tab_->NavigateToURL( | |
411 test_server_.GetURL("files/session_history/bot1.html"))); | |
412 EXPECT_EQ(L"bot1", GetTabTitle()); | |
413 | |
414 ASSERT_TRUE(tab_->NavigateToURL( | |
415 test_server_.GetURL("files/session_history/bot2.html"))); | |
416 EXPECT_EQ(L"bot2", GetTabTitle()); | |
417 | |
418 ASSERT_TRUE(tab_->NavigateToURL( | |
419 test_server_.GetURL("files/session_history/bot3.html"))); | |
420 EXPECT_EQ(L"bot3", GetTabTitle()); | |
421 | |
422 // history is [blank, bot1, bot2, *bot3] | |
423 | |
424 JavascriptGo("-1"); | |
425 EXPECT_EQ(L"bot2", GetTabTitle()); | |
426 | |
427 JavascriptGo("-1"); | |
428 EXPECT_EQ(L"bot1", GetTabTitle()); | |
429 | |
430 JavascriptGo("1"); | |
431 EXPECT_EQ(L"bot2", GetTabTitle()); | |
432 | |
433 JavascriptGo("-1"); | |
434 EXPECT_EQ(L"bot1", GetTabTitle()); | |
435 | |
436 JavascriptGo("2"); | |
437 EXPECT_EQ(L"bot3", GetTabTitle()); | |
438 | |
439 // history is [blank, bot1, bot2, *bot3] | |
440 | |
441 JavascriptGo("-3"); | |
442 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
443 | |
444 ASSERT_FALSE(tab_->GoBack()); | |
445 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
446 | |
447 JavascriptGo("1"); | |
448 EXPECT_EQ(L"bot1", GetTabTitle()); | |
449 | |
450 ASSERT_TRUE(tab_->NavigateToURL( | |
451 test_server_.GetURL("files/session_history/bot3.html"))); | |
452 EXPECT_EQ(L"bot3", GetTabTitle()); | |
453 | |
454 // history is [blank, bot1, *bot3] | |
455 | |
456 ASSERT_FALSE(tab_->GoForward()); | |
457 EXPECT_EQ(L"bot3", GetTabTitle()); | |
458 | |
459 JavascriptGo("-1"); | |
460 EXPECT_EQ(L"bot1", GetTabTitle()); | |
461 | |
462 JavascriptGo("-1"); | |
463 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
464 | |
465 ASSERT_FALSE(tab_->GoBack()); | |
466 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
467 | |
468 JavascriptGo("1"); | |
469 EXPECT_EQ(L"bot1", GetTabTitle()); | |
470 | |
471 JavascriptGo("1"); | |
472 EXPECT_EQ(L"bot3", GetTabTitle()); | |
473 | |
474 // TODO(creis): Test that JavaScript history navigations work across tab | |
475 // types. For example, load about:network in a tab, then a real page, then | |
476 // try to go back and forward with JavaScript. Bug 1136715. | |
477 // (Hard to test right now, because pages like about:network cause the | |
478 // TabProxy to hang. This is because they do not appear to use the | |
479 // NotificationService.) | |
480 } | |
481 | |
482 // This test is failing consistently. See http://crbug.com/22560 | |
483 TEST_F(SessionHistoryTest, FAILS_LocationReplace) { | |
484 ASSERT_TRUE(test_server_.Start()); | |
485 | |
486 // Test that using location.replace doesn't leave the title of the old page | |
487 // visible. | |
488 ASSERT_TRUE(tab_->NavigateToURL(test_server_.GetURL( | |
489 "files/session_history/replace.html?no-title.html"))); | |
490 EXPECT_EQ(L"", GetTabTitle()); | |
491 } | |
492 | |
493 // This test is flaky. See bug 22111. | |
494 TEST_F(SessionHistoryTest, DISABLED_HistorySearchXSS) { | |
495 // about:blank should be loaded first. | |
496 ASSERT_FALSE(tab_->GoBack()); | |
497 EXPECT_EQ(L"about:blank", GetTabTitle()); | |
498 | |
499 GURL url(std::string(chrome::kChromeUIHistoryURL) + | |
500 "#q=%3Cimg%20src%3Dx%3Ax%20onerror%3D%22document.title%3D'XSS'%22%3E"); | |
501 ASSERT_TRUE(tab_->NavigateToURL(url)); | |
502 // Mainly, this is to ensure we send a synchronous message to the renderer | |
503 // so that we're not susceptible (less susceptible?) to a race condition. | |
504 // Should a race condition ever trigger, it won't result in flakiness. | |
505 int num = tab_->FindInPage(L"<img", FWD, CASE_SENSITIVE, false, NULL); | |
506 EXPECT_GT(num, 0); | |
507 EXPECT_EQ(L"History", GetTabTitle()); | |
508 } | |
509 | |
510 #if defined(OS_WIN) | |
511 // See http://crbug.com/61619 | |
512 #define MAYBE_LocationChangeInSubframe DISABLED_LocationChangeInSubframe | |
513 #else | |
514 #define MAYBE_LocationChangeInSubframe LocationChangeInSubframe | |
515 #endif | |
516 | |
517 TEST_F(SessionHistoryTest, MAYBE_LocationChangeInSubframe) { | |
518 ASSERT_TRUE(test_server_.Start()); | |
519 | |
520 ASSERT_TRUE(tab_->NavigateToURL(test_server_.GetURL( | |
521 "files/session_history/location_redirect.html"))); | |
522 EXPECT_EQ(L"Default Title", GetTabTitle()); | |
523 | |
524 ASSERT_TRUE(tab_->NavigateToURL(GURL( | |
525 "javascript:void(frames[0].navigate())"))); | |
526 EXPECT_EQ(L"foo", GetTabTitle()); | |
527 | |
528 ASSERT_TRUE(tab_->GoBack()); | |
529 EXPECT_EQ(L"Default Title", GetTabTitle()); | |
530 } | |
531 | |
532 // http://code.google.com/p/chromium/issues/detail?id=56267 | |
533 TEST_F(SessionHistoryTest, DISABLED_HistoryLength) { | |
534 ASSERT_TRUE(test_server_.Start()); | |
535 | |
536 int length; | |
537 ASSERT_TRUE(tab_->ExecuteAndExtractInt( | |
538 L"", L"domAutomationController.send(history.length)", &length)); | |
539 EXPECT_EQ(1, length); | |
540 | |
541 ASSERT_TRUE(tab_->NavigateToURL(test_server_.GetURL("files/title1.html"))); | |
542 | |
543 ASSERT_TRUE(tab_->ExecuteAndExtractInt( | |
544 L"", L"domAutomationController.send(history.length)", &length)); | |
545 EXPECT_EQ(2, length); | |
546 | |
547 // Now test that history.length is updated when the navigation is committed. | |
548 ASSERT_TRUE(tab_->NavigateToURL(test_server_.GetURL( | |
549 "files/session_history/record_length.html"))); | |
550 ASSERT_TRUE(tab_->ExecuteAndExtractInt( | |
551 L"", L"domAutomationController.send(history.length)", &length)); | |
552 EXPECT_EQ(3, length); | |
553 ASSERT_TRUE(tab_->ExecuteAndExtractInt( | |
554 L"", L"domAutomationController.send(history_length)", &length)); | |
555 EXPECT_EQ(3, length); | |
556 | |
557 ASSERT_TRUE(tab_->GoBack()); | |
558 ASSERT_TRUE(tab_->GoBack()); | |
559 | |
560 // Ensure history.length is properly truncated. | |
561 ASSERT_TRUE(tab_->NavigateToURL(test_server_.GetURL("files/title2.html"))); | |
562 ASSERT_TRUE(tab_->ExecuteAndExtractInt( | |
563 L"", L"domAutomationController.send(history.length)", &length)); | |
564 EXPECT_EQ(2, length); | |
565 } | |
566 | |
567 } // namespace | |
OLD | NEW |