Chromium Code Reviews| Index: chrome/browser/ui/webui/web_ui_browsertest.cc |
| diff --git a/chrome/browser/ui/webui/web_ui_browsertest.cc b/chrome/browser/ui/webui/web_ui_browsertest.cc |
| index 96204d134809ab658afea8db38c32642bb9835b8..414f2ee069b5dc7c140174316471073a613a7a4a 100644 |
| --- a/chrome/browser/ui/webui/web_ui_browsertest.cc |
| +++ b/chrome/browser/ui/webui/web_ui_browsertest.cc |
| @@ -15,11 +15,13 @@ |
| #include "chrome/browser/ui/webui/chrome_web_ui.h" |
| #include "chrome/browser/ui/webui/test_chrome_web_ui_factory.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| +#include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/chrome_paths.h" |
| #include "chrome/common/url_constants.h" |
| #include "chrome/test/base/test_tab_strip_model_observer.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| +#include "content/common/content_notification_types.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest-spi.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -207,7 +209,10 @@ const char WebUIBrowserTest::kDummyURL[] = "chrome://DummyURL"; |
| WebUIBrowserTest::WebUIBrowserTest() |
| : test_handler_(new WebUITestHandler()), |
| - libraries_preloaded_(false) {} |
| + libraries_preloaded_(false), |
| + web_ui_instance_(NULL), |
| + web_ui_instance_ready_(false), |
| + message_loop_running_(false) {} |
| namespace { |
| @@ -249,6 +254,11 @@ void WebUIBrowserTest::SetUpInProcessBrowserTestFixture() { |
| AddLibrary(FilePath(kWebUILibraryJS)); |
| } |
| +void WebUIBrowserTest::ObserveNextHtmlDialog() { |
| + registrar_.Add(this, chrome::NOTIFICATION_HTML_DIALOG_SHOWN, |
| + NotificationService::AllSources()); |
| +} |
| + |
| void WebUIBrowserTest::TearDownInProcessBrowserTestFixture() { |
| InProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
| TestChromeWebUIFactory::RemoveFactoryOverride(GURL(kDummyURL).host()); |
| @@ -273,6 +283,39 @@ void WebUIBrowserTest::OnJsInjectionReady(RenderViewHost* render_view_host) { |
| render_view_host); |
| } |
| +void WebUIBrowserTest::Observe(int type, |
|
Sheridan Rawlins
2011/09/09 15:47:50
I would prefer to see this and other logic broken
flackr
2011/09/15 18:41:52
Done.
|
| + const NotificationSource& source, |
| + const NotificationDetails& details) { |
| + if (type == chrome::NOTIFICATION_HTML_DIALOG_SHOWN) { |
|
Sheridan Rawlins
2011/09/09 15:47:50
Even though only 2 cases, this looks like a switch
flackr
2011/09/15 18:41:52
Done.
|
| + web_ui_instance_ = Source<WebUI>(source).ptr(); |
| + registrar_.Remove(this, chrome::NOTIFICATION_HTML_DIALOG_SHOWN, |
| + NotificationService::AllSources()); |
| + // Wait for navigation to complete. |
| + web_ui_instance_ready_ = false; |
| + registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
|
Paweł Hajdan Jr.
2011/09/09 22:13:55
Is this possibly racy?
flackr
2011/09/15 18:41:52
I don't so, but I'm not certain. The first notific
|
| + Source<NavigationController>( |
| + &web_ui_instance_->tab_contents()->controller())); |
| + } else if (type == content::NOTIFICATION_LOAD_STOP) { |
| + registrar_.Remove(this, content::NOTIFICATION_LOAD_STOP, |
| + Source<NavigationController>( |
| + &web_ui_instance_->tab_contents()->controller())); |
| + web_ui_instance_ready_ = true; |
| + if (message_loop_running_) { |
| + message_loop_running_ = false; |
| + MessageLoopForUI::current()->Quit(); |
| + } |
| + } else { |
| + NOTREACHED() << "Unhandled notification type"; |
|
Sheridan Rawlins
2011/09/09 15:47:50
Don't bloat with message that doesn't add info (yo
flackr
2011/09/15 18:41:52
Done.
|
| + } |
| +} |
| + |
| +void WebUIBrowserTest::WaitForHtmlDialogLoad() { |
| + if (!web_ui_instance_ready_) { |
| + message_loop_running_ = true; |
| + ui_test_utils::RunMessageLoop(); |
| + } |
| +} |
| + |
| void WebUIBrowserTest::BuildJavascriptLibraries(string16* content) { |
| ASSERT_TRUE(content != NULL); |
| std::string utf8_content; |
| @@ -363,7 +406,7 @@ bool WebUIBrowserTest::RunJavascriptUsingHandler( |
| } |
| void WebUIBrowserTest::SetupHandlers() { |
| - WebUI* web_ui_instance = |
| + WebUI* web_ui_instance = web_ui_instance_ ? web_ui_instance_ : |
| browser()->GetSelectedTabContents()->web_ui(); |
| ASSERT_TRUE(web_ui_instance != NULL); |
| web_ui_instance->register_callback_overwrites(true); |