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

Unified Diff: components/view_manager/connection_manager.cc

Issue 1344573002: Mandoline: Rename components/view_manager to components/mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 3 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 | « components/view_manager/connection_manager.h ('k') | components/view_manager/connection_manager_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/view_manager/connection_manager.cc
diff --git a/components/view_manager/connection_manager.cc b/components/view_manager/connection_manager.cc
deleted file mode 100644
index c3ab945ad0da56bd333708def132eb24553e4f20..0000000000000000000000000000000000000000
--- a/components/view_manager/connection_manager.cc
+++ /dev/null
@@ -1,466 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/view_manager/connection_manager.h"
-
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "cc/output/compositor_frame.h"
-#include "cc/quads/shared_quad_state.h"
-#include "components/view_manager/client_connection.h"
-#include "components/view_manager/connection_manager_delegate.h"
-#include "components/view_manager/server_view.h"
-#include "components/view_manager/view_coordinate_conversions.h"
-#include "components/view_manager/view_tree_host_connection.h"
-#include "components/view_manager/view_tree_impl.h"
-#include "mojo/application/public/cpp/application_connection.h"
-#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 "ui/gfx/geometry/size_conversions.h"
-
-using mojo::ConnectionSpecificId;
-
-namespace view_manager {
-
-ConnectionManager::ScopedChange::ScopedChange(
- ViewTreeImpl* connection,
- ConnectionManager* connection_manager,
- bool is_delete_view)
- : connection_manager_(connection_manager),
- connection_id_(connection->id()),
- is_delete_view_(is_delete_view) {
- connection_manager_->PrepareForChange(this);
-}
-
-ConnectionManager::ScopedChange::~ScopedChange() {
- connection_manager_->FinishChange();
-}
-
-ConnectionManager::ConnectionManager(
- ConnectionManagerDelegate* delegate,
- const scoped_refptr<surfaces::SurfacesState>& surfaces_state)
- : delegate_(delegate),
- surfaces_state_(surfaces_state),
- next_connection_id_(1),
- next_host_id_(0),
- current_change_(nullptr),
- in_destructor_(false) {
-}
-
-ConnectionManager::~ConnectionManager() {
- in_destructor_ = true;
-
- // Copy the HostConnectionMap because it will be mutated as the connections
- // are closed.
- HostConnectionMap host_connection_map(host_connection_map_);
- for (auto& pair : host_connection_map)
- pair.second->CloseConnection();
-
- STLDeleteValues(&connection_map_);
- // All the connections should have been destroyed.
- DCHECK(host_connection_map_.empty());
- DCHECK(connection_map_.empty());
-}
-
-void ConnectionManager::AddHost(
- ViewTreeHostConnection* host_connection) {
- DCHECK_EQ(0u, host_connection_map_.count(host_connection->view_tree_host()));
- host_connection_map_[host_connection->view_tree_host()] = host_connection;
-}
-
-ServerView* ConnectionManager::CreateServerView(const ViewId& id) {
- ServerView* view = new ServerView(this, id);
- view->AddObserver(this);
- return view;
-}
-
-ConnectionSpecificId ConnectionManager::GetAndAdvanceNextConnectionId() {
- const ConnectionSpecificId id = next_connection_id_++;
- DCHECK_LT(id, next_connection_id_);
- return id;
-}
-
-uint16_t ConnectionManager::GetAndAdvanceNextHostId() {
- const uint16_t id = next_host_id_++;
- DCHECK_LT(id, next_host_id_);
- return id;
-}
-
-void ConnectionManager::OnConnectionError(ClientConnection* connection) {
- // This will be null if the root has been destroyed.
- const ViewId* view_id = connection->service()->root();
- ServerView* view =
- view_id ? GetView(*connection->service()->root()) : nullptr;
- // If the ViewTree root is a viewport root, then we'll wait until
- // the root connection goes away to cleanup.
- if (view && (GetRootView(view) == view))
- return;
-
- scoped_ptr<ClientConnection> connection_owner(connection);
-
- connection_map_.erase(connection->service()->id());
-
- // Notify remaining connections so that they can cleanup.
- for (auto& pair : connection_map_) {
- pair.second->service()->OnWillDestroyViewTreeImpl(
- connection->service());
- }
-}
-
-void ConnectionManager::OnHostConnectionClosed(
- ViewTreeHostConnection* connection) {
- auto it = host_connection_map_.find(connection->view_tree_host());
- DCHECK(it != host_connection_map_.end());
-
- // Get the ClientConnection by ViewTreeImpl ID.
- ConnectionMap::iterator service_connection_it =
- connection_map_.find(it->first->GetViewTree()->id());
- DCHECK(service_connection_it != connection_map_.end());
-
- // Tear down the associated ViewTree connection.
- // TODO(fsamuel): I don't think this is quite right, we should tear down all
- // connections within the root's viewport. We should probably employ an
- // observer pattern to do this. Each ViewTreeImpl should track its
- // parent's lifetime.
- host_connection_map_.erase(it);
- OnConnectionError(service_connection_it->second);
-
- // If we have no more roots left, let the app know so it can terminate.
- if (!host_connection_map_.size())
- delegate_->OnNoMoreRootConnections();
-}
-
-void ConnectionManager::EmbedAtView(mojo::ConnectionSpecificId creator_id,
- const ViewId& view_id,
- mojo::URLRequestPtr request) {
- mojo::ViewTreePtr service_ptr;
- ClientConnection* client_connection =
- delegate_->CreateClientConnectionForEmbedAtView(
- this, GetProxy(&service_ptr), creator_id, request.Pass(), view_id);
- AddConnection(client_connection);
- client_connection->service()->Init(client_connection->client(),
- service_ptr.Pass());
- OnConnectionMessagedClient(client_connection->service()->id());
-}
-
-ViewTreeImpl* ConnectionManager::EmbedAtView(
- mojo::ConnectionSpecificId creator_id,
- const ViewId& view_id,
- mojo::ViewTreeClientPtr client) {
- mojo::ViewTreePtr service_ptr;
- ClientConnection* client_connection =
- delegate_->CreateClientConnectionForEmbedAtView(
- this, GetProxy(&service_ptr), creator_id, view_id, client.Pass());
- AddConnection(client_connection);
- client_connection->service()->Init(client_connection->client(),
- service_ptr.Pass());
- OnConnectionMessagedClient(client_connection->service()->id());
-
- return client_connection->service();
-}
-
-ViewTreeImpl* ConnectionManager::GetConnection(
- ConnectionSpecificId connection_id) {
- ConnectionMap::iterator i = connection_map_.find(connection_id);
- return i == connection_map_.end() ? nullptr : i->second->service();
-}
-
-ServerView* ConnectionManager::GetView(const ViewId& id) {
- for (auto& pair : host_connection_map_) {
- if (pair.first->root_view()->id() == id)
- return pair.first->root_view();
- }
- ViewTreeImpl* service = GetConnection(id.connection_id);
- return service ? service->GetView(id) : nullptr;
-}
-
-bool ConnectionManager::IsViewAttachedToRoot(const ServerView* view) const {
- for (auto& pair : host_connection_map_) {
- if (pair.first->IsViewAttachedToRoot(view))
- return true;
- }
- return false;
-}
-
-void ConnectionManager::SchedulePaint(const ServerView* view,
- const gfx::Rect& bounds) {
- for (auto& pair : host_connection_map_) {
- if (pair.first->SchedulePaintIfInViewport(view, bounds))
- return;
- }
-}
-
-void ConnectionManager::OnConnectionMessagedClient(ConnectionSpecificId id) {
- if (current_change_)
- current_change_->MarkConnectionAsMessaged(id);
-}
-
-bool ConnectionManager::DidConnectionMessageClient(
- ConnectionSpecificId id) const {
- return current_change_ && current_change_->DidMessageConnection(id);
-}
-
-mojo::ViewportMetricsPtr ConnectionManager::GetViewportMetricsForView(
- const ServerView* view) {
- ViewTreeHostImpl* host = GetViewTreeHostByView(view);
- if (host)
- return host->GetViewportMetrics().Clone();
-
- if (!host_connection_map_.empty())
- return host_connection_map_.begin()->first->GetViewportMetrics().Clone();
-
- mojo::ViewportMetricsPtr metrics = mojo::ViewportMetrics::New();
- metrics->size_in_pixels = mojo::Size::New();
- return metrics.Pass();
-}
-
-const ViewTreeImpl* ConnectionManager::GetConnectionWithRoot(
- const ViewId& id) const {
- for (auto& pair : connection_map_) {
- if (pair.second->service()->IsRoot(id))
- return pair.second->service();
- }
- return nullptr;
-}
-
-ViewTreeHostImpl* ConnectionManager::GetViewTreeHostByView(
- const ServerView* view) {
- return const_cast<ViewTreeHostImpl*>(
- static_cast<const ConnectionManager*>(this)->GetViewTreeHostByView(view));
-}
-
-const ViewTreeHostImpl* ConnectionManager::GetViewTreeHostByView(
- const ServerView* view) const {
- while (view && view->parent())
- view = view->parent();
- for (auto& pair : host_connection_map_) {
- if (view == pair.first->root_view())
- return pair.first;
- }
- return nullptr;
-}
-
-ViewTreeImpl* ConnectionManager::GetEmbedRoot(ViewTreeImpl* service) {
- while (service) {
- const ViewId* root_id = service->root();
- if (!root_id || root_id->connection_id == service->id())
- return nullptr;
-
- ViewTreeImpl* parent_service = GetConnection(root_id->connection_id);
- service = parent_service;
- if (service && service->is_embed_root())
- return service;
- }
- return nullptr;
-}
-
-void ConnectionManager::ProcessViewBoundsChanged(const ServerView* view,
- const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewBoundsChanged(
- view, old_bounds, new_bounds, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::ProcessWillChangeViewHierarchy(
- const ServerView* view,
- const ServerView* new_parent,
- const ServerView* old_parent) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessWillChangeViewHierarchy(
- view, new_parent, old_parent, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::ProcessViewHierarchyChanged(
- const ServerView* view,
- const ServerView* new_parent,
- const ServerView* old_parent) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewHierarchyChanged(
- view, new_parent, old_parent, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::ProcessViewReorder(
- const ServerView* view,
- const ServerView* relative_view,
- const mojo::OrderDirection direction) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewReorder(view, relative_view, direction,
- IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::ProcessViewDeleted(const ViewId& view) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewDeleted(view,
- IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::ProcessViewportMetricsChanged(
- const mojo::ViewportMetrics& old_metrics,
- const mojo::ViewportMetrics& new_metrics) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewportMetricsChanged(
- old_metrics, new_metrics, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::PrepareForChange(ScopedChange* change) {
- // Should only ever have one change in flight.
- CHECK(!current_change_);
- current_change_ = change;
-}
-
-void ConnectionManager::FinishChange() {
- // PrepareForChange/FinishChange should be balanced.
- CHECK(current_change_);
- current_change_ = NULL;
-}
-
-void ConnectionManager::AddConnection(ClientConnection* connection) {
- DCHECK_EQ(0u, connection_map_.count(connection->service()->id()));
- connection_map_[connection->service()->id()] = connection;
-}
-
-scoped_ptr<cc::CompositorFrame>
-ConnectionManager::UpdateViewTreeFromCompositorFrame(
- const mojo::CompositorFramePtr& input) {
- return ConvertToCompositorFrame(input, this);
-}
-
-surfaces::SurfacesState* ConnectionManager::GetSurfacesState() {
- return surfaces_state_.get();
-}
-
-void ConnectionManager::OnScheduleViewPaint(const ServerView* view) {
- if (!in_destructor_)
- SchedulePaint(view, gfx::Rect(view->bounds().size()));
-}
-
-const ServerView* ConnectionManager::GetRootView(const ServerView* view) const {
- const ViewTreeHostImpl* host = GetViewTreeHostByView(view);
- return host ? host->root_view() : nullptr;
-}
-
-void ConnectionManager::OnViewDestroyed(ServerView* view) {
- if (!in_destructor_)
- ProcessViewDeleted(view->id());
-}
-
-void ConnectionManager::OnWillChangeViewHierarchy(ServerView* view,
- ServerView* new_parent,
- ServerView* old_parent) {
- if (in_destructor_)
- return;
-
- ProcessWillChangeViewHierarchy(view, new_parent, old_parent);
-}
-
-void ConnectionManager::OnViewHierarchyChanged(ServerView* view,
- ServerView* new_parent,
- ServerView* old_parent) {
- if (in_destructor_)
- return;
-
- ProcessViewHierarchyChanged(view, new_parent, old_parent);
-
- // TODO(beng): optimize.
- if (old_parent)
- SchedulePaint(old_parent, gfx::Rect(old_parent->bounds().size()));
- if (new_parent)
- SchedulePaint(new_parent, gfx::Rect(new_parent->bounds().size()));
-}
-
-void ConnectionManager::OnViewBoundsChanged(ServerView* view,
- const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds) {
- if (in_destructor_)
- return;
-
- ProcessViewBoundsChanged(view, old_bounds, new_bounds);
- if (!view->parent())
- return;
-
- // TODO(sky): optimize this.
- SchedulePaint(view->parent(), old_bounds);
- SchedulePaint(view->parent(), new_bounds);
-}
-
-void ConnectionManager::OnViewReordered(ServerView* view,
- ServerView* relative,
- mojo::OrderDirection direction) {
- if (!in_destructor_)
- SchedulePaint(view, gfx::Rect(view->bounds().size()));
-}
-
-void ConnectionManager::OnWillChangeViewVisibility(ServerView* view) {
- if (in_destructor_)
- return;
-
- // Need to repaint if the view was drawn (which means it's in the process of
- // hiding) or the view is transitioning to drawn.
- if (view->parent() && (view->IsDrawn() ||
- (!view->visible() && view->parent()->IsDrawn()))) {
- SchedulePaint(view->parent(), view->bounds());
- }
-
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessWillChangeViewVisibility(
- view, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::OnViewSharedPropertyChanged(
- ServerView* view,
- const std::string& name,
- const std::vector<uint8_t>* new_data) {
- for (auto& pair : connection_map_) {
- pair.second->service()->ProcessViewPropertyChanged(
- view, name, new_data, IsChangeSource(pair.first));
- }
-}
-
-void ConnectionManager::OnViewTextInputStateChanged(
- ServerView* view,
- const ui::TextInputState& state) {
- ViewTreeHostImpl* host = GetViewTreeHostByView(view);
- host->UpdateTextInputState(view, state);
-}
-
-bool ConnectionManager::ConvertSurfaceDrawQuad(
- const mojo::QuadPtr& input,
- const mojo::CompositorFrameMetadataPtr& metadata,
- cc::SharedQuadState* sqs,
- cc::RenderPass* render_pass) {
- unsigned int id = static_cast<unsigned int>(
- input->surface_quad_state->surface.To<cc::SurfaceId>().id);
- // TODO(fsamuel): Security checks:
- // 1. We need to make sure the embedder can only position views it's allowed
- // to access.
- // 2. We need to make sure that the embedder cannot place views in areas
- // outside of its own bounds.
- ServerView* view = GetView(ViewIdFromTransportId(id));
- // If a CompositorFrame message arrives late, say during a navigation, then
- // it may contain view IDs that no longer exist.
- if (!view)
- return false;
- gfx::Rect bounds(input->visible_rect.To<gfx::Rect>());
- gfx::Point p;
- sqs->quad_to_target_transform.TransformPoint(&p);
- bounds.set_origin(p);
- // TODO(fsamuel): This seems like a crude way to set the size that probably
- // doesn't work correctly in the general case. We need to get transforms
- // working correctly in the general case.
- bounds.set_size(gfx::ToRoundedSize(
- gfx::ScaleSize(bounds.size(), metadata->device_scale_factor)));
- view->SetBounds(bounds);
- return true;
-}
-
-} // namespace view_manager
« no previous file with comments | « components/view_manager/connection_manager.h ('k') | components/view_manager/connection_manager_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698