| Index: ios/web/webui/web_ui_mojo_inttest.mm
|
| diff --git a/ios/web/webui/web_ui_mojo_inttest.mm b/ios/web/webui/web_ui_mojo_inttest.mm
|
| index ecfe565ca67fb377cfe977e13ff69ba62446c72e..97916af543d08a09094c16c7d477a5742fa9ed32 100644
|
| --- a/ios/web/webui/web_ui_mojo_inttest.mm
|
| +++ b/ios/web/webui/web_ui_mojo_inttest.mm
|
| @@ -6,8 +6,8 @@
|
|
|
| #include "base/memory/ptr_util.h"
|
| #include "base/run_loop.h"
|
| -#import "base/test/ios/wait_util.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| +#import "ios/testing/wait_util.h"
|
| #import "ios/web/public/navigation_manager.h"
|
| #include "ios/web/public/web_state/web_state_interface_provider.h"
|
| #include "ios/web/public/web_ui_ios_data_source.h"
|
| @@ -31,6 +31,10 @@ namespace {
|
| // Hostname for test WebUI page.
|
| const char kTestWebUIURLHost[] = "testwebui";
|
|
|
| +// Timeout in seconds to wait for a sucessful message exchange between native
|
| +// code and a web page using Mojo.
|
| +const NSTimeInterval kMessageTimeout = 5.0;
|
| +
|
| // UI handler class which communicates with test WebUI page as follows:
|
| // - page sends "syn" message to |TestUIHandler|
|
| // - |TestUIHandler| replies with "ack" message
|
| @@ -132,7 +136,9 @@ class TestWebUIControllerFactory : public WebUIIOSControllerFactory {
|
| // A test fixture for verifying mojo comminication for WebUI.
|
| class WebUIMojoTest : public WebIntTest {
|
| protected:
|
| - WebUIMojoTest() : ui_handler_(new TestUIHandler()) {
|
| + void SetUp() override {
|
| + WebIntTest::SetUp();
|
| + ui_handler_ = base::MakeUnique<TestUIHandler>();
|
| web::WebState::CreateParams params(GetBrowserState());
|
| web_state_ = base::MakeUnique<web::WebStateImpl>(params);
|
| web_state_->GetNavigationManagerImpl().InitializeSession();
|
| @@ -156,18 +162,19 @@ class WebUIMojoTest : public WebIntTest {
|
| #if TARGET_IPHONE_SIMULATOR
|
| #define MAYBE_MessageExchange MessageExchange
|
| #else
|
| -#define MAYBE_MessageExchange DISABLED_MessageExchange
|
| +#define MAYBE_MessageExchange FLAKY_MessageExchange
|
| #endif
|
| // TODO(crbug.com/720098): Enable this test on device.
|
| TEST_F(WebUIMojoTest, MAYBE_MessageExchange) {
|
| web_state()->SetWebUsageEnabled(true);
|
| web_state()->GetView(); // WebState won't load URL without view.
|
| - NavigationManager::WebLoadParams load_params(GURL(
|
| - url::SchemeHostPort(kTestWebUIScheme, kTestWebUIURLHost, 0).Serialize()));
|
| + GURL url(
|
| + url::SchemeHostPort(kTestWebUIScheme, kTestWebUIURLHost, 0).Serialize());
|
| + NavigationManager::WebLoadParams load_params(url);
|
| web_state()->GetNavigationManager()->LoadURLWithParams(load_params);
|
|
|
| - // Wait until |TestUIHandler| receives "ack" message from WebUI page.
|
| - base::test::ios::WaitUntilCondition(^{
|
| + // Wait until |TestUIHandler| receives "fin" message from WebUI page.
|
| + bool fin_received = testing::WaitUntilConditionOrTimeout(kMessageTimeout, ^{
|
| // Flush any pending tasks. Don't RunUntilIdle() because
|
| // RunUntilIdle() is incompatible with mojo::SimpleWatcher's
|
| // automatic arming behavior, which Mojo JS still depends upon.
|
| @@ -180,6 +187,10 @@ TEST_F(WebUIMojoTest, MAYBE_MessageExchange) {
|
| loop.Run();
|
| return test_ui_handler()->IsFinReceived();
|
| });
|
| +
|
| + ASSERT_TRUE(fin_received);
|
| + EXPECT_FALSE(web_state()->IsLoading());
|
| + EXPECT_EQ(url, web_state()->GetLastCommittedURL());
|
| }
|
|
|
| } // namespace web
|
|
|