Index: components/view_manager/view_manager_client_apptest.cc |
diff --git a/components/view_manager/view_manager_client_apptest.cc b/components/view_manager/view_manager_client_apptest.cc |
index 867c7d5561ea93d10acb240544fb434d1d2db524..217781ebb07ca18b8b6e43d7a3fd07d6508da703 100644 |
--- a/components/view_manager/view_manager_client_apptest.cc |
+++ b/components/view_manager/view_manager_client_apptest.cc |
@@ -224,13 +224,29 @@ class ViewManagerTest : public test::ApplicationTestBase, |
ViewManager* window_manager() { return window_manager_; } |
- // Embeds another version of the test app @ view; returns nullptr on timeout. |
- ViewManager* Embed(ViewManager* view_manager, View* view) { |
- return EmbedImpl(view_manager, view, EmbedType::NO_REEMBED); |
+ // Embeds another version of the test app @ view. This runs a run loop until |
+ // a response is received, or a timeout. On success the new ViewManager is |
+ // returned. |
+ ViewManager* Embed(View* view) { |
+ return EmbedImpl(view, EmbedType::NO_REEMBED); |
} |
- ViewManager* EmbedAllowingReembed(ViewManager* view_manager, View* view) { |
- return EmbedImpl(view_manager, view, EmbedType::ALLOW_REEMBED); |
+ // Same as Embed(), but uses EmbedAllowingReembed(). |
+ ViewManager* EmbedAllowingReembed(View* view) { |
+ return EmbedImpl(view, EmbedType::ALLOW_REEMBED); |
+ } |
+ |
+ // Establishes a connection to this application and asks for a |
+ // ViewManagerClient. The ViewManagerClient is then embedded in |view|. |
+ // This does *not* wait for the connection to complete. |
+ void ConnectToApplicationAndEmbed(View* view) { |
+ mojo::URLRequestPtr request(mojo::URLRequest::New()); |
+ request->url = mojo::String::From(application_impl()->url()); |
+ ApplicationConnection* connection = |
+ application_impl()->ConnectToApplication(request.Pass()); |
+ mojo::ViewManagerClientPtr client; |
+ connection->ConnectToService(&client); |
+ view->Embed(client.Pass()); |
} |
bool got_disconnect() const { return got_disconnect_; } |
@@ -238,19 +254,21 @@ class ViewManagerTest : public test::ApplicationTestBase, |
ApplicationDelegate* GetApplicationDelegate() override { return this; } |
// Overridden from ViewManagerDelegate: |
- void OnEmbed(View* root, |
- InterfaceRequest<ServiceProvider> services, |
- ServiceProviderPtr exposed_services) override { |
+ void OnEmbed(View* root) override { |
most_recent_view_manager_ = root->view_manager(); |
QuitRunLoop(); |
} |
- bool OnWillEmbed(View* view, |
- InterfaceRequest<ServiceProvider>* services, |
- ServiceProviderPtr* exposed_services) override { |
- if (!on_will_embed_return_value_) |
- QuitRunLoop(); |
+ void OnEmbedForDescendant(View* view, |
+ mojo::URLRequestPtr request, |
+ mojo::ViewManagerClientPtr* client) override { |
on_will_embed_count_++; |
- return on_will_embed_return_value_; |
+ if (on_will_embed_return_value_) { |
+ ApplicationConnection* connection = |
+ application_impl()->ConnectToApplication(request.Pass()); |
+ connection->ConnectToService(client); |
+ } else { |
+ QuitRunLoop(); |
+ } |
} |
void OnViewManagerDestroyed(ViewManager* view_manager) override { |
got_disconnect_ = true; |
@@ -262,17 +280,14 @@ class ViewManagerTest : public test::ApplicationTestBase, |
NO_REEMBED, |
}; |
- ViewManager* EmbedImpl(ViewManager* view_manager, |
- View* view, |
- EmbedType type) { |
- DCHECK_EQ(view_manager, view->view_manager()); |
+ ViewManager* EmbedImpl(View* view, EmbedType type) { |
most_recent_view_manager_ = nullptr; |
if (type == EmbedType::ALLOW_REEMBED) { |
mojo::URLRequestPtr request(mojo::URLRequest::New()); |
request->url = mojo::String::From(application_impl()->url()); |
view->EmbedAllowingReembed(request.Pass()); |
} else { |
- view->Embed(application_impl()->url()); |
+ ConnectToApplicationAndEmbed(view); |
} |
if (!DoRunLoopWithTimeout()) |
return nullptr; |
@@ -321,8 +336,6 @@ class ViewManagerTest : public test::ApplicationTestBase, |
TEST_F(ViewManagerTest, RootView) { |
ASSERT_NE(nullptr, window_manager()); |
EXPECT_NE(nullptr, window_manager()->GetRoot()); |
- // No one embedded the window_manager(), so it has no url. |
- EXPECT_TRUE(window_manager()->GetEmbedderURL().empty()); |
} |
TEST_F(ViewManagerTest, Embed) { |
@@ -330,7 +343,7 @@ TEST_F(ViewManagerTest, Embed) { |
ASSERT_NE(nullptr, view); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* embedded = Embed(window_manager(), view); |
+ ViewManager* embedded = Embed(view); |
ASSERT_NE(nullptr, embedded); |
View* view_in_embedded = embedded->GetRoot(); |
@@ -352,7 +365,7 @@ TEST_F(ViewManagerTest, EmbeddedDoesntSeeChild) { |
nested->SetVisible(true); |
view->AddChild(nested); |
- ViewManager* embedded = Embed(window_manager(), view); |
+ ViewManager* embedded = Embed(view); |
ASSERT_NE(nullptr, embedded); |
View* view_in_embedded = embedded->GetRoot(); |
EXPECT_EQ(view->id(), view_in_embedded->id()); |
@@ -378,7 +391,7 @@ TEST_F(ViewManagerTest, SetBounds) { |
View* view = window_manager()->CreateView(); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* embedded = Embed(window_manager(), view); |
+ ViewManager* embedded = Embed(view); |
ASSERT_NE(nullptr, embedded); |
View* view_in_embedded = embedded->GetViewById(view->id()); |
@@ -397,7 +410,7 @@ TEST_F(ViewManagerTest, SetBoundsSecurity) { |
View* view = window_manager()->CreateView(); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* embedded = Embed(window_manager(), view); |
+ ViewManager* embedded = Embed(view); |
ASSERT_NE(nullptr, embedded); |
View* view_in_embedded = embedded->GetViewById(view->id()); |
@@ -419,7 +432,7 @@ TEST_F(ViewManagerTest, DestroySecurity) { |
View* view = window_manager()->CreateView(); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* embedded = Embed(window_manager(), view); |
+ ViewManager* embedded = Embed(view); |
ASSERT_NE(nullptr, embedded); |
View* view_in_embedded = embedded->GetViewById(view->id()); |
@@ -441,22 +454,13 @@ TEST_F(ViewManagerTest, MultiRoots) { |
View* view2 = window_manager()->CreateView(); |
view2->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view2); |
- ViewManager* embedded1 = Embed(window_manager(), view1); |
+ ViewManager* embedded1 = Embed(view1); |
ASSERT_NE(nullptr, embedded1); |
- ViewManager* embedded2 = Embed(window_manager(), view2); |
+ ViewManager* embedded2 = Embed(view2); |
ASSERT_NE(nullptr, embedded2); |
EXPECT_NE(embedded1, embedded2); |
} |
-TEST_F(ViewManagerTest, EmbeddingIdentity) { |
- View* view = window_manager()->CreateView(); |
- view->SetVisible(true); |
- window_manager()->GetRoot()->AddChild(view); |
- ViewManager* embedded = Embed(window_manager(), view); |
- ASSERT_NE(nullptr, embedded); |
- EXPECT_EQ(application_impl()->url(), embedded->GetEmbedderURL()); |
-} |
- |
// TODO(alhaad): Currently, the RunLoop gets stuck waiting for order change. |
// Debug and re-enable this. |
TEST_F(ViewManagerTest, DISABLED_Reorder) { |
@@ -464,7 +468,7 @@ TEST_F(ViewManagerTest, DISABLED_Reorder) { |
view1->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* embedded = Embed(window_manager(), view1); |
+ ViewManager* embedded = Embed(view1); |
ASSERT_NE(nullptr, embedded); |
View* view11 = embedded->CreateView(); |
@@ -528,7 +532,7 @@ TEST_F(ViewManagerTest, Visible) { |
window_manager()->GetRoot()->AddChild(view1); |
// Embed another app and verify initial state. |
- ViewManager* embedded = Embed(window_manager(), view1); |
+ ViewManager* embedded = Embed(view1); |
ASSERT_NE(nullptr, embedded); |
ASSERT_NE(nullptr, embedded->GetRoot()); |
View* embedded_root = embedded->GetRoot(); |
@@ -592,7 +596,7 @@ TEST_F(ViewManagerTest, Drawn) { |
window_manager()->GetRoot()->AddChild(view1); |
// Embed another app and verify initial state. |
- ViewManager* embedded = Embed(window_manager(), view1); |
+ ViewManager* embedded = Embed(view1); |
ASSERT_NE(nullptr, embedded); |
ASSERT_NE(nullptr, embedded->GetRoot()); |
View* embedded_root = embedded->GetRoot(); |
@@ -653,7 +657,7 @@ TEST_F(ViewManagerTest, Focus) { |
view1->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* embedded = Embed(window_manager(), view1); |
+ ViewManager* embedded = Embed(view1); |
ASSERT_NE(nullptr, embedded); |
View* view11 = embedded->CreateView(); |
view11->SetVisible(true); |
@@ -717,7 +721,7 @@ TEST_F(ViewManagerTest, DeleteViewManager) { |
ASSERT_NE(nullptr, view); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* view_manager = Embed(window_manager(), view); |
+ ViewManager* view_manager = Embed(view); |
ASSERT_TRUE(view_manager); |
bool got_destroy = false; |
DestroyedChangedObserver observer(view_manager->GetRoot(), &got_destroy); |
@@ -733,14 +737,14 @@ TEST_F(ViewManagerTest, DisconnectTriggersDelete) { |
ASSERT_NE(nullptr, view); |
view->SetVisible(true); |
window_manager()->GetRoot()->AddChild(view); |
- ViewManager* view_manager = Embed(window_manager(), view); |
+ ViewManager* view_manager = Embed(view); |
EXPECT_NE(view_manager, window_manager()); |
View* embedded_view = view_manager->CreateView(); |
// Embed again, this should trigger disconnect and deletion of view_manager. |
bool got_destroy; |
DestroyedChangedObserver observer(embedded_view, &got_destroy); |
EXPECT_FALSE(got_disconnect()); |
- Embed(window_manager(), view); |
+ Embed(view); |
EXPECT_TRUE(got_disconnect()); |
} |
@@ -774,7 +778,7 @@ TEST_F(ViewManagerTest, EmbedRemovesChildren) { |
view1->AddChild(view2); |
ViewRemovedFromParentObserver observer(view2); |
- view1->Embed(application_impl()->url()); |
+ ConnectToApplicationAndEmbed(view1); |
EXPECT_TRUE(observer.was_removed()); |
EXPECT_EQ(nullptr, view2->parent()); |
EXPECT_TRUE(view1->children().empty()); |
@@ -791,11 +795,11 @@ TEST_F(ViewManagerTest, OnWillEmbed) { |
View* view1 = window_manager()->CreateView(); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* view_manager = Embed(window_manager(), view1); |
+ ViewManager* view_manager = EmbedAllowingReembed(view1); |
View* view2 = view_manager->CreateView(); |
view_manager->GetRoot()->AddChild(view2); |
- Embed(view_manager, view2); |
+ EmbedAllowingReembed(view2); |
EXPECT_EQ(1u, on_will_embed_count()); |
} |
@@ -806,13 +810,15 @@ TEST_F(ViewManagerTest, OnWillEmbedFails) { |
View* view1 = window_manager()->CreateView(); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* view_manager = Embed(window_manager(), view1); |
+ ViewManager* view_manager = Embed(view1); |
View* view2 = view_manager->CreateView(); |
view_manager->GetRoot()->AddChild(view2); |
clear_on_will_embed_count(); |
set_on_will_embed_return_value(false); |
- view2->Embed(application_impl()->url()); |
+ mojo::URLRequestPtr request(mojo::URLRequest::New()); |
+ request->url = application_impl()->url(); |
+ view2->EmbedAllowingReembed(request.Pass()); |
EXPECT_TRUE(DoRunLoopWithTimeout()); |
EXPECT_EQ(1u, on_will_embed_count()); |
@@ -833,16 +839,16 @@ TEST_F(ViewManagerTest, ReembedFails) { |
View* view1 = window_manager()->CreateView(); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* view_manager = Embed(window_manager(), view1); |
+ ViewManager* view_manager = Embed(view1); |
ASSERT_TRUE(view_manager); |
View* view2 = view_manager->CreateView(); |
view_manager->GetRoot()->AddChild(view2); |
- Embed(view_manager, view2); |
+ Embed(view2); |
// Try to embed in view2 from the window_manager. This should fail as the |
// Embed() didn't grab reembed. |
View* view2_in_wm = window_manager()->GetViewById(view2->id()); |
- view2_in_wm->Embed(application_impl()->url()); |
+ ConnectToApplicationAndEmbed(view2_in_wm); |
// The Embed() call above returns immediately. To ensure the server has |
// processed it nudge the bounds and wait for it to be processed. |
@@ -859,13 +865,13 @@ TEST_F(ViewManagerTest, ReembedSucceeds) { |
View* view1 = window_manager()->CreateView(); |
window_manager()->GetRoot()->AddChild(view1); |
- ViewManager* view_manager = Embed(window_manager(), view1); |
+ ViewManager* view_manager = Embed(view1); |
View* view2 = view_manager->CreateView(); |
view_manager->GetRoot()->AddChild(view2); |
- EmbedAllowingReembed(view_manager, view2); |
+ EmbedAllowingReembed(view2); |
View* view2_in_wm = window_manager()->GetViewById(view2->id()); |
- ViewManager* view_manager2 = Embed(window_manager(), view2_in_wm); |
+ ViewManager* view_manager2 = Embed(view2_in_wm); |
ASSERT_TRUE(view_manager2); |
// The Embed() call above returns immediately. To ensure the server has |