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

Unified Diff: mojo/examples/nesting_app/nesting_app.cc

Issue 327523004: Introduce very beginning of navigation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add url dependency to two smaple apps Created 6 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
« no previous file with comments | « mojo/examples/embedded_app/embedded_app.cc ('k') | mojo/examples/window_manager/window_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/examples/nesting_app/nesting_app.cc
diff --git a/mojo/examples/nesting_app/nesting_app.cc b/mojo/examples/nesting_app/nesting_app.cc
index 249cc374873b8d9186126eff129ec7c6338e5f51..b882f4a7d2cab4b1649e3d8fbf3814fa86b16abc 100644
--- a/mojo/examples/nesting_app/nesting_app.cc
+++ b/mojo/examples/nesting_app/nesting_app.cc
@@ -4,8 +4,10 @@
#include "base/basictypes.h"
#include "base/bind.h"
+#include "base/strings/stringprintf.h"
#include "mojo/examples/window_manager/window_manager.mojom.h"
#include "mojo/public/cpp/application/application.h"
+#include "mojo/services/navigation/navigation.mojom.h"
#include "mojo/services/public/cpp/view_manager/view.h"
#include "mojo/services/public/cpp/view_manager/view_manager.h"
#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
@@ -13,6 +15,7 @@
#include "mojo/services/public/cpp/view_manager/view_tree_node.h"
#include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
#include "ui/events/event_constants.h"
+#include "url/gurl.h"
using mojo::view_manager::View;
using mojo::view_manager::ViewManager;
@@ -24,19 +27,42 @@ using mojo::view_manager::ViewTreeNodeObserver;
namespace mojo {
namespace examples {
+namespace {
+const char kEmbeddedAppURL[] = "mojo:mojo_embedded_app";
+}
+
// An app that embeds another app.
class NestingApp : public Application,
public ViewManagerDelegate,
public ViewObserver {
public:
- NestingApp() {}
+ NestingApp() : nested_(NULL) {}
virtual ~NestingApp() {}
private:
+ class Navigator : public InterfaceImpl<navigation::Navigator> {
+ public:
+ explicit Navigator(NestingApp* app) : app_(app) {}
+ private:
+ virtual void Navigate(uint32 node_id,
+ navigation::NavigationDetailsPtr details) OVERRIDE {
+ GURL url(details->url.To<std::string>());
+ if (!url.is_valid()) {
+ LOG(ERROR) << "URL is invalid.";
+ return;
+ }
+ app_->color_ = url.path().substr(1);
+ app_->NavigateChild();
+ }
+ NestingApp* app_;
+ DISALLOW_COPY_AND_ASSIGN(Navigator);
+ };
+
// Overridden from Application:
virtual void Initialize() MOJO_OVERRIDE {
ViewManager::Create(this, this);
ConnectTo<IWindowManager>("mojo:mojo_window_manager", &window_manager_);
+ AddService<Navigator>(this);
}
// Overridden from ViewManagerDelegate:
@@ -47,14 +73,21 @@ class NestingApp : public Application,
view->SetColor(SK_ColorCYAN);
view->AddObserver(this);
- ViewTreeNode* nested = ViewTreeNode::Create(view_manager);
- root->AddChild(nested);
- nested->SetBounds(gfx::Rect(20, 20, 50, 50));
- nested->Embed("mojo:mojo_embedded_app");
+ nested_ = ViewTreeNode::Create(view_manager);
+ root->AddChild(nested_);
+ nested_->SetBounds(gfx::Rect(20, 20, 50, 50));
+ nested_->Embed(kEmbeddedAppURL);
+
+ if (!navigator_.get())
+ ConnectTo(kEmbeddedAppURL, &navigator_);
+
+ NavigateChild();
}
+
virtual void OnRootRemoved(ViewManager* view_manager,
ViewTreeNode* root) OVERRIDE {
// TODO(beng): reap views & child nodes.
+ nested_ = NULL;
}
// Overridden from ViewObserver:
@@ -63,6 +96,19 @@ class NestingApp : public Application,
window_manager_->CloseWindow(view->node()->id());
}
+ void NavigateChild() {
+ if (!color_.empty() && nested_) {
+ navigation::NavigationDetailsPtr details(
+ navigation::NavigationDetails::New());
+ details->url =
+ base::StringPrintf("%s/%s", kEmbeddedAppURL, color_.c_str());
+ navigator_->Navigate(nested_->id(), details.Pass());
+ }
+ }
+
+ std::string color_;
+ ViewTreeNode* nested_;
+ navigation::NavigatorPtr navigator_;
IWindowManagerPtr window_manager_;
DISALLOW_COPY_AND_ASSIGN(NestingApp);
« no previous file with comments | « mojo/examples/embedded_app/embedded_app.cc ('k') | mojo/examples/window_manager/window_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698