| 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/base/ui_test_utils.h" | 5 #include "chrome/test/base/ui_test_utils.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 #include "chrome/test/automation/javascript_execution_controller.h" | 39 #include "chrome/test/automation/javascript_execution_controller.h" |
| 40 #include "chrome/test/base/bookmark_load_observer.h" | 40 #include "chrome/test/base/bookmark_load_observer.h" |
| 41 #include "chrome/test/test_navigation_observer.h" | 41 #include "chrome/test/test_navigation_observer.h" |
| 42 #include "content/browser/download/download_item.h" | 42 #include "content/browser/download/download_item.h" |
| 43 #include "content/browser/download/download_manager.h" | 43 #include "content/browser/download/download_manager.h" |
| 44 #include "content/browser/renderer_host/render_process_host.h" | 44 #include "content/browser/renderer_host/render_process_host.h" |
| 45 #include "content/browser/renderer_host/render_view_host.h" | 45 #include "content/browser/renderer_host/render_view_host.h" |
| 46 #include "content/browser/tab_contents/navigation_controller.h" | 46 #include "content/browser/tab_contents/navigation_controller.h" |
| 47 #include "content/browser/tab_contents/navigation_entry.h" | 47 #include "content/browser/tab_contents/navigation_entry.h" |
| 48 #include "content/browser/tab_contents/tab_contents.h" | 48 #include "content/browser/tab_contents/tab_contents.h" |
| 49 #include "content/public/browser/notification_service.h" |
| 49 #include "googleurl/src/gurl.h" | 50 #include "googleurl/src/gurl.h" |
| 50 #include "net/base/net_util.h" | 51 #include "net/base/net_util.h" |
| 51 #include "testing/gtest/include/gtest/gtest.h" | 52 #include "testing/gtest/include/gtest/gtest.h" |
| 52 #include "third_party/skia/include/core/SkBitmap.h" | 53 #include "third_party/skia/include/core/SkBitmap.h" |
| 53 #include "third_party/skia/include/core/SkColor.h" | 54 #include "third_party/skia/include/core/SkColor.h" |
| 54 #include "ui/gfx/size.h" | 55 #include "ui/gfx/size.h" |
| 55 | 56 |
| 56 #if defined(TOOLKIT_VIEWS) | 57 #if defined(TOOLKIT_VIEWS) |
| 57 #include "views/focus/accelerator_handler.h" | 58 #include "views/focus/accelerator_handler.h" |
| 58 #endif | 59 #endif |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 !tab->render_manager_for_testing()->pending_render_view_host()) | 285 !tab->render_manager_for_testing()->pending_render_view_host()) |
| 285 return; | 286 return; |
| 286 TestNotificationObserver observer; | 287 TestNotificationObserver observer; |
| 287 RegisterAndWait(&observer, content::NOTIFICATION_LOAD_STOP, | 288 RegisterAndWait(&observer, content::NOTIFICATION_LOAD_STOP, |
| 288 content::Source<NavigationController>(&tab->controller())); | 289 content::Source<NavigationController>(&tab->controller())); |
| 289 } | 290 } |
| 290 | 291 |
| 291 Browser* WaitForNewBrowser() { | 292 Browser* WaitForNewBrowser() { |
| 292 TestNotificationObserver observer; | 293 TestNotificationObserver observer; |
| 293 RegisterAndWait(&observer, chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 294 RegisterAndWait(&observer, chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
| 294 NotificationService::AllSources()); | 295 content::NotificationService::AllSources()); |
| 295 return content::Source<Browser>(observer.source()).ptr(); | 296 return content::Source<Browser>(observer.source()).ptr(); |
| 296 } | 297 } |
| 297 | 298 |
| 298 Browser* WaitForBrowserNotInSet(std::set<Browser*> excluded_browsers) { | 299 Browser* WaitForBrowserNotInSet(std::set<Browser*> excluded_browsers) { |
| 299 TestNotificationObserver observer; | 300 TestNotificationObserver observer; |
| 300 Browser* new_browser = GetBrowserNotInSet(excluded_browsers); | 301 Browser* new_browser = GetBrowserNotInSet(excluded_browsers); |
| 301 if (new_browser == NULL) { | 302 if (new_browser == NULL) { |
| 302 new_browser = WaitForNewBrowser(); | 303 new_browser = WaitForNewBrowser(); |
| 303 // The new browser should never be in |excluded_browsers|. | 304 // The new browser should never be in |excluded_browsers|. |
| 304 DCHECK(!ContainsKey(excluded_browsers, new_browser)); | 305 DCHECK(!ContainsKey(excluded_browsers, new_browser)); |
| 305 } | 306 } |
| 306 return new_browser; | 307 return new_browser; |
| 307 } | 308 } |
| 308 | 309 |
| 309 void OpenURLOffTheRecord(Profile* profile, const GURL& url) { | 310 void OpenURLOffTheRecord(Profile* profile, const GURL& url) { |
| 310 Browser::OpenURLOffTheRecord(profile, url); | 311 Browser::OpenURLOffTheRecord(profile, url); |
| 311 Browser* browser = BrowserList::FindTabbedBrowser( | 312 Browser* browser = BrowserList::FindTabbedBrowser( |
| 312 profile->GetOffTheRecordProfile(), false); | 313 profile->GetOffTheRecordProfile(), false); |
| 313 WaitForNavigations(&browser->GetSelectedTabContents()->controller(), 1); | 314 WaitForNavigations(&browser->GetSelectedTabContents()->controller(), 1); |
| 314 } | 315 } |
| 315 | 316 |
| 316 void NavigateToURL(browser::NavigateParams* params) { | 317 void NavigateToURL(browser::NavigateParams* params) { |
| 317 TestNavigationObserver observer(NotificationService::AllSources(), NULL, 1); | 318 TestNavigationObserver observer( |
| 319 content::NotificationService::AllSources(), NULL, 1); |
| 318 browser::Navigate(params); | 320 browser::Navigate(params); |
| 319 observer.WaitForObservation(); | 321 observer.WaitForObservation(); |
| 320 } | 322 } |
| 321 | 323 |
| 322 void NavigateToURL(Browser* browser, const GURL& url) { | 324 void NavigateToURL(Browser* browser, const GURL& url) { |
| 323 NavigateToURLWithDisposition(browser, url, CURRENT_TAB, | 325 NavigateToURLWithDisposition(browser, url, CURRENT_TAB, |
| 324 BROWSER_TEST_WAIT_FOR_NAVIGATION); | 326 BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 325 } | 327 } |
| 326 | 328 |
| 327 // Navigates the specified tab (via |disposition|) of |browser| to |url|, | 329 // Navigates the specified tab (via |disposition|) of |browser| to |url|, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 342 | 344 |
| 343 std::set<Browser*> initial_browsers; | 345 std::set<Browser*> initial_browsers; |
| 344 for (std::vector<Browser*>::const_iterator iter = BrowserList::begin(); | 346 for (std::vector<Browser*>::const_iterator iter = BrowserList::begin(); |
| 345 iter != BrowserList::end(); | 347 iter != BrowserList::end(); |
| 346 ++iter) { | 348 ++iter) { |
| 347 initial_browsers.insert(*iter); | 349 initial_browsers.insert(*iter); |
| 348 } | 350 } |
| 349 | 351 |
| 350 WindowedNotificationObserver tab_added_observer( | 352 WindowedNotificationObserver tab_added_observer( |
| 351 content::NOTIFICATION_TAB_ADDED, | 353 content::NOTIFICATION_TAB_ADDED, |
| 352 NotificationService::AllSources()); | 354 content::NotificationService::AllSources()); |
| 353 | 355 |
| 354 browser->OpenURL(url, GURL(), disposition, content::PAGE_TRANSITION_TYPED); | 356 browser->OpenURL(url, GURL(), disposition, content::PAGE_TRANSITION_TYPED); |
| 355 if (browser_test_flags & BROWSER_TEST_WAIT_FOR_BROWSER) | 357 if (browser_test_flags & BROWSER_TEST_WAIT_FOR_BROWSER) |
| 356 browser = WaitForBrowserNotInSet(initial_browsers); | 358 browser = WaitForBrowserNotInSet(initial_browsers); |
| 357 if (browser_test_flags & BROWSER_TEST_WAIT_FOR_TAB) | 359 if (browser_test_flags & BROWSER_TEST_WAIT_FOR_TAB) |
| 358 tab_added_observer.Wait(); | 360 tab_added_observer.Wait(); |
| 359 if (!(browser_test_flags & BROWSER_TEST_WAIT_FOR_NAVIGATION)) { | 361 if (!(browser_test_flags & BROWSER_TEST_WAIT_FOR_NAVIGATION)) { |
| 360 // Some other flag caused the wait prior to this. | 362 // Some other flag caused the wait prior to this. |
| 361 return; | 363 return; |
| 362 } | 364 } |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 GURL::Replacements replacements; | 485 GURL::Replacements replacements; |
| 484 replacements.SetQueryStr(query_string); | 486 replacements.SetQueryStr(query_string); |
| 485 return url.ReplaceComponents(replacements); | 487 return url.ReplaceComponents(replacements); |
| 486 } | 488 } |
| 487 return url; | 489 return url; |
| 488 } | 490 } |
| 489 | 491 |
| 490 AppModalDialog* WaitForAppModalDialog() { | 492 AppModalDialog* WaitForAppModalDialog() { |
| 491 TestNotificationObserver observer; | 493 TestNotificationObserver observer; |
| 492 RegisterAndWait(&observer, chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, | 494 RegisterAndWait(&observer, chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, |
| 493 NotificationService::AllSources()); | 495 content::NotificationService::AllSources()); |
| 494 return content::Source<AppModalDialog>(observer.source()).ptr(); | 496 return content::Source<AppModalDialog>(observer.source()).ptr(); |
| 495 } | 497 } |
| 496 | 498 |
| 497 void CrashTab(TabContents* tab) { | 499 void CrashTab(TabContents* tab) { |
| 498 RenderProcessHost* rph = tab->render_view_host()->process(); | 500 RenderProcessHost* rph = tab->render_view_host()->process(); |
| 499 base::KillProcess(rph->GetHandle(), 0, false); | 501 base::KillProcess(rph->GetHandle(), 0, false); |
| 500 TestNotificationObserver observer; | 502 TestNotificationObserver observer; |
| 501 RegisterAndWait(&observer, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 503 RegisterAndWait(&observer, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 502 content::Source<RenderProcessHost>(rph)); | 504 content::Source<RenderProcessHost>(rph)); |
| 503 } | 505 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 service->Load(); | 550 service->Load(); |
| 549 TemplateURLServiceTestUtil::BlockTillServiceProcessesRequests(); | 551 TemplateURLServiceTestUtil::BlockTillServiceProcessesRequests(); |
| 550 ASSERT_TRUE(service->loaded()); | 552 ASSERT_TRUE(service->loaded()); |
| 551 } | 553 } |
| 552 | 554 |
| 553 void WaitForHistoryToLoad(Browser* browser) { | 555 void WaitForHistoryToLoad(Browser* browser) { |
| 554 HistoryService* history_service = | 556 HistoryService* history_service = |
| 555 browser->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); | 557 browser->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); |
| 556 WindowedNotificationObserver history_loaded_observer( | 558 WindowedNotificationObserver history_loaded_observer( |
| 557 chrome::NOTIFICATION_HISTORY_LOADED, | 559 chrome::NOTIFICATION_HISTORY_LOADED, |
| 558 NotificationService::AllSources()); | 560 content::NotificationService::AllSources()); |
| 559 if (!history_service->BackendLoaded()) | 561 if (!history_service->BackendLoaded()) |
| 560 history_loaded_observer.Wait(); | 562 history_loaded_observer.Wait(); |
| 561 } | 563 } |
| 562 | 564 |
| 563 bool GetNativeWindow(const Browser* browser, gfx::NativeWindow* native_window) { | 565 bool GetNativeWindow(const Browser* browser, gfx::NativeWindow* native_window) { |
| 564 BrowserWindow* window = browser->window(); | 566 BrowserWindow* window = browser->window(); |
| 565 if (!window) | 567 if (!window) |
| 566 return false; | 568 return false; |
| 567 | 569 |
| 568 *native_window = window->GetNativeHandle(); | 570 *native_window = window->GetNativeHandle(); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 cmd_line->AppendArg("--server=stop"); | 764 cmd_line->AppendArg("--server=stop"); |
| 763 cmd_line->AppendArg("--chromium"); | 765 cmd_line->AppendArg("--chromium"); |
| 764 cmd_line->AppendArgNative(FILE_PATH_LITERAL("--pidfile=") + | 766 cmd_line->AppendArgNative(FILE_PATH_LITERAL("--pidfile=") + |
| 765 websocket_pid_file_.value()); | 767 websocket_pid_file_.value()); |
| 766 base::LaunchOptions options; | 768 base::LaunchOptions options; |
| 767 options.wait = true; | 769 options.wait = true; |
| 768 base::LaunchProcess(*cmd_line.get(), options, NULL); | 770 base::LaunchProcess(*cmd_line.get(), options, NULL); |
| 769 } | 771 } |
| 770 | 772 |
| 771 TestNotificationObserver::TestNotificationObserver() | 773 TestNotificationObserver::TestNotificationObserver() |
| 772 : source_(NotificationService::AllSources()) { | 774 : source_(content::NotificationService::AllSources()) { |
| 773 } | 775 } |
| 774 | 776 |
| 775 TestNotificationObserver::~TestNotificationObserver() {} | 777 TestNotificationObserver::~TestNotificationObserver() {} |
| 776 | 778 |
| 777 void TestNotificationObserver::Observe( | 779 void TestNotificationObserver::Observe( |
| 778 int type, | 780 int type, |
| 779 const content::NotificationSource& source, | 781 const content::NotificationSource& source, |
| 780 const content::NotificationDetails& details) { | 782 const content::NotificationDetails& details) { |
| 781 source_ = source; | 783 source_ = source; |
| 782 details_ = details; | 784 details_ = details; |
| 783 MessageLoopForUI::current()->Quit(); | 785 MessageLoopForUI::current()->Quit(); |
| 784 } | 786 } |
| 785 | 787 |
| 786 WindowedNotificationObserver::WindowedNotificationObserver( | 788 WindowedNotificationObserver::WindowedNotificationObserver( |
| 787 int notification_type, | 789 int notification_type, |
| 788 const content::NotificationSource& source) | 790 const content::NotificationSource& source) |
| 789 : seen_(false), | 791 : seen_(false), |
| 790 running_(false), | 792 running_(false), |
| 791 waiting_for_(source) { | 793 waiting_for_(source) { |
| 792 registrar_.Add(this, notification_type, waiting_for_); | 794 registrar_.Add(this, notification_type, waiting_for_); |
| 793 } | 795 } |
| 794 | 796 |
| 795 WindowedNotificationObserver::~WindowedNotificationObserver() {} | 797 WindowedNotificationObserver::~WindowedNotificationObserver() {} |
| 796 | 798 |
| 797 void WindowedNotificationObserver::Wait() { | 799 void WindowedNotificationObserver::Wait() { |
| 798 if (seen_ || (waiting_for_ == NotificationService::AllSources() && | 800 if (seen_ || (waiting_for_ == content::NotificationService::AllSources() && |
| 799 !sources_seen_.empty())) { | 801 !sources_seen_.empty())) { |
| 800 return; | 802 return; |
| 801 } | 803 } |
| 802 | 804 |
| 803 running_ = true; | 805 running_ = true; |
| 804 ui_test_utils::RunMessageLoop(); | 806 ui_test_utils::RunMessageLoop(); |
| 805 } | 807 } |
| 806 | 808 |
| 807 void WindowedNotificationObserver::Observe( | 809 void WindowedNotificationObserver::Observe( |
| 808 int type, | 810 int type, |
| 809 const content::NotificationSource& source, | 811 const content::NotificationSource& source, |
| 810 const content::NotificationDetails& details) { | 812 const content::NotificationDetails& details) { |
| 811 if (waiting_for_ == source || | 813 if (waiting_for_ == source || |
| 812 (running_ && waiting_for_ == NotificationService::AllSources())) { | 814 (running_ && waiting_for_ == content::NotificationService::AllSources()))
{ |
| 813 seen_ = true; | 815 seen_ = true; |
| 814 if (running_) | 816 if (running_) |
| 815 MessageLoopForUI::current()->Quit(); | 817 MessageLoopForUI::current()->Quit(); |
| 816 } else { | 818 } else { |
| 817 sources_seen_.insert(source.map_key()); | 819 sources_seen_.insert(source.map_key()); |
| 818 } | 820 } |
| 819 } | 821 } |
| 820 | 822 |
| 821 TitleWatcher::TitleWatcher(TabContents* tab_contents, | 823 TitleWatcher::TitleWatcher(TabContents* tab_contents, |
| 822 const string16& expected_title) | 824 const string16& expected_title) |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 if (it == expected_titles_.end()) | 878 if (it == expected_titles_.end()) |
| 877 return; | 879 return; |
| 878 observed_title_ = *it; | 880 observed_title_ = *it; |
| 879 expected_title_observed_ = true; | 881 expected_title_observed_ = true; |
| 880 if (quit_loop_on_observation_) | 882 if (quit_loop_on_observation_) |
| 881 MessageLoopForUI::current()->Quit(); | 883 MessageLoopForUI::current()->Quit(); |
| 882 } | 884 } |
| 883 | 885 |
| 884 DOMMessageQueue::DOMMessageQueue() { | 886 DOMMessageQueue::DOMMessageQueue() { |
| 885 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, | 887 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, |
| 886 NotificationService::AllSources()); | 888 content::NotificationService::AllSources()); |
| 887 } | 889 } |
| 888 | 890 |
| 889 DOMMessageQueue::~DOMMessageQueue() {} | 891 DOMMessageQueue::~DOMMessageQueue() {} |
| 890 | 892 |
| 891 void DOMMessageQueue::Observe(int type, | 893 void DOMMessageQueue::Observe(int type, |
| 892 const content::NotificationSource& source, | 894 const content::NotificationSource& source, |
| 893 const content::NotificationDetails& details) { | 895 const content::NotificationDetails& details) { |
| 894 content::Details<DomOperationNotificationDetails> dom_op_details(details); | 896 content::Details<DomOperationNotificationDetails> dom_op_details(details); |
| 895 content::Source<RenderViewHost> sender(source); | 897 content::Source<RenderViewHost> sender(source); |
| 896 message_queue_.push(dom_op_details->json()); | 898 message_queue_.push(dom_op_details->json()); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 return taker.TakeRenderWidgetSnapshot(rwh, page_size, page_size, bitmap); | 988 return taker.TakeRenderWidgetSnapshot(rwh, page_size, page_size, bitmap); |
| 987 } | 989 } |
| 988 | 990 |
| 989 bool TakeEntirePageSnapshot(RenderViewHost* rvh, SkBitmap* bitmap) { | 991 bool TakeEntirePageSnapshot(RenderViewHost* rvh, SkBitmap* bitmap) { |
| 990 DCHECK(bitmap); | 992 DCHECK(bitmap); |
| 991 SnapshotTaker taker; | 993 SnapshotTaker taker; |
| 992 return taker.TakeEntirePageSnapshot(rvh, bitmap); | 994 return taker.TakeEntirePageSnapshot(rvh, bitmap); |
| 993 } | 995 } |
| 994 | 996 |
| 995 } // namespace ui_test_utils | 997 } // namespace ui_test_utils |
| OLD | NEW |