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

Unified Diff: components/view_manager/view_manager_service_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_service_apptest.cc
diff --git a/components/view_manager/view_manager_service_apptest.cc b/components/view_manager/view_manager_service_apptest.cc
index e320299800535917ed1c718f801a7ff598715a2a..46463af8d63852d76e8502e3fba289199e971853 100644
--- a/components/view_manager/view_manager_service_apptest.cc
+++ b/components/view_manager/view_manager_service_apptest.cc
@@ -69,7 +69,7 @@ void ViewTreeResultCallback(base::RunLoop* run_loop,
// -----------------------------------------------------------------------------
// The following functions call through to the supplied ViewManagerService. They
-// block until call completes and return the result.
+// block until the call completes and return the result.
bool CreateView(ViewManagerService* vm, Id view_id) {
ErrorCode result = ERROR_CODE_NONE;
base::RunLoop run_loop;
@@ -79,14 +79,38 @@ bool CreateView(ViewManagerService* vm, Id view_id) {
return result == ERROR_CODE_NONE;
}
-bool EmbedUrl(ViewManagerService* vm, const String& url, Id root_id) {
+bool EmbedUrl(mojo::ApplicationImpl* app,
+ ViewManagerService* vm,
+ const String& url,
+ Id root_id) {
bool result = false;
base::RunLoop run_loop;
{
mojo::URLRequestPtr request(mojo::URLRequest::New());
request->url = mojo::String::From(url);
- vm->EmbedRequest(request.Pass(), root_id, nullptr, nullptr,
- base::Bind(&BoolResultCallback, &run_loop, &result));
+ ApplicationConnection* connection =
+ app->ConnectToApplication(request.Pass());
+ mojo::ViewManagerClientPtr client;
+ connection->ConnectToService(&client);
+ vm->Embed(root_id, client.Pass(),
+ base::Bind(&BoolResultCallback, &run_loop, &result));
+ }
+ run_loop.Run();
+ return result;
+}
+
+bool EmbedAllowingReembed(mojo::ApplicationImpl* app,
+ ViewManagerService* vm,
+ const String& url,
+ Id root_id) {
+ bool result = false;
+ base::RunLoop run_loop;
+ {
+ mojo::URLRequestPtr request(mojo::URLRequest::New());
+ request->url = mojo::String::From(url);
+ vm->EmbedAllowingReembed(
+ root_id, request.Pass(),
+ base::Bind(&BoolResultCallback, &run_loop, &result));
}
run_loop.Run();
return result;
@@ -231,7 +255,10 @@ bool HasClonedView(const std::vector<TestView>& views) {
class ViewManagerClientImpl : public mojo::ViewManagerClient,
public TestChangeTracker::Delegate {
public:
- ViewManagerClientImpl() : binding_(this) { tracker_.set_delegate(this); }
+ explicit ViewManagerClientImpl(mojo::ApplicationImpl* app)
+ : binding_(this), app_(app) {
+ tracker_.set_delegate(this);
+ }
void Bind(mojo::InterfaceRequest<mojo::ViewManagerClient> request) {
binding_.Bind(request.Pass());
@@ -286,24 +313,25 @@ class ViewManagerClientImpl : public mojo::ViewManagerClient,
// ViewManagerClient:
void OnEmbed(ConnectionSpecificId connection_id,
- const String& creator_url,
ViewDataPtr root,
mojo::ViewManagerServicePtr view_manager_service,
- InterfaceRequest<ServiceProvider> services,
- ServiceProviderPtr exposed_services,
mojo::Id focused_view_id) override {
// TODO(sky): add coverage of |focused_view_id|.
service_ = view_manager_service.Pass();
- tracker()->OnEmbed(connection_id, creator_url, root.Pass());
+ tracker()->OnEmbed(connection_id, root.Pass());
if (embed_run_loop_)
embed_run_loop_->Quit();
}
- void OnWillEmbed(uint32_t view,
- mojo::InterfaceRequest<mojo::ServiceProvider> services,
- mojo::ServiceProviderPtr exposed_services,
- const OnWillEmbedCallback& callback) override {
- tracker()->OnWillEmbed(view);
- callback.Run(true, services.Pass(), exposed_services.Pass());
+ void OnEmbedForDescendant(
+ uint32_t view,
+ mojo::URLRequestPtr request,
+ const OnEmbedForDescendantCallback& callback) override {
+ tracker()->OnEmbedForDescendant(view);
+ mojo::ViewManagerClientPtr client;
+ ApplicationConnection* connection =
+ app_->ConnectToApplication(request.Pass());
+ connection->ConnectToService(&client);
+ callback.Run(client.Pass());
}
void OnEmbeddedAppDisconnected(Id view_id) override {
tracker()->OnEmbeddedAppDisconnected(view_id);
@@ -364,6 +392,8 @@ class ViewManagerClientImpl : public mojo::ViewManagerClient,
scoped_ptr<WaitState> wait_state_;
mojo::Binding<ViewManagerClient> binding_;
+ mojo::ApplicationImpl* app_;
+
DISALLOW_COPY_AND_ASSIGN(ViewManagerClientImpl);
};
@@ -373,7 +403,7 @@ class ViewManagerClientImpl : public mojo::ViewManagerClient,
class ViewManagerClientFactory
: public mojo::InterfaceFactory<ViewManagerClient> {
public:
- ViewManagerClientFactory() {}
+ explicit ViewManagerClientFactory(mojo::ApplicationImpl* app) : app_(app) {}
~ViewManagerClientFactory() override {}
// Runs a nested MessageLoop until a new instance has been created.
@@ -391,12 +421,13 @@ class ViewManagerClientFactory
// InterfaceFactory<ViewManagerClient>:
void Create(ApplicationConnection* connection,
InterfaceRequest<ViewManagerClient> request) override {
- client_impl_.reset(new ViewManagerClientImpl);
+ client_impl_.reset(new ViewManagerClientImpl(app_));
client_impl_->Bind(request.Pass());
if (run_loop_.get())
run_loop_->Quit();
}
+ mojo::ApplicationImpl* app_;
scoped_ptr<ViewManagerClientImpl> client_impl_;
scoped_ptr<base::RunLoop> run_loop_;
@@ -410,6 +441,11 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
~ViewManagerServiceAppTest() override {}
protected:
+ enum class EmbedType {
+ ALLOW_REEMBED,
+ NO_REEMBED,
+ };
+
// Returns the changes from the various connections.
std::vector<Change>* changes1() { return vm_client1_->tracker()->changes(); }
std::vector<Change>* changes2() { return vm_client2_->tracker()->changes(); }
@@ -423,7 +459,8 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
void EstablishSecondConnectionWithRoot(Id root_id) {
ASSERT_TRUE(vm_client2_.get() == nullptr);
- vm_client2_ = EstablishConnectionViaEmbed(vm1(), root_id);
+ vm_client2_ =
+ EstablishConnectionViaEmbed(vm1(), root_id, EmbedType::NO_REEMBED);
ASSERT_TRUE(vm_client2_.get() != nullptr);
}
@@ -439,7 +476,8 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
void EstablishThirdConnection(ViewManagerService* owner, Id root_id) {
ASSERT_TRUE(vm_client3_.get() == nullptr);
- vm_client3_ = EstablishConnectionViaEmbed(owner, root_id);
+ vm_client3_ =
+ EstablishConnectionViaEmbed(owner, root_id, EmbedType::NO_REEMBED);
ASSERT_TRUE(vm_client3_.get() != nullptr);
}
@@ -447,20 +485,28 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
// ViewManagerService.
scoped_ptr<ViewManagerClientImpl> EstablishConnectionViaEmbed(
ViewManagerService* owner,
- Id root_id) {
- if (!EmbedUrl(owner, application_impl()->url(), root_id)) {
+ Id root_id,
+ EmbedType embed_type) {
+ if (embed_type == EmbedType::NO_REEMBED &&
+ !EmbedUrl(application_impl(), owner, application_impl()->url(),
+ root_id)) {
+ ADD_FAILURE() << "Embed() failed";
+ return nullptr;
+ } else if (embed_type == EmbedType::ALLOW_REEMBED &&
+ !EmbedAllowingReembed(application_impl(), owner,
+ application_impl()->url(), root_id)) {
ADD_FAILURE() << "Embed() failed";
return nullptr;
}
scoped_ptr<ViewManagerClientImpl> client =
- client_factory_.WaitForInstance();
+ client_factory_->WaitForInstance();
if (!client.get()) {
ADD_FAILURE() << "WaitForInstance failed";
return nullptr;
}
client->WaitForOnEmbed();
- EXPECT_EQ("OnEmbed creator=" + application_impl()->url(),
+ EXPECT_EQ("OnEmbed",
SingleChangeToDescription(*client->tracker()->changes()));
return client.Pass();
}
@@ -469,14 +515,15 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
ApplicationDelegate* GetApplicationDelegate() override { return this; }
void SetUp() override {
ApplicationTestBase::SetUp();
+ client_factory_.reset(new ViewManagerClientFactory(application_impl()));
mojo::URLRequestPtr request(mojo::URLRequest::New());
request->url = mojo::String::From("mojo:view_manager");
ApplicationConnection* vm_connection =
application_impl()->ConnectToApplication(request.Pass());
vm_connection->ConnectToService(&vm1_);
vm_connection->ConnectToService(&view_manager_root_);
- vm_connection->AddService(&client_factory_);
- vm_client1_ = client_factory_.WaitForInstance();
+ vm_connection->AddService(client_factory_.get());
+ vm_client1_ = client_factory_->WaitForInstance();
ASSERT_TRUE(vm_client1_);
// Next we should get an embed call on the "window manager" client.
vm_client1_->WaitForIncomingMethodCall();
@@ -491,7 +538,7 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
// ApplicationDelegate implementation.
bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
- connection->AddService(&client_factory_);
+ connection->AddService(client_factory_.get());
return true;
}
@@ -503,7 +550,7 @@ class ViewManagerServiceAppTest : public mojo::test::ApplicationTestBase,
private:
mojo::ViewManagerServicePtr vm1_;
- ViewManagerClientFactory client_factory_;
+ scoped_ptr<ViewManagerClientFactory> client_factory_;
MOJO_DISALLOW_COPY_AND_ASSIGN(ViewManagerServiceAppTest);
};
@@ -1203,8 +1250,8 @@ TEST_F(ViewManagerServiceAppTest, MAYBE_EmbedWithSameViewId2) {
changes3()->clear();
// We should get a new connection for the new embedding.
- scoped_ptr<ViewManagerClientImpl> connection4(
- EstablishConnectionViaEmbed(vm1(), BuildViewId(1, 1)));
+ scoped_ptr<ViewManagerClientImpl> connection4(EstablishConnectionViaEmbed(
+ vm1(), BuildViewId(1, 1), EmbedType::NO_REEMBED));
ASSERT_TRUE(connection4.get());
EXPECT_EQ("[view=1,1 parent=null]",
ChangeViewDescription(*connection4->tracker()->changes()));
@@ -1557,12 +1604,12 @@ TEST_F(ViewManagerServiceAppTest, MAYBE_CloneAndAnimate) {
TEST_F(ViewManagerServiceAppTest, EmbedSupplyingViewManagerClient) {
ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1)));
- ViewManagerClientImpl client2;
+ ViewManagerClientImpl client2(application_impl());
mojo::ViewManagerClientPtr client2_ptr;
mojo::Binding<ViewManagerClient> client2_binding(&client2, &client2_ptr);
ASSERT_TRUE(Embed(vm1(), BuildViewId(1, 1), client2_ptr.Pass()));
client2.WaitForOnEmbed();
- EXPECT_EQ("OnEmbed creator=" + application_impl()->url(),
+ EXPECT_EQ("OnEmbed",
SingleChangeToDescription(*client2.tracker()->changes()));
}
@@ -1587,10 +1634,11 @@ TEST_F(ViewManagerServiceAppTest, MAYBE_OnWillEmbed) {
changes2()->clear();
// Embed 4 into 3, connection 2 should get the OnWillEmbed.
- scoped_ptr<ViewManagerClientImpl> connection4(
- EstablishConnectionViaEmbed(vm3(), BuildViewId(3, 3)));
+ scoped_ptr<ViewManagerClientImpl> connection4(EstablishConnectionViaEmbed(
+ vm3(), BuildViewId(3, 3), EmbedType::ALLOW_REEMBED));
ASSERT_TRUE(connection4.get());
- EXPECT_EQ("OnWillEmbed view=3,3", SingleChangeToDescription(*changes2()));
+ EXPECT_EQ("OnEmbedForDescendant view=3,3",
+ SingleChangeToDescription(*changes2()));
// Mark 3 as an embed root.
vm3()->SetEmbedRoot();
@@ -1603,10 +1651,11 @@ TEST_F(ViewManagerServiceAppTest, MAYBE_OnWillEmbed) {
ASSERT_TRUE(CreateView(connection4->service(), BuildViewId(4, 4)));
ASSERT_TRUE(
AddView(connection4->service(), BuildViewId(3, 3), BuildViewId(4, 4)));
- scoped_ptr<ViewManagerClientImpl> connection5(
- EstablishConnectionViaEmbed(connection4->service(), BuildViewId(4, 4)));
+ scoped_ptr<ViewManagerClientImpl> connection5(EstablishConnectionViaEmbed(
+ connection4->service(), BuildViewId(4, 4), EmbedType::ALLOW_REEMBED));
ASSERT_TRUE(connection5.get());
- EXPECT_EQ("OnWillEmbed view=4,4", SingleChangeToDescription(*changes3()));
+ EXPECT_EQ("OnEmbedForDescendant view=4,4",
+ SingleChangeToDescription(*changes3()));
ASSERT_TRUE(changes2()->empty());
}
« no previous file with comments | « components/view_manager/view_manager_client_apptest.cc ('k') | components/view_manager/view_manager_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698