Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(745)

Unified Diff: components/view_manager/view_manager_client_apptest.cc

Issue 1166123005: Removes ServiceProviders from ViewManager::Embed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use is_headless rather than check for browser. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « components/view_manager/view_manager_app.cc ('k') | components/view_manager/view_manager_service_apptest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698