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

Side by Side Diff: chrome/test/ui/ui_test.cc

Issue 6689014: GTTF: Detect browser crashes on shutdown in UI tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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
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
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
304 bool UITestBase::WaitForBookmarkBarVisibilityChange(BrowserProxy* browser, 300 bool UITestBase::WaitForBookmarkBarVisibilityChange(BrowserProxy* browser,
305 bool wait_for_open) { 301 bool wait_for_open) {
306 const int kCycles = 10; 302 const int kCycles = 10;
307 for (int i = 0; i < kCycles; i++) { 303 for (int i = 0; i < kCycles; i++) {
308 bool visible = false; 304 bool visible = false;
309 bool animating = true; 305 bool animating = true;
310 if (!browser->GetBookmarkBarVisibility(&visible, &animating)) 306 if (!browser->GetBookmarkBarVisibility(&visible, &animating))
311 return false; // Some error. 307 return false; // Some error.
312 if (visible == wait_for_open && !animating) 308 if (visible == wait_for_open && !animating)
313 return true; // Bookmark bar visibility change complete. 309 return true; // Bookmark bar visibility change complete.
314 310
315 // Give it a chance to catch up. 311 // Give it a chance to catch up.
316 bool browser_survived = CrashAwareSleep( 312 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles);
317 TestTimeouts::action_timeout_ms() / kCycles);
318 EXPECT_TRUE(browser_survived);
319 if (!browser_survived)
320 return false;
321 } 313 }
322 314
323 ADD_FAILURE() << "Timeout reached in WaitForBookmarkBarVisibilityChange"; 315 ADD_FAILURE() << "Timeout reached in WaitForBookmarkBarVisibilityChange";
324 return false; 316 return false;
325 } 317 }
326 318
327 GURL UITestBase::GetActiveTabURL(int window_index) { 319 GURL UITestBase::GetActiveTabURL(int window_index) {
328 scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index)); 320 scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index));
329 EXPECT_TRUE(tab_proxy.get()); 321 EXPECT_TRUE(tab_proxy.get());
330 if (!tab_proxy.get()) 322 if (!tab_proxy.get())
(...skipping 27 matching lines...) Expand all
358 350
359 int active_tab_index = -1; 351 int active_tab_index = -1;
360 EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index)); 352 EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index));
361 return active_tab_index; 353 return active_tab_index;
362 } 354 }
363 355
364 bool UITestBase::IsBrowserRunning() { 356 bool UITestBase::IsBrowserRunning() {
365 return launcher_->IsBrowserRunning(); 357 return launcher_->IsBrowserRunning();
366 } 358 }
367 359
368 bool UITestBase::CrashAwareSleep(int timeout_ms) {
369 return launcher_->CrashAwareSleep(timeout_ms);
370 }
371
372 int UITestBase::GetTabCount() { 360 int UITestBase::GetTabCount() {
373 return GetTabCount(0); 361 return GetTabCount(0);
374 } 362 }
375 363
376 int UITestBase::GetTabCount(int window_index) { 364 int UITestBase::GetTabCount(int window_index) {
377 scoped_refptr<BrowserProxy> window( 365 scoped_refptr<BrowserProxy> window(
378 automation()->GetBrowserWindow(window_index)); 366 automation()->GetBrowserWindow(window_index));
379 EXPECT_TRUE(window.get()); 367 EXPECT_TRUE(window.get());
380 if (!window.get()) 368 if (!window.get())
381 return 0; 369 return 0;
382 370
383 int result = 0; 371 int result = 0;
384 EXPECT_TRUE(window->GetTabCount(&result)); 372 EXPECT_TRUE(window->GetTabCount(&result));
385 373
386 return result; 374 return result;
387 } 375 }
388 376
389 void UITestBase::WaitUntilTabCount(int tab_count) { 377 void UITestBase::WaitUntilTabCount(int tab_count) {
390 const int kMaxIntervals = 10; 378 const int kMaxIntervals = 10;
391 const int kIntervalMs = TestTimeouts::action_timeout_ms() / kMaxIntervals; 379 const int kIntervalMs = TestTimeouts::action_timeout_ms() / kMaxIntervals;
392 380
393 for (int i = 0; i < kMaxIntervals; ++i) { 381 for (int i = 0; i < kMaxIntervals; ++i) {
394 bool browser_survived = CrashAwareSleep(kIntervalMs);
395 EXPECT_TRUE(browser_survived);
396 if (!browser_survived)
397 return;
398 if (GetTabCount() == tab_count) 382 if (GetTabCount() == tab_count)
399 return; 383 return;
384
385 base::PlatformThread::Sleep(kIntervalMs);
400 } 386 }
401 387
402 ADD_FAILURE() << "Timeout reached in WaitUntilTabCount"; 388 ADD_FAILURE() << "Timeout reached in WaitUntilTabCount";
403 } 389 }
404 390
405 FilePath UITestBase::GetDownloadDirectory() { 391 FilePath UITestBase::GetDownloadDirectory() {
406 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); 392 scoped_refptr<TabProxy> tab_proxy(GetActiveTab());
407 EXPECT_TRUE(tab_proxy.get()); 393 EXPECT_TRUE(tab_proxy.get());
408 if (!tab_proxy.get()) 394 if (!tab_proxy.get())
409 return FilePath(); 395 return FilePath();
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 706
721 bool UITest::WaitUntilJavaScriptCondition(TabProxy* tab, 707 bool UITest::WaitUntilJavaScriptCondition(TabProxy* tab,
722 const std::wstring& frame_xpath, 708 const std::wstring& frame_xpath,
723 const std::wstring& jscript, 709 const std::wstring& jscript,
724 int timeout_ms) { 710 int timeout_ms) {
725 const int kIntervalMs = 250; 711 const int kIntervalMs = 250;
726 const int kMaxIntervals = timeout_ms / kIntervalMs; 712 const int kMaxIntervals = timeout_ms / kIntervalMs;
727 713
728 // Wait until the test signals it has completed. 714 // Wait until the test signals it has completed.
729 for (int i = 0; i < kMaxIntervals; ++i) { 715 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
735 bool done_value = false; 716 bool done_value = false;
736 bool success = tab->ExecuteAndExtractBool(frame_xpath, jscript, 717 bool success = tab->ExecuteAndExtractBool(frame_xpath, jscript,
737 &done_value); 718 &done_value);
738 EXPECT_TRUE(success); 719 EXPECT_TRUE(success);
739 if (!success) 720 if (!success)
740 return false; 721 return false;
741 if (done_value) 722 if (done_value)
742 return true; 723 return true;
724
725 base::PlatformThread::Sleep(kIntervalMs);
743 } 726 }
744 727
745 ADD_FAILURE() << "Timeout reached in WaitUntilJavaScriptCondition"; 728 ADD_FAILURE() << "Timeout reached in WaitUntilJavaScriptCondition";
746 return false; 729 return false;
747 } 730 }
748 731
749 bool UITest::WaitUntilCookieValue(TabProxy* tab, 732 bool UITest::WaitUntilCookieValue(TabProxy* tab,
750 const GURL& url, 733 const GURL& url,
751 const char* cookie_name, 734 const char* cookie_name,
752 int timeout_ms, 735 int timeout_ms,
753 const char* expected_value) { 736 const char* expected_value) {
754 const int kIntervalMs = 250; 737 const int kIntervalMs = 250;
755 const int kMaxIntervals = timeout_ms / kIntervalMs; 738 const int kMaxIntervals = timeout_ms / kIntervalMs;
756 739
757 std::string cookie_value; 740 std::string cookie_value;
758 for (int i = 0; i < kMaxIntervals; ++i) { 741 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
764 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); 742 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value));
765 if (cookie_value == expected_value) 743 if (cookie_value == expected_value)
766 return true; 744 return true;
745
746 base::PlatformThread::Sleep(kIntervalMs);
767 } 747 }
768 748
769 ADD_FAILURE() << "Timeout reached in WaitUntilCookieValue"; 749 ADD_FAILURE() << "Timeout reached in WaitUntilCookieValue";
770 return false; 750 return false;
771 } 751 }
772 752
773 std::string UITest::WaitUntilCookieNonEmpty(TabProxy* tab, 753 std::string UITest::WaitUntilCookieNonEmpty(TabProxy* tab,
774 const GURL& url, 754 const GURL& url,
775 const char* cookie_name, 755 const char* cookie_name,
776 int timeout_ms) { 756 int timeout_ms) {
777 const int kIntervalMs = 250; 757 const int kIntervalMs = 250;
778 const int kMaxIntervals = timeout_ms / kIntervalMs; 758 const int kMaxIntervals = timeout_ms / kIntervalMs;
779 759
780 for (int i = 0; i < kMaxIntervals; ++i) { 760 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
786 std::string cookie_value; 761 std::string cookie_value;
787 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value)); 762 EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value));
788 if (!cookie_value.empty()) 763 if (!cookie_value.empty())
789 return cookie_value; 764 return cookie_value;
765
766 base::PlatformThread::Sleep(kIntervalMs);
790 } 767 }
791 768
792 ADD_FAILURE() << "Timeout reached in WaitUntilCookieNonEmpty"; 769 ADD_FAILURE() << "Timeout reached in WaitUntilCookieNonEmpty";
793 return std::string(); 770 return std::string();
794 } 771 }
795 772
796 bool UITest::WaitForDownloadShelfVisible(BrowserProxy* browser) { 773 bool UITest::WaitForDownloadShelfVisible(BrowserProxy* browser) {
797 return WaitForDownloadShelfVisibilityChange(browser, true); 774 return WaitForDownloadShelfVisibilityChange(browser, true);
798 } 775 }
799 776
800 bool UITest::WaitForDownloadShelfInvisible(BrowserProxy* browser) { 777 bool UITest::WaitForDownloadShelfInvisible(BrowserProxy* browser) {
801 return WaitForDownloadShelfVisibilityChange(browser, false); 778 return WaitForDownloadShelfVisibilityChange(browser, false);
802 } 779 }
803 780
804 bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser, 781 bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser,
805 bool wait_for_open) { 782 bool wait_for_open) {
806 const int kCycles = 10; 783 const int kCycles = 10;
807 for (int i = 0; i < kCycles; i++) { 784 for (int i = 0; i < kCycles; i++) {
808 bool visible = false; 785 bool visible = false;
809 if (!browser->IsFindWindowFullyVisible(&visible)) 786 if (!browser->IsFindWindowFullyVisible(&visible))
810 return false; // Some error. 787 return false; // Some error.
811 if (visible == wait_for_open) 788 if (visible == wait_for_open)
812 return true; // Find window visibility change complete. 789 return true; // Find window visibility change complete.
813 790
814 // Give it a chance to catch up. 791 // Give it a chance to catch up.
815 bool browser_survived = CrashAwareSleep( 792 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles);
816 TestTimeouts::action_timeout_ms() / kCycles);
817 EXPECT_TRUE(browser_survived);
818 if (!browser_survived)
819 return false;
820 } 793 }
821 794
822 ADD_FAILURE() << "Timeout reached in WaitForFindWindowVisibilityChange"; 795 ADD_FAILURE() << "Timeout reached in WaitForFindWindowVisibilityChange";
823 return false; 796 return false;
824 } 797 }
825 798
826 void UITest::TerminateBrowser() { 799 void UITest::TerminateBrowser() {
827 launcher_->TerminateBrowser(); 800 launcher_->TerminateBrowser();
828 } 801 }
829 802
830 void UITest::NavigateToURLAsync(const GURL& url) { 803 void UITest::NavigateToURLAsync(const GURL& url) {
831 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); 804 scoped_refptr<TabProxy> tab_proxy(GetActiveTab());
832 ASSERT_TRUE(tab_proxy.get()); 805 ASSERT_TRUE(tab_proxy.get());
833 ASSERT_TRUE(tab_proxy->NavigateToURLAsync(url)); 806 ASSERT_TRUE(tab_proxy->NavigateToURLAsync(url));
834 } 807 }
835 808
836 bool UITest::WaitForDownloadShelfVisibilityChange(BrowserProxy* browser, 809 bool UITest::WaitForDownloadShelfVisibilityChange(BrowserProxy* browser,
837 bool wait_for_open) { 810 bool wait_for_open) {
838 const int kCycles = 10; 811 const int kCycles = 10;
839 int fail_count = 0; 812 int fail_count = 0;
840 int incorrect_state_count = 0; 813 int incorrect_state_count = 0;
841 base::Time start = base::Time::Now(); 814 base::Time start = base::Time::Now();
842 for (int i = 0; i < kCycles; i++) { 815 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
856 bool visible = !wait_for_open; 816 bool visible = !wait_for_open;
857 if (!browser->IsShelfVisible(&visible)) { 817 if (!browser->IsShelfVisible(&visible)) {
858 fail_count++; 818 fail_count++;
859 continue; 819 continue;
860 } 820 }
861 if (visible == wait_for_open) { 821 if (visible == wait_for_open) {
862 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() 822 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF()
863 << " seconds" 823 << " seconds"
864 << " call failed " << fail_count << " times" 824 << " call failed " << fail_count << " times"
865 << " state was incorrect " << incorrect_state_count << " times"; 825 << " state was incorrect " << incorrect_state_count << " times";
866 return true; // Got the download shelf. 826 return true; // Got the download shelf.
867 } 827 }
868 incorrect_state_count++; 828 incorrect_state_count++;
829
830 // Give it a chance to catch up.
831 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms() / kCycles);
869 } 832 }
870 833
871 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF() 834 LOG(INFO) << "Elapsed time: " << (base::Time::Now() - start).InSecondsF()
872 << " seconds" 835 << " seconds"
873 << " call failed " << fail_count << " times" 836 << " call failed " << fail_count << " times"
874 << " state was incorrect " << incorrect_state_count << " times"; 837 << " state was incorrect " << incorrect_state_count << " times";
875 ADD_FAILURE() << "Timeout reached in " << __FUNCTION__; 838 ADD_FAILURE() << "Timeout reached in " << __FUNCTION__;
876 return false; 839 return false;
877 } 840 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698