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

Unified Diff: examples/wm_flow/app/app.cc

Issue 858103002: Remove [Client=] annotation from ServiceProvider (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: rebase for trybots (no code changes from ps2) Created 5 years, 11 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
« no previous file with comments | « examples/wm_flow/BUILD.gn ('k') | examples/wm_flow/embedded/embedded.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: examples/wm_flow/app/app.cc
diff --git a/examples/wm_flow/app/app.cc b/examples/wm_flow/app/app.cc
index 6e4c2435a86947cbd8527e70e3eec9588605e0d0..7a1171e574781bd9848f0bb6fe093317bf1c1388 100644
--- a/examples/wm_flow/app/app.cc
+++ b/examples/wm_flow/app/app.cc
@@ -11,6 +11,7 @@
#include "examples/wm_flow/app/embedder.mojom.h"
#include "examples/wm_flow/embedded/embeddee.mojom.h"
#include "mojo/application/application_runner_chromium.h"
+#include "mojo/common/weak_binding_set.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_connection.h"
#include "mojo/public/cpp/application/application_delegate.h"
@@ -47,6 +48,30 @@ class EmbedderImpl : public mojo::InterfaceImpl<Embedder> {
DISALLOW_COPY_AND_ASSIGN(EmbedderImpl);
};
+class EmbedderImplProvider : public mojo::ServiceProvider {
+ public:
+ EmbedderImplProvider() {}
+ ~EmbedderImplProvider() override {}
+
+ void AddBinding(mojo::InterfaceRequest<mojo::ServiceProvider> request) {
+ embeddee_exposed_services_.AddBinding(this, request.Pass());
+ }
+
+ private:
+ // mojo::ServiceProvider implementation
+ void ConnectToService(const mojo::String& interface_name,
+ mojo::ScopedMessagePipeHandle pipe_handle) override {
+ if (interface_name != Embedder::Name_)
+ return;
+ auto request = mojo::MakeRequest<Embedder>(pipe_handle.Pass());
+ mojo::BindToRequest(new EmbedderImpl, &request);
+ }
+
+ mojo::WeakBindingSet<mojo::ServiceProvider> embeddee_exposed_services_;
+
+ DISALLOW_COPY_AND_ASSIGN(EmbedderImplProvider);
+};
+
} // namespace
// This app starts its life via Connect() rather than by being embed, so it does
@@ -83,10 +108,9 @@ class WMFlowApp : public mojo::ApplicationDelegate,
}
// Overridden from mojo::ViewManagerDelegate:
- virtual void OnEmbed(
- mojo::View* root,
- mojo::ServiceProviderImpl* exported_services,
- scoped_ptr<mojo::ServiceProvider> imported_services) override {
+ virtual void OnEmbed(mojo::View* root,
+ mojo::InterfaceRequest<mojo::ServiceProvider> services,
+ mojo::ServiceProviderPtr exposed_services) override {
root->AddObserver(this);
mojo::BitmapUploader* uploader = new mojo::BitmapUploader(root);
uploaders_[root] = uploader;
@@ -106,14 +130,13 @@ class WMFlowApp : public mojo::ApplicationDelegate,
embed->SetBounds(bounds);
embed->SetVisible(true);
- scoped_ptr<mojo::ServiceProviderImpl> registry(
- new mojo::ServiceProviderImpl);
- // Expose some services to the embeddee...
- registry->AddService(&embedder_factory_);
+ mojo::ServiceProviderPtr embedee_exposed_services;
+ embeddee_provider_.AddBinding(GetProxy(&embedee_exposed_services));
GURL embedded_app_url = url_.Resolve("wm_flow_embedded.mojo");
- scoped_ptr<mojo::ServiceProvider> imported =
- embed->Embed(embedded_app_url.spec(), registry.Pass());
+ mojo::ServiceProviderPtr imported;
+ embed->Embed(embedded_app_url.spec(), GetProxy(&imported),
+ embedee_exposed_services.Pass());
// FIXME: This is wrong. We're storing per-view state on this per-app
// delegate. Every time a new view is created embedee_ is replaced
// causing the previous one to shut down. This class should not
@@ -154,9 +177,9 @@ class WMFlowApp : public mojo::ApplicationDelegate,
mojo::Shell* shell_;
int embed_count_;
scoped_ptr<mojo::ViewManagerClientFactory> view_manager_client_factory_;
- mojo::InterfaceFactoryImpl<EmbedderImpl> embedder_factory_;
scoped_ptr<mojo::ViewManagerContext> view_manager_context_;
EmbeddeePtr embeddee_;
+ EmbedderImplProvider embeddee_provider_;
ViewToUploader uploaders_;
GURL url_;
« no previous file with comments | « examples/wm_flow/BUILD.gn ('k') | examples/wm_flow/embedded/embedded.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698