Index: mojo/services/view_manager/view_manager_unittest.cc |
diff --git a/mojo/services/view_manager/view_manager_unittest.cc b/mojo/services/view_manager/view_manager_unittest.cc |
index 259079648a04cd2fecdf9a1febf9995da4a6539d..9ba52d82a1b11e79f35599bdfcaa4538fc383522 100644 |
--- a/mojo/services/view_manager/view_manager_unittest.cc |
+++ b/mojo/services/view_manager/view_manager_unittest.cc |
@@ -181,6 +181,15 @@ class ViewManagerProxy : public TestChangeTracker::Delegate { |
RunMainLoop(); |
return result; |
} |
+ bool EmbedRoot(const char* url) { |
+ changes_.clear(); |
+ base::AutoReset<bool> auto_reset(&in_embed_, true); |
+ bool result = false; |
+ view_manager_->EmbedRoot(url, base::Bind(&ViewManagerProxy::GotResult, |
+ base::Unretained(this), &result)); |
+ RunMainLoop(); |
+ return result; |
+ } |
bool DeleteNode(Id node_id) { |
changes_.clear(); |
bool result = false; |
@@ -433,11 +442,14 @@ void EmbedRootCallback(bool* result_cache, |
// Responsible for establishing the initial ViewManagerService connection. |
// Blocks until result is determined. |
bool EmbedRoot(ViewManagerInitService* view_manager_init, |
- const std::string& url) { |
+ const std::string& url, |
+ size_t number_of_calls) { |
bool result = false; |
base::RunLoop run_loop; |
- view_manager_init->EmbedRoot(url, base::Bind(&EmbedRootCallback, |
- &result, &run_loop)); |
+ for (size_t i = 0; i < number_of_calls; ++i) { |
+ view_manager_init->EmbedRoot(url, base::Bind(&EmbedRootCallback, |
+ &result, &run_loop)); |
+ } |
run_loop.Run(); |
return result; |
} |
@@ -464,7 +476,7 @@ class ViewManagerTest : public testing::Test { |
test_helper_.service_manager()->ConnectToService( |
GURL("mojo:mojo_view_manager"), |
&view_manager_init_); |
- ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL)); |
+ ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL, 1)); |
connection_ = ViewManagerProxy::WaitForInstance(); |
ASSERT_TRUE(connection_ != NULL); |
@@ -520,12 +532,25 @@ class ViewManagerTest : public testing::Test { |
DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); |
}; |
-TEST_F(ViewManagerTest, SecondEmbedRoot) { |
- ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL)); |
+TEST_F(ViewManagerTest, SecondEmbedRoot_InitService) { |
+ ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL, 1)); |
connection_->DoRunLoopUntilChangesCount(1); |
EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
} |
+TEST_F(ViewManagerTest, SecondEmbedRoot_Service) { |
+ ASSERT_TRUE(connection_->EmbedRoot(kTestServiceURL)); |
+ connection_->DoRunLoopUntilChangesCount(1); |
+ EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
+} |
+ |
+TEST_F(ViewManagerTest, MultipleEmbedRootsBeforeWTHReady) { |
+ ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL, 2)); |
+ connection_->DoRunLoopUntilChangesCount(2); |
+ EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
+ EXPECT_EQ(kTestServiceURL, connection_->changes()[1].embed_url); |
+} |
+ |
// Verifies client gets a valid id. |
TEST_F(ViewManagerTest, ValidId) { |
// TODO(beng): this should really have the URL of the application that |