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

Unified Diff: mojo/services/view_manager/view_manager_service_impl.cc

Issue 720883003: Adds a CloneAndAnimate function to WindowManagerInternalClient (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Add GetView(ClonedViewId) coverage Created 6 years, 1 month 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/view_manager/view_manager_service_impl.cc
diff --git a/mojo/services/view_manager/view_manager_service_impl.cc b/mojo/services/view_manager/view_manager_service_impl.cc
index e205feef77ed2098c32d1067b0224c1ca96c63e9..402b3b46338f6d80972f7c065098d3412753ff42 100644
--- a/mojo/services/view_manager/view_manager_service_impl.cc
+++ b/mojo/services/view_manager/view_manager_service_impl.cc
@@ -9,6 +9,7 @@
#include "mojo/converters/geometry/geometry_type_converters.h"
#include "mojo/converters/input_events/input_events_type_converters.h"
#include "mojo/converters/surfaces/surfaces_type_converters.h"
+#include "mojo/services/public/interfaces/window_manager/window_manager_internal.mojom.h"
#include "mojo/services/view_manager/connection_manager.h"
#include "mojo/services/view_manager/default_access_policy.h"
#include "mojo/services/view_manager/server_view.h"
@@ -65,16 +66,6 @@ const ServerView* ViewManagerServiceImpl::GetView(const ViewId& id) const {
return connection_manager_->GetView(id);
}
-ErrorCode ViewManagerServiceImpl::CreateView(const ViewId& view_id) {
- if (view_id.connection_id != id_)
- return ERROR_CODE_ILLEGAL_ARGUMENT;
- if (view_map_.find(view_id.view_id) != view_map_.end())
- return ERROR_CODE_VALUE_IN_USE;
- view_map_[view_id.view_id] = new ServerView(connection_manager_, view_id);
- known_views_.insert(ViewIdToTransportId(view_id));
- return ERROR_CODE_NONE;
-}
-
bool ViewManagerServiceImpl::IsRoot(const ViewId& id) const {
return root_.get() && *root_ == id;
}
@@ -92,6 +83,73 @@ void ViewManagerServiceImpl::OnWillDestroyViewManagerServiceImpl(
root_.reset();
}
+ErrorCode ViewManagerServiceImpl::CreateView(const ViewId& view_id) {
+ if (view_id.connection_id != id_)
+ return ERROR_CODE_ILLEGAL_ARGUMENT;
+ if (view_map_.find(view_id.view_id) != view_map_.end())
+ return ERROR_CODE_VALUE_IN_USE;
+ view_map_[view_id.view_id] = new ServerView(connection_manager_, view_id);
+ known_views_.insert(ViewIdToTransportId(view_id));
+ return ERROR_CODE_NONE;
+}
+
+bool ViewManagerServiceImpl::AddView(const ViewId& parent_id,
+ const ViewId& child_id) {
+ ServerView* parent = GetView(parent_id);
+ ServerView* child = GetView(child_id);
+ if (parent && child && child->parent() != parent &&
+ !child->Contains(parent) && access_policy_->CanAddView(parent, child)) {
+ ConnectionManager::ScopedChange change(this, connection_manager_, false);
+ parent->Add(child);
+ return true;
+ }
+ return false;
+}
+
+std::vector<const ServerView*> ViewManagerServiceImpl::GetViewTree(
+ const ViewId& view_id) const {
+ const ServerView* view = GetView(view_id);
+ std::vector<const ServerView*> views;
+ if (view)
+ GetViewTreeImpl(view, &views);
+ return views;
+}
+
+bool ViewManagerServiceImpl::SetViewVisibility(const ViewId& view_id,
+ bool visible) {
+ ServerView* view = GetView(view_id);
+ if (!view || view->visible() == visible ||
+ !access_policy_->CanChangeViewVisibility(view)) {
+ return false;
+ }
+ ConnectionManager::ScopedChange change(this, connection_manager_, false);
+ view->SetVisible(visible);
+ return true;
+}
+
+bool ViewManagerServiceImpl::Embed(
+ const std::string& url,
+ const ViewId& view_id,
+ InterfaceRequest<ServiceProvider> service_provider) {
+ const ServerView* view = GetView(view_id);
+ if (!view || !access_policy_->CanEmbed(view))
+ return false;
+
+ // Only allow a node to be the root for one connection.
+ ViewManagerServiceImpl* existing_owner =
+ connection_manager_->GetConnectionWithRoot(view_id);
+
+ ConnectionManager::ScopedChange change(this, connection_manager_, true);
+ RemoveChildrenAsPartOfEmbed(view_id);
+ if (existing_owner) {
+ // Never message the originating connection.
+ connection_manager_->OnConnectionMessagedClient(id_);
+ existing_owner->RemoveRoot();
+ }
+ connection_manager_->EmbedAtView(id_, url, view_id, service_provider.Pass());
+ return true;
+}
+
void ViewManagerServiceImpl::ProcessViewBoundsChanged(
const ServerView* view,
const gfx::Rect& old_bounds,
@@ -188,6 +246,7 @@ void ViewManagerServiceImpl::ProcessViewDeleted(const ViewId& view,
view_map_.erase(view.view_id);
const bool in_known = known_views_.erase(ViewIdToTransportId(view)) > 0;
+
if (IsRoot(view))
root_.reset();
@@ -415,16 +474,8 @@ void ViewManagerServiceImpl::AddView(
Id parent_id,
Id child_id,
const Callback<void(bool)>& callback) {
- bool success = false;
- ServerView* parent = GetView(ViewIdFromTransportId(parent_id));
- ServerView* child = GetView(ViewIdFromTransportId(child_id));
- if (parent && child && child->parent() != parent &&
- !child->Contains(parent) && access_policy_->CanAddView(parent, child)) {
- success = true;
- ConnectionManager::ScopedChange change(this, connection_manager_, false);
- parent->Add(child);
- }
- callback.Run(success);
+ callback.Run(AddView(ViewIdFromTransportId(parent_id),
+ ViewIdFromTransportId(child_id)));
}
void ViewManagerServiceImpl::RemoveViewFromParent(
@@ -459,12 +510,8 @@ void ViewManagerServiceImpl::ReorderView(Id view_id,
void ViewManagerServiceImpl::GetViewTree(
Id view_id,
const Callback<void(Array<ViewDataPtr>)>& callback) {
- ServerView* view = GetView(ViewIdFromTransportId(view_id));
- std::vector<const ServerView*> views;
- if (view) {
- GetViewTreeImpl(view, &views);
- // TODO(sky): this should map in views that weren't none.
- }
+ std::vector<const ServerView*> views(
+ GetViewTree(ViewIdFromTransportId(view_id)));
callback.Run(ViewsToViewDatas(views));
}
@@ -499,17 +546,8 @@ void ViewManagerServiceImpl::SetViewVisibility(
Id transport_view_id,
bool visible,
const Callback<void(bool)>& callback) {
- ServerView* view = GetView(ViewIdFromTransportId(transport_view_id));
- if (!view || view->visible() == visible ||
- !access_policy_->CanChangeViewVisibility(view)) {
- callback.Run(false);
- return;
- }
- {
- ConnectionManager::ScopedChange change(this, connection_manager_, false);
- view->SetVisible(visible);
- }
- callback.Run(true);
+ callback.Run(
+ SetViewVisibility(ViewIdFromTransportId(transport_view_id), visible));
}
void ViewManagerServiceImpl::SetViewProperty(
@@ -537,27 +575,9 @@ void ViewManagerServiceImpl::Embed(
Id transport_view_id,
InterfaceRequest<ServiceProvider> service_provider,
const Callback<void(bool)>& callback) {
- const ServerView* view = GetView(ViewIdFromTransportId(transport_view_id));
- if (!view || !access_policy_->CanEmbed(view)) {
- callback.Run(false);
- return;
- }
-
- // Only allow a node to be the root for one connection.
- const ViewId view_id(ViewIdFromTransportId(transport_view_id));
- ViewManagerServiceImpl* existing_owner =
- connection_manager_->GetConnectionWithRoot(view_id);
-
- ConnectionManager::ScopedChange change(this, connection_manager_, true);
- RemoveChildrenAsPartOfEmbed(view_id);
- if (existing_owner) {
- // Never message the originating connection.
- connection_manager_->OnConnectionMessagedClient(id_);
- existing_owner->RemoveRoot();
- }
- connection_manager_->EmbedAtView(id_, url, transport_view_id,
- service_provider.Pass());
- callback.Run(true);
+ callback.Run(Embed(url.To<std::string>(),
+ ViewIdFromTransportId(transport_view_id),
+ service_provider.Pass()));
}
bool ViewManagerServiceImpl::IsRootForAccessPolicy(const ViewId& id) const {
« no previous file with comments | « mojo/services/view_manager/view_manager_service_impl.h ('k') | mojo/services/view_manager/view_manager_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698