Chromium Code Reviews| Index: mojo/examples/wm_flow/app/app.cc |
| diff --git a/mojo/examples/wm_flow/app/app.cc b/mojo/examples/wm_flow/app/app.cc |
| index 075f98ae84bcb203852da06f67926080f5057592..fbcf27a60ec1d5a1096a0c1a1857a5498f8f00c8 100644 |
| --- a/mojo/examples/wm_flow/app/app.cc |
| +++ b/mojo/examples/wm_flow/app/app.cc |
| @@ -3,9 +3,15 @@ |
| // found in the LICENSE file. |
| #include "base/bind.h" |
| +#include "mojo/examples/wm_flow/app/embedder.mojom.h" |
| +#include "mojo/examples/wm_flow/embedded/embeddee.mojom.h" |
| #include "mojo/public/cpp/application/application_connection.h" |
| #include "mojo/public/cpp/application/application_delegate.h" |
| #include "mojo/public/cpp/application/application_impl.h" |
| +#include "mojo/public/cpp/application/connect.h" |
| +#include "mojo/public/cpp/application/exported_service_registry.h" |
| +#include "mojo/public/cpp/application/interface_factory_impl.h" |
| +#include "mojo/public/interfaces/application/service_provider.mojom.h" |
| #include "mojo/services/public/cpp/view_manager/node.h" |
| #include "mojo/services/public/cpp/view_manager/view.h" |
| #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| @@ -19,6 +25,20 @@ void ConnectCallback(bool success) {} |
| const SkColor kColors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorYELLOW }; |
| +class EmbedderImpl : public mojo::InterfaceImpl<Embedder> { |
| + public: |
| + EmbedderImpl() {} |
| + virtual ~EmbedderImpl() {} |
| + |
| + private: |
| + // Overridden from Embedder: |
| + virtual void HelloWorld(const mojo::Callback<void()>& callback) OVERRIDE { |
| + callback.Run(); |
| + } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(EmbedderImpl); |
| +}; |
| + |
| } // namespace |
| // This app starts its life via Connect() rather than by being embed, so it does |
| @@ -28,17 +48,21 @@ const SkColor kColors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorYELLOW }; |
| class WMFlowApp : public mojo::ApplicationDelegate, |
| public mojo::ViewManagerDelegate { |
| public: |
| - WMFlowApp() : embed_count_(0), view_manager_client_factory_(this) {} |
| + WMFlowApp() |
| + : embed_count_(0), |
| + view_manager_client_factory_(this) {} |
| virtual ~WMFlowApp() {} |
| private: |
| // Overridden from Application: |
| virtual void Initialize(mojo::ApplicationImpl* app) MOJO_OVERRIDE { |
| mojo::ViewManagerInitServicePtr init_svc; |
| + mojo::ServiceProviderPtr sp; |
| app->ConnectToService("mojo:mojo_view_manager", &init_svc); |
| - init_svc->Embed("mojo:mojo_wm_flow_app", base::Bind(&ConnectCallback)); |
| - init_svc->Embed("mojo:mojo_wm_flow_app", base::Bind(&ConnectCallback)); |
| - init_svc->Embed("mojo:mojo_wm_flow_app", base::Bind(&ConnectCallback)); |
| + init_svc->Embed("mojo:mojo_wm_flow_app", sp.Pass(), |
| + base::Bind(&ConnectCallback)); |
| + //init_svc->Embed("mojo:mojo_wm_flow_app", base::Bind(&ConnectCallback)); |
|
sky
2014/07/31 21:14:10
nit: remove early attempts.
|
| + //init_svc->Embed("mojo:mojo_wm_flow_app", base::Bind(&ConnectCallback)); |
| } |
| virtual bool ConfigureIncomingConnection( |
| mojo::ApplicationConnection* connection) MOJO_OVERRIDE { |
| @@ -49,18 +73,43 @@ class WMFlowApp : public mojo::ApplicationDelegate, |
| void OnConnect(bool success) {} |
| // Overridden from mojo::ViewManagerDelegate: |
| - virtual void OnEmbed(mojo::ViewManager* view_manager, |
| - mojo::Node* root) MOJO_OVERRIDE { |
| + virtual void OnEmbed( |
| + mojo::ViewManager* view_manager, |
| + mojo::Node* root, |
| + mojo::ExportedServiceRegistry* exported_services, |
| + scoped_ptr<mojo::ServiceProvider> imported_services) MOJO_OVERRIDE { |
| mojo::View* view = |
| mojo::View::Create(view_manager); |
| root->SetActiveView(view); |
| view->SetColor(kColors[embed_count_++ % arraysize(kColors)]); |
| + |
| + mojo::Node* embed = mojo::Node::Create(view_manager); |
| + root->AddChild(embed); |
| + gfx::Rect bounds = root->bounds(); |
| + bounds.Inset(25, 25); |
| + embed->SetBounds(bounds); |
| + |
| + scoped_ptr<mojo::ExportedServiceRegistry> registry( |
| + new mojo::ExportedServiceRegistry); |
| + // Expose some services to the embeddee... |
| + registry->AddService(&embedder_factory_); |
| + scoped_ptr<mojo::ServiceProvider> imported = |
| + embed->Embed("mojo:mojo_wm_flow_embedded", registry.Pass()); |
| + mojo::ConnectToService(imported.get(), &embeddee_); |
| + embeddee_->HelloBack(base::Bind(&WMFlowApp::HelloBackAck, |
| + base::Unretained(this))); |
| } |
| virtual void OnViewManagerDisconnected( |
| mojo::ViewManager* view_manager) MOJO_OVERRIDE {} |
| + void HelloBackAck() { |
| + printf("HelloBack() ack'ed\n"); |
| + } |
| + |
| int embed_count_; |
| mojo::ViewManagerClientFactory view_manager_client_factory_; |
| + mojo::InterfaceFactoryImpl<EmbedderImpl> embedder_factory_; |
| + EmbeddeePtr embeddee_; |
| DISALLOW_COPY_AND_ASSIGN(WMFlowApp); |
| }; |