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

Unified Diff: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc

Issue 303163005: Embedding demo in View manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 7 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: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
index 2ae13781cbd808b6bc33e4f972ffd1f1cf6b4ca9..7d1d489ef51e0db3a7ee2b08152a66f68717cf57 100644
--- a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
+++ b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
@@ -5,7 +5,7 @@
#include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
#include "base/bind.h"
-#include "base/run_loop.h"
+#include "base/message_loop/message_loop.h"
#include "mojo/public/cpp/application/connect.h"
#include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
#include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h"
@@ -108,7 +108,9 @@ class ViewManagerTransaction {
// Node bounds.
TYPE_SET_BOUNDS,
// View contents
- TYPE_SET_VIEW_CONTENTS
+ TYPE_SET_VIEW_CONTENTS,
+ // Embed.
+ TYPE_EMBED
};
ViewManagerTransaction(TransactionType transaction_type,
@@ -125,7 +127,7 @@ class ViewManagerTransaction {
// service.
virtual void DoActionCompleted(bool success) = 0;
- IViewManager* service() { return synchronizer_->service_.get(); }
+ IViewManager* service() { return synchronizer_->service_; }
TransportChangeId GetAndAdvanceNextServerChangeId() {
return synchronizer_->next_server_change_id_++;
@@ -405,26 +407,42 @@ class SetViewContentsTransaction : public ViewManagerTransaction {
DISALLOW_COPY_AND_ASSIGN(SetViewContentsTransaction);
};
+class EmbedTransaction : public ViewManagerTransaction {
+ public:
+ EmbedTransaction(const String& url,
+ TransportNodeId node_id,
+ ViewManagerSynchronizer* synchronizer)
+ : ViewManagerTransaction(TYPE_EMBED, synchronizer),
+ url_(url),
+ node_id_(node_id) {}
+ virtual ~EmbedTransaction() {}
+
+ private:
+ // Overridden from ViewManagerTransaction:
+ virtual void DoCommit() OVERRIDE {
+ std::vector<TransportNodeId> ids;
+ ids.push_back(node_id_);
+ service()->Connect(url_, Array<TransportNodeId>::From(ids),
+ ActionCompletedCallback());
+ }
+ virtual void DoActionCompleted(bool success) OVERRIDE {
+ // TODO(beng): recovery?
+ }
+
+ const String url_;
+ const TransportNodeId node_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(EmbedTransaction);
+};
+
ViewManagerSynchronizer::ViewManagerSynchronizer(ViewManager* view_manager)
: view_manager_(view_manager),
connected_(false),
connection_id_(0),
next_id_(1),
next_server_change_id_(0),
- sync_factory_(this),
- init_loop_(NULL) {
- ConnectToService(
- ViewManagerPrivate(view_manager_).service_provider(),
- "mojo:mojo_view_manager",
- &service_);
- service_.set_client(this);
-
- // Start a runloop. This loop is quit when the server tells us about the
- // connection (OnConnectionEstablished()).
- base::RunLoop loop;
- init_loop_ = &loop;
- init_loop_->Run();
- init_loop_ = NULL;
+ sync_factory_(this) {
+ ViewManagerPrivate(view_manager).set_synchronizer(this);
}
ViewManagerSynchronizer::~ViewManagerSynchronizer() {
@@ -517,6 +535,20 @@ void ViewManagerSynchronizer::SetViewContents(TransportViewId view_id,
Sync();
}
+void ViewManagerSynchronizer::Embed(const String& url,
+ TransportNodeId node_id) {
+ DCHECK(connected_);
+ pending_transactions_.push_back(new EmbedTransaction(url, node_id, this));
+ Sync();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ViewManagerSynchronizer, InterfaceImpl overrides:
+
+void ViewManagerSynchronizer::OnConnectionEstablished() {
+ service_ = client();
+}
+
////////////////////////////////////////////////////////////////////////////////
// ViewManagerSynchronizer, IViewManagerClient implementation:
@@ -528,12 +560,12 @@ void ViewManagerSynchronizer::OnViewManagerConnectionEstablished(
connection_id_ = connection_id;
next_server_change_id_ = next_server_change_id;
- ViewManagerPrivate(view_manager_).set_root(
- BuildNodeTree(view_manager_, nodes));
- if (init_loop_)
- init_loop_->Quit();
+ ViewManagerPrivate(view_manager()).set_root(
+ BuildNodeTree(view_manager(), nodes));
Sync();
+
+ base::MessageLoop::current()->Quit();
}
void ViewManagerSynchronizer::OnServerChangeIdAdvanced(
@@ -544,7 +576,7 @@ void ViewManagerSynchronizer::OnServerChangeIdAdvanced(
void ViewManagerSynchronizer::OnNodeBoundsChanged(uint32 node_id,
RectPtr old_bounds,
RectPtr new_bounds) {
- ViewTreeNode* node = view_manager_->GetNodeById(node_id);
+ ViewTreeNode* node = view_manager()->GetNodeById(node_id);
ViewTreeNodePrivate(node).LocalSetBounds(old_bounds.To<gfx::Rect>(),
new_bounds.To<gfx::Rect>());
}
@@ -558,11 +590,11 @@ void ViewManagerSynchronizer::OnNodeHierarchyChanged(
// TODO: deal with |nodes|.
next_server_change_id_ = server_change_id + 1;
- BuildNodeTree(view_manager_, nodes);
+ BuildNodeTree(view_manager(), nodes);
- ViewTreeNode* new_parent = view_manager_->GetNodeById(new_parent_id);
- ViewTreeNode* old_parent = view_manager_->GetNodeById(old_parent_id);
- ViewTreeNode* node = view_manager_->GetNodeById(node_id);
+ ViewTreeNode* new_parent = view_manager()->GetNodeById(new_parent_id);
+ ViewTreeNode* old_parent = view_manager()->GetNodeById(old_parent_id);
+ ViewTreeNode* node = view_manager()->GetNodeById(node_id);
if (new_parent)
ViewTreeNodePrivate(new_parent).LocalAddChild(node);
else
@@ -573,7 +605,7 @@ void ViewManagerSynchronizer::OnNodeDeleted(uint32_t node_id,
uint32_t server_change_id) {
next_server_change_id_ = server_change_id + 1;
- ViewTreeNode* node = view_manager_->GetNodeById(node_id);
+ ViewTreeNode* node = view_manager()->GetNodeById(node_id);
if (node)
ViewTreeNodePrivate(node).LocalDestroy();
}
@@ -581,24 +613,24 @@ void ViewManagerSynchronizer::OnNodeDeleted(uint32_t node_id,
void ViewManagerSynchronizer::OnNodeViewReplaced(uint32_t node_id,
uint32_t new_view_id,
uint32_t old_view_id) {
- ViewTreeNode* node = view_manager_->GetNodeById(node_id);
- View* new_view = view_manager_->GetViewById(new_view_id);
+ ViewTreeNode* node = view_manager()->GetNodeById(node_id);
+ View* new_view = view_manager()->GetViewById(new_view_id);
if (!new_view && new_view_id != 0) {
// This client wasn't aware of this View until now.
new_view = ViewPrivate::LocalCreate();
ViewPrivate private_view(new_view);
- private_view.set_view_manager(view_manager_);
+ private_view.set_view_manager(view_manager());
private_view.set_id(new_view_id);
private_view.set_node(node);
- ViewManagerPrivate(view_manager_).AddView(new_view->id(), new_view);
+ ViewManagerPrivate(view_manager()).AddView(new_view->id(), new_view);
}
- View* old_view = view_manager_->GetViewById(old_view_id);
+ View* old_view = view_manager()->GetViewById(old_view_id);
DCHECK_EQ(old_view, node->active_view());
ViewTreeNodePrivate(node).LocalSetActiveView(new_view);
}
void ViewManagerSynchronizer::OnViewDeleted(uint32_t view_id) {
- View* view = view_manager_->GetViewById(view_id);
+ View* view = view_manager()->GetViewById(view_id);
if (view)
ViewPrivate(view).LocalDestroy();
}

Powered by Google App Engine
This is Rietveld 408576698