| Index: examples/wm_flow/app/app.cc
|
| diff --git a/examples/wm_flow/app/app.cc b/examples/wm_flow/app/app.cc
|
| index 7edcdc87c14568c09cf18e24e0dfad653285a928..6dd5ba43f5d25ea1cd530d0b2802f6446c85682a 100644
|
| --- a/examples/wm_flow/app/app.cc
|
| +++ b/examples/wm_flow/app/app.cc
|
| @@ -26,6 +26,7 @@
|
| #include "mojo/services/view_manager/public/cpp/view_manager_delegate.h"
|
| #include "mojo/services/view_manager/public/cpp/view_observer.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| +#include "url/gurl.h"
|
|
|
| namespace examples {
|
| namespace {
|
| @@ -68,6 +69,9 @@ class WMFlowApp : public mojo::ApplicationDelegate,
|
| view_manager_client_factory_.reset(
|
| new mojo::ViewManagerClientFactory(app->shell(), this));
|
| view_manager_context_.reset(new mojo::ViewManagerContext(app));
|
| + // FIXME: Mojo applications don't know their URLs yet:
|
| + // https://docs.google.com/a/chromium.org/document/d/1AQ2y6ekzvbdaMF5WrUQmneyXJnke-MnYYL4Gz1AKDos
|
| + url_ = GURL(app->args()[1]);
|
| OpenNewWindow();
|
| OpenNewWindow();
|
| OpenNewWindow();
|
| @@ -89,6 +93,10 @@ class WMFlowApp : public mojo::ApplicationDelegate,
|
| mojo::BitmapUploader* uploader = new mojo::BitmapUploader(root);
|
| uploaders_[root] = uploader;
|
| uploader->Init(shell_);
|
| + // BitmapUploader does not track view size changes, we would
|
| + // need to subscribe to OnViewBoundsChanged and tell the bitmap uploader
|
| + // to invalidate itself. This is better done once if had a per-view
|
| + // object instead of holding per-view state on the ApplicationDelegate.
|
| uploader->SetColor(kColors[embed_count_++ % arraysize(kColors)]);
|
|
|
| mojo::View* embed = root->view_manager()->CreateView();
|
| @@ -104,8 +112,15 @@ class WMFlowApp : public mojo::ApplicationDelegate,
|
| new mojo::ServiceProviderImpl);
|
| // Expose some services to the embeddee...
|
| registry->AddService(&embedder_factory_);
|
| +
|
| + GURL embedded_app_url = url_.Resolve("wm_flow_embedded.mojo");
|
| scoped_ptr<mojo::ServiceProvider> imported =
|
| - embed->Embed("mojo:wm_flow_embedded", registry.Pass());
|
| + embed->Embed(embedded_app_url.spec(), registry.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
|
| + // be a ViewManagerDelegate, but rather a separate object should be
|
| + // created for each embedding.
|
| mojo::ConnectToService(imported.get(), &embeddee_);
|
| embeddee_->HelloBack(base::Bind(&WMFlowApp::HelloBackAck,
|
| base::Unretained(this)));
|
| @@ -136,7 +151,7 @@ class WMFlowApp : public mojo::ApplicationDelegate,
|
| printf("HelloBack() ack'ed\n");
|
| }
|
|
|
| - void OpenNewWindow() { view_manager_context_->Embed("mojo:wm_flow_app"); }
|
| + void OpenNewWindow() { view_manager_context_->Embed(url_.spec()); }
|
|
|
| mojo::Shell* shell_;
|
| int embed_count_;
|
| @@ -145,6 +160,7 @@ class WMFlowApp : public mojo::ApplicationDelegate,
|
| scoped_ptr<mojo::ViewManagerContext> view_manager_context_;
|
| EmbeddeePtr embeddee_;
|
| ViewToUploader uploaders_;
|
| + GURL url_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(WMFlowApp);
|
| };
|
|
|