| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/test/ui/ui_test.h" | 5 #include "chrome/test/ui/ui_test.h" |
| 6 | 6 |
| 7 #if defined(OS_POSIX) | 7 #if defined(OS_POSIX) |
| 8 #include <signal.h> | 8 #include <signal.h> |
| 9 #include <sys/types.h> | 9 #include <sys/types.h> |
| 10 #endif | 10 #endif |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 scoped_refptr<BrowserProxy> window = | 290 scoped_refptr<BrowserProxy> window = |
| 291 automation()->GetBrowserWindow(window_index); | 291 automation()->GetBrowserWindow(window_index); |
| 292 ASSERT_TRUE(window.get()); | 292 ASSERT_TRUE(window.get()); |
| 293 scoped_refptr<TabProxy> tab_proxy(window->GetTab(tab_index)); | 293 scoped_refptr<TabProxy> tab_proxy(window->GetTab(tab_index)); |
| 294 ASSERT_TRUE(tab_proxy.get()); | 294 ASSERT_TRUE(tab_proxy.get()); |
| 295 EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, | 295 EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| 296 tab_proxy->NavigateToURLBlockUntilNavigationsComplete( | 296 tab_proxy->NavigateToURLBlockUntilNavigationsComplete( |
| 297 url, number_of_navigations)) << url.spec(); | 297 url, number_of_navigations)) << url.spec(); |
| 298 } | 298 } |
| 299 | 299 |
| 300 bool UITestBase::WaitForBrowserProcessToQuit(int timeout) { |
| 301 return launcher_->WaitForBrowserProcessToQuit(timeout); |
| 302 } |
| 303 |
| 300 bool UITestBase::WaitForBookmarkBarVisibilityChange(BrowserProxy* browser, | 304 bool UITestBase::WaitForBookmarkBarVisibilityChange(BrowserProxy* browser, |
| 301 bool wait_for_open) { | 305 bool wait_for_open) { |
| 302 const int kCycles = 10; | 306 const int kCycles = 10; |
| 303 for (int i = 0; i < kCycles; i++) { | 307 for (int i = 0; i < kCycles; i++) { |
| 304 bool visible = false; | 308 bool visible = false; |
| 305 bool animating = true; | 309 bool animating = true; |
| 306 if (!browser->GetBookmarkBarVisibility(&visible, &animating)) | 310 if (!browser->GetBookmarkBarVisibility(&visible, &animating)) |
| 307 return false; // Some error. | 311 return false; // Some error. |
| 308 if (visible == wait_for_open && !animating) | 312 if (visible == wait_for_open && !animating) |
| 309 return true; // Bookmark bar visibility change complete. | 313 return true; // Bookmark bar visibility change complete. |
| 310 | 314 |
| 311 // Give it a chance to catch up. | 315 // Give it a chance to catch up. |
| 312 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles); | 316 bool browser_survived = CrashAwareSleep( |
| 317 TestTimeouts::action_timeout_ms() / kCycles); |
| 318 EXPECT_TRUE(browser_survived); |
| 319 if (!browser_survived) |
| 320 return false; |
| 313 } | 321 } |
| 314 | 322 |
| 315 ADD_FAILURE() << "Timeout reached in WaitForBookmarkBarVisibilityChange"; | 323 ADD_FAILURE() << "Timeout reached in WaitForBookmarkBarVisibilityChange"; |
| 316 return false; | 324 return false; |
| 317 } | 325 } |
| 318 | 326 |
| 319 GURL UITestBase::GetActiveTabURL(int window_index) { | 327 GURL UITestBase::GetActiveTabURL(int window_index) { |
| 320 scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index)); | 328 scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index)); |
| 321 EXPECT_TRUE(tab_proxy.get()); | 329 EXPECT_TRUE(tab_proxy.get()); |
| 322 if (!tab_proxy.get()) | 330 if (!tab_proxy.get()) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 350 | 358 |
| 351 int active_tab_index = -1; | 359 int active_tab_index = -1; |
| 352 EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index)); | 360 EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index)); |
| 353 return active_tab_index; | 361 return active_tab_index; |
| 354 } | 362 } |
| 355 | 363 |
| 356 bool UITestBase::IsBrowserRunning() { | 364 bool UITestBase::IsBrowserRunning() { |
| 357 return launcher_->IsBrowserRunning(); | 365 return launcher_->IsBrowserRunning(); |
| 358 } | 366 } |
| 359 | 367 |
| 368 bool UITestBase::CrashAwareSleep(int timeout_ms) { |
| 369 return launcher_->CrashAwareSleep(timeout_ms); |
| 370 } |
| 371 |
| 360 int UITestBase::GetTabCount() { | 372 int UITestBase::GetTabCount() { |
| 361 return GetTabCount(0); | 373 return GetTabCount(0); |
| 362 } | 374 } |
| 363 | 375 |
| 364 int UITestBase::GetTabCount(int window_index) { | 376 int UITestBase::GetTabCount(int window_index) { |
| 365 scoped_refptr<BrowserProxy> window( | 377 scoped_refptr<BrowserProxy> window( |
| 366 automation()->GetBrowserWindow(window_index)); | 378 automation()->GetBrowserWindow(window_index)); |
| 367 EXPECT_TRUE(window.get()); | 379 EXPECT_TRUE(window.get()); |
| 368 if (!window.get()) | 380 if (!window.get()) |
| 369 return 0; | 381 return 0; |
| 370 | 382 |
| 371 int result = 0; | 383 int result = 0; |
| 372 EXPECT_TRUE(window->GetTabCount(&result)); | 384 EXPECT_TRUE(window->GetTabCount(&result)); |
| 373 | 385 |
| 374 return result; | 386 return result; |
| 375 } | 387 } |
| 376 | 388 |
| 377 void UITestBase::WaitUntilTabCount(int tab_count) { | 389 void UITestBase::WaitUntilTabCount(int tab_count) { |
| 378 const int kMaxIntervals = 10; | 390 const int kMaxIntervals = 10; |
| 379 const int kIntervalMs = TestTimeouts::action_timeout_ms() / kMaxIntervals; | 391 const int kIntervalMs = TestTimeouts::action_timeout_ms() / kMaxIntervals; |
| 380 | 392 |
| 381 for (int i = 0; i < kMaxIntervals; ++i) { | 393 for (int i = 0; i < kMaxIntervals; ++i) { |
| 394 bool browser_survived = CrashAwareSleep(kIntervalMs); |
| 395 EXPECT_TRUE(browser_survived); |
| 396 if (!browser_survived) |
| 397 return; |
| 382 if (GetTabCount() == tab_count) | 398 if (GetTabCount() == tab_count) |
| 383 return; | 399 return; |
| 384 | |
| 385 base::PlatformThread::Sleep(kIntervalMs); | |
| 386 } | 400 } |
| 387 | 401 |
| 388 ADD_FAILURE() << "Timeout reached in WaitUntilTabCount"; | 402 ADD_FAILURE() << "Timeout reached in WaitUntilTabCount"; |
| 389 } | 403 } |
| 390 | 404 |
| 391 FilePath UITestBase::GetDownloadDirectory() { | 405 FilePath UITestBase::GetDownloadDirectory() { |
| 392 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 406 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 393 EXPECT_TRUE(tab_proxy.get()); | 407 EXPECT_TRUE(tab_proxy.get()); |
| 394 if (!tab_proxy.get()) | 408 if (!tab_proxy.get()) |
| 395 return FilePath(); | 409 return FilePath(); |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 | 720 |
| 707 bool UITest::WaitUntilJavaScriptCondition(TabProxy* tab, | 721 bool UITest::WaitUntilJavaScriptCondition(TabProxy* tab, |
| 708 const std::wstring& frame_xpath, | 722 const std::wstring& frame_xpath, |
| 709 const std::wstring& jscript, | 723 const std::wstring& jscript, |
| 710 int timeout_ms) { | 724 int timeout_ms) { |
| 711 const int kIntervalMs = 250; | 725 const int kIntervalMs = 250; |
| 712 const int kMaxIntervals = timeout_ms / kIntervalMs; | 726 const int kMaxIntervals = timeout_ms / kIntervalMs; |
| 713 | 727 |
| 714 // Wait until the test signals it has completed. | 728 // Wait until the test signals it has completed. |
| 715 for (int i = 0; i < kMaxIntervals; ++i) { | 729 for (int i = 0; i < kMaxIntervals; ++i) { |
| 730 bool browser_survived = CrashAwareSleep(kIntervalMs); |
| 731 EXPECT_TRUE(browser_survived); |
| 732 if (!browser_survived) |
| 733 return false; |
| 734 |
| 716 bool done_value = false; | 735 bool done_value = false; |
| 717 bool success = tab->ExecuteAndExtractBool(frame_xpath, jscript, | 736 bool success = tab->ExecuteAndExtractBool(frame_xpath, jscript, |
| 718 &done_value); | 737 &done_value); |
| 719 EXPECT_TRUE(success); | 738 EXPECT_TRUE(success); |
| 720 if (!success) | 739 if (!success) |
| 721 return false; | 740 return false; |
| 722 if (done_value) | 741 if (done_value) |
| 723 return true; | 742 return true; |
| 724 | |
| 725 base::PlatformThread::Sleep(kIntervalMs); | |
| 726 } | 743 } |
| 727 | 744 |
| 728 ADD_FAILURE() << "Timeout reached in WaitUntilJavaScriptCondition"; | 745 ADD_FAILURE() << "Timeout reached in WaitUntilJavaScriptCondition"; |
| 729 return false; | 746 return false; |
| 730 } | 747 } |
| 731 | 748 |
| 732 bool UITest::WaitUntilCookieValue(TabProxy* tab, | 749 bool UITest::WaitUntilCookieValue(TabProxy* tab, |
| 733 const GURL& url, | 750 const GURL& url, |
| 734 const char* cookie_name, | 751 const char* cookie_name, |
| 735 int timeout_ms, | 752 int timeout_ms, |
| 736 const char* expected_value) { | 753 const char* expected_value) { |
| 737 const int kIntervalMs = 250; | 754 const int kIntervalMs = 250; |
| 738 const int kMaxIntervals = timeout_ms / kIntervalMs; | 755 const int kMaxIntervals = timeout_ms / kIntervalMs; |
| 739 | 756 |
| 740 std::string cookie_value; | 757 std::string cookie_value; |
| 741 for (int i = 0; i < kMaxIntervals; ++i) { | 758 for (int i = 0; i < kMaxIntervals; ++i) { |
| 759 bool browser_survived = CrashAwareSleep(kIntervalMs); |
| 760 EXPECT_TRUE(browser_survived); |
| 761 if (!browser_survived) |
| 762 return false; |
| 763 |
| 742 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); | 764 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); |
| 743 if (cookie_value == expected_value) | 765 if (cookie_value == expected_value) |
| 744 return true; | 766 return true; |
| 745 | |
| 746 base::PlatformThread::Sleep(kIntervalMs); | |
| 747 } | 767 } |
| 748 | 768 |
| 749 ADD_FAILURE() << "Timeout reached in WaitUntilCookieValue"; | 769 ADD_FAILURE() << "Timeout reached in WaitUntilCookieValue"; |
| 750 return false; | 770 return false; |
| 751 } | 771 } |
| 752 | 772 |
| 753 std::string UITest::WaitUntilCookieNonEmpty(TabProxy* tab, | 773 std::string UITest::WaitUntilCookieNonEmpty(TabProxy* tab, |
| 754 const GURL& url, | 774 const GURL& url, |
| 755 const char* cookie_name, | 775 const char* cookie_name, |
| 756 int timeout_ms) { | 776 int timeout_ms) { |
| 757 const int kIntervalMs = 250; | 777 const int kIntervalMs = 250; |
| 758 const int kMaxIntervals = timeout_ms / kIntervalMs; | 778 const int kMaxIntervals = timeout_ms / kIntervalMs; |
| 759 | 779 |
| 760 for (int i = 0; i < kMaxIntervals; ++i) { | 780 for (int i = 0; i < kMaxIntervals; ++i) { |
| 781 bool browser_survived = CrashAwareSleep(kIntervalMs); |
| 782 EXPECT_TRUE(browser_survived); |
| 783 if (!browser_survived) |
| 784 return std::string(); |
| 785 |
| 761 std::string cookie_value; | 786 std::string cookie_value; |
| 762 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); | 787 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); |
| 763 if (!cookie_value.empty()) | 788 if (!cookie_value.empty()) |
| 764 return cookie_value; | 789 return cookie_value; |
| 765 | |
| 766 base::PlatformThread::Sleep(kIntervalMs); | |
| 767 } | 790 } |
| 768 | 791 |
| 769 ADD_FAILURE() << "Timeout reached in WaitUntilCookieNonEmpty"; | 792 ADD_FAILURE() << "Timeout reached in WaitUntilCookieNonEmpty"; |
| 770 return std::string(); | 793 return std::string(); |
| 771 } | 794 } |
| 772 | 795 |
| 773 bool UITest::WaitForDownloadShelfVisible(BrowserProxy* browser) { | 796 bool UITest::WaitForDownloadShelfVisible(BrowserProxy* browser) { |
| 774 return WaitForDownloadShelfVisibilityChange(browser, true); | 797 return WaitForDownloadShelfVisibilityChange(browser, true); |
| 775 } | 798 } |
| 776 | 799 |
| 777 bool UITest::WaitForDownloadShelfInvisible(BrowserProxy* browser) { | 800 bool UITest::WaitForDownloadShelfInvisible(BrowserProxy* browser) { |
| 778 return WaitForDownloadShelfVisibilityChange(browser, false); | 801 return WaitForDownloadShelfVisibilityChange(browser, false); |
| 779 } | 802 } |
| 780 | 803 |
| 781 bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser, | 804 bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser, |
| 782 bool wait_for_open) { | 805 bool wait_for_open) { |
| 783 const int kCycles = 10; | 806 const int kCycles = 10; |
| 784 for (int i = 0; i < kCycles; i++) { | 807 for (int i = 0; i < kCycles; i++) { |
| 785 bool visible = false; | 808 bool visible = false; |
| 786 if (!browser->IsFindWindowFullyVisible(&visible)) | 809 if (!browser->IsFindWindowFullyVisible(&visible)) |
| 787 return false; // Some error. | 810 return false; // Some error. |
| 788 if (visible == wait_for_open) | 811 if (visible == wait_for_open) |
| 789 return true; // Find window visibility change complete. | 812 return true; // Find window visibility change complete. |
| 790 | 813 |
| 791 // Give it a chance to catch up. | 814 // Give it a chance to catch up. |
| 792 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles); | 815 bool browser_survived = CrashAwareSleep( |
| 816 TestTimeouts::action_timeout_ms() / kCycles); |
| 817 EXPECT_TRUE(browser_survived); |
| 818 if (!browser_survived) |
| 819 return false; |
| 793 } | 820 } |
| 794 | 821 |
| 795 ADD_FAILURE() << "Timeout reached in WaitForFindWindowVisibilityChange"; | 822 ADD_FAILURE() << "Timeout reached in WaitForFindWindowVisibilityChange"; |
| 796 return false; | 823 return false; |
| 797 } | 824 } |
| 798 | 825 |
| 799 void UITest::TerminateBrowser() { | 826 void UITest::TerminateBrowser() { |
| 800 launcher_->TerminateBrowser(); | 827 launcher_->TerminateBrowser(); |
| 801 } | 828 } |
| 802 | 829 |
| 803 void UITest::NavigateToURLAsync(const GURL& url) { | 830 void UITest::NavigateToURLAsync(const GURL& url) { |
| 804 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 831 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 805 ASSERT_TRUE(tab_proxy.get()); | 832 ASSERT_TRUE(tab_proxy.get()); |
| 806 ASSERT_TRUE(tab_proxy->NavigateToURLAsync(url)); | 833 ASSERT_TRUE(tab_proxy->NavigateToURLAsync(url)); |
| 807 } | 834 } |
| 808 | 835 |
| 809 bool UITest::WaitForDownloadShelfVisibilityChange(BrowserProxy* browser, | 836 bool UITest::WaitForDownloadShelfVisibilityChange(BrowserProxy* browser, |
| 810 bool wait_for_open) { | 837 bool wait_for_open) { |
| 811 const int kCycles = 10; | 838 const int kCycles = 10; |
| 812 int fail_count = 0; | 839 int fail_count = 0; |
| 813 int incorrect_state_count = 0; | 840 int incorrect_state_count = 0; |
| 814 base::Time start = base::Time::Now(); | 841 base::Time start = base::Time::Now(); |
| 815 for (int i = 0; i < kCycles; i++) { | 842 for (int i = 0; i < kCycles; i++) { |
| 843 // Give it a chance to catch up. |
| 844 bool browser_survived = CrashAwareSleep( |
| 845 TestTimeouts::action_timeout_ms() / kCycles); |
| 846 EXPECT_TRUE(browser_survived); |
| 847 if (!browser_survived) { |
| 848 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() |
| 849 << " seconds" |
| 850 << " call failed " << fail_count << " times" |
| 851 << " state was incorrect " << incorrect_state_count << " times"; |
| 852 ADD_FAILURE() << "Browser failed in " << __FUNCTION__; |
| 853 return false; |
| 854 } |
| 855 |
| 816 bool visible = !wait_for_open; | 856 bool visible = !wait_for_open; |
| 817 if (!browser->IsShelfVisible(&visible)) { | 857 if (!browser->IsShelfVisible(&visible)) { |
| 818 fail_count++; | 858 fail_count++; |
| 819 continue; | 859 continue; |
| 820 } | 860 } |
| 821 if (visible == wait_for_open) { | 861 if (visible == wait_for_open) { |
| 822 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() | 862 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() |
| 823 << " seconds" | 863 << " seconds" |
| 824 << " call failed " << fail_count << " times" | 864 << " call failed " << fail_count << " times" |
| 825 << " state was incorrect " << incorrect_state_count << " times"; | 865 << " state was incorrect " << incorrect_state_count << " times"; |
| 826 return true; // Got the download shelf. | 866 return true; // Got the download shelf. |
| 827 } | 867 } |
| 828 incorrect_state_count++; | 868 incorrect_state_count++; |
| 829 | |
| 830 // Give it a chance to catch up. | |
| 831 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles); | |
| 832 } | 869 } |
| 833 | 870 |
| 834 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() | 871 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() |
| 835 << " seconds" | 872 << " seconds" |
| 836 << " call failed " << fail_count << " times" | 873 << " call failed " << fail_count << " times" |
| 837 << " state was incorrect " << incorrect_state_count << " times"; | 874 << " state was incorrect " << incorrect_state_count << " times"; |
| 838 ADD_FAILURE() << "Timeout reached in " << __FUNCTION__; | 875 ADD_FAILURE() << "Timeout reached in " << __FUNCTION__; |
| 839 return false; | 876 return false; |
| 840 } | 877 } |
| OLD | NEW |