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

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

Issue 817573003: Move wm_flow off of views and onto Sky (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Fix comments 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
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"); }
sky 2015/01/06 21:26:55 Why do you need to change this and 108?
eseidel 2015/01/06 21:48:18 Sky has multi-file dependencies. When you load "w
+ 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);
};

Powered by Google App Engine
This is Rietveld 408576698