Index: components/view_manager/server_view.cc |
diff --git a/components/view_manager/server_view.cc b/components/view_manager/server_view.cc |
deleted file mode 100644 |
index 8c4f69d80713464a82dc1429807cc3f1feab6dcb..0000000000000000000000000000000000000000 |
--- a/components/view_manager/server_view.cc |
+++ /dev/null |
@@ -1,318 +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/server_view.h" |
- |
-#include <inttypes.h> |
- |
-#include "base/strings/stringprintf.h" |
-#include "components/view_manager/server_view_delegate.h" |
-#include "components/view_manager/server_view_observer.h" |
-#include "components/view_manager/surfaces/surfaces_state.h" |
-#include "mojo/converters/geometry/geometry_type_converters.h" |
-#include "mojo/converters/surfaces/surfaces_type_converters.h" |
- |
-namespace view_manager { |
- |
-namespace { |
- |
-void CallCallback(const mojo::Closure& callback, cc::SurfaceDrawStatus status) { |
- callback.Run(); |
-} |
- |
-} // namespace |
- |
-ServerView::ServerView(ServerViewDelegate* delegate, const ViewId& id) |
- : delegate_(delegate), |
- id_(id), |
- parent_(nullptr), |
- visible_(false), |
- opacity_(1), |
- pending_access_policy_(mojo::ViewTree::ACCESS_POLICY_DEFAULT), |
- // Don't notify newly added observers during notification. This causes |
- // problems for code that adds an observer as part of an observer |
- // notification (such as ServerViewDrawTracker). |
- observers_(base::ObserverList<ServerViewObserver>::NOTIFY_EXISTING_ONLY), |
- binding_(this) { |
- DCHECK(delegate); // Must provide a delegate. |
-} |
- |
-ServerView::~ServerView() { |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnWillDestroyView(this)); |
- |
- while (!children_.empty()) |
- children_.front()->parent()->Remove(children_.front()); |
- |
- if (parent_) |
- parent_->Remove(this); |
- |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnViewDestroyed(this)); |
- |
- // SurfaceFactory's destructor will attempt to return resources which will |
- // call back into here and access |client_| so we should destroy |
- // |surface_factory_| early on. |
- surface_factory_.reset(); |
-} |
- |
-void ServerView::AddObserver(ServerViewObserver* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void ServerView::RemoveObserver(ServerViewObserver* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-void ServerView::Bind(mojo::InterfaceRequest<Surface> request, |
- mojo::SurfaceClientPtr client) { |
- if (binding_.is_bound()) { |
- if (surface_factory_) { |
- // Destroy frame surfaces submitted by the old client before replacing |
- // client_, so those surfaces will be returned to the old client. |
- surface_factory_->DestroyAll(); |
- SetSurfaceId(cc::SurfaceId()); |
- } |
- binding_.Close(); |
- client_ = nullptr; |
- } |
- binding_.Bind(request.Pass()); |
- client_ = client.Pass(); |
-} |
- |
-void ServerView::Add(ServerView* child) { |
- // We assume validation checks happened already. |
- DCHECK(child); |
- DCHECK(child != this); |
- DCHECK(!child->Contains(this)); |
- if (child->parent() == this) { |
- if (children_.size() == 1) |
- return; // Already in the right position. |
- Reorder(child, children_.back(), mojo::ORDER_DIRECTION_ABOVE); |
- return; |
- } |
- |
- ServerView* old_parent = child->parent(); |
- FOR_EACH_OBSERVER(ServerViewObserver, child->observers_, |
- OnWillChangeViewHierarchy(child, this, old_parent)); |
- |
- if (child->parent()) |
- child->parent()->RemoveImpl(child); |
- |
- child->parent_ = this; |
- children_.push_back(child); |
- FOR_EACH_OBSERVER(ServerViewObserver, child->observers_, |
- OnViewHierarchyChanged(child, this, old_parent)); |
-} |
- |
-void ServerView::Remove(ServerView* child) { |
- // We assume validation checks happened else where. |
- DCHECK(child); |
- DCHECK(child != this); |
- DCHECK(child->parent() == this); |
- |
- FOR_EACH_OBSERVER(ServerViewObserver, child->observers_, |
- OnWillChangeViewHierarchy(child, nullptr, this)); |
- RemoveImpl(child); |
- FOR_EACH_OBSERVER(ServerViewObserver, child->observers_, |
- OnViewHierarchyChanged(child, nullptr, this)); |
-} |
- |
-void ServerView::Reorder(ServerView* child, |
- ServerView* relative, |
- mojo::OrderDirection direction) { |
- // We assume validation checks happened else where. |
- DCHECK(child); |
- DCHECK(child->parent() == this); |
- DCHECK_GT(children_.size(), 1u); |
- children_.erase(std::find(children_.begin(), children_.end(), child)); |
- Views::iterator i = std::find(children_.begin(), children_.end(), relative); |
- if (direction == mojo::ORDER_DIRECTION_ABOVE) { |
- DCHECK(i != children_.end()); |
- children_.insert(++i, child); |
- } else if (direction == mojo::ORDER_DIRECTION_BELOW) { |
- DCHECK(i != children_.end()); |
- children_.insert(i, child); |
- } |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnViewReordered(this, relative, direction)); |
-} |
- |
-void ServerView::SetBounds(const gfx::Rect& bounds) { |
- if (bounds_ == bounds) |
- return; |
- |
- const gfx::Rect old_bounds = bounds_; |
- bounds_ = bounds; |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnViewBoundsChanged(this, old_bounds, bounds)); |
-} |
- |
-const ServerView* ServerView::GetRoot() const { |
- return delegate_->GetRootView(this); |
-} |
- |
-std::vector<const ServerView*> ServerView::GetChildren() const { |
- std::vector<const ServerView*> children; |
- children.reserve(children_.size()); |
- for (size_t i = 0; i < children_.size(); ++i) |
- children.push_back(children_[i]); |
- return children; |
-} |
- |
-std::vector<ServerView*> ServerView::GetChildren() { |
- // TODO(sky): rename to children() and fix return type. |
- return children_; |
-} |
- |
-bool ServerView::Contains(const ServerView* view) const { |
- for (const ServerView* parent = view; parent; parent = parent->parent_) { |
- if (parent == this) |
- return true; |
- } |
- return false; |
-} |
- |
-void ServerView::SetVisible(bool value) { |
- if (visible_ == value) |
- return; |
- |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnWillChangeViewVisibility(this)); |
- visible_ = value; |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnViewVisibilityChanged(this)); |
-} |
- |
-void ServerView::SetOpacity(float value) { |
- if (value == opacity_) |
- return; |
- opacity_ = value; |
- delegate_->OnScheduleViewPaint(this); |
-} |
- |
-void ServerView::SetTransform(const gfx::Transform& transform) { |
- if (transform_ == transform) |
- return; |
- |
- transform_ = transform; |
- delegate_->OnScheduleViewPaint(this); |
-} |
- |
-void ServerView::SetProperty(const std::string& name, |
- const std::vector<uint8_t>* value) { |
- auto it = properties_.find(name); |
- if (it != properties_.end()) { |
- if (value && it->second == *value) |
- return; |
- } else if (!value) { |
- // This property isn't set in |properties_| and |value| is NULL, so there's |
- // no change. |
- return; |
- } |
- |
- if (value) { |
- properties_[name] = *value; |
- } else if (it != properties_.end()) { |
- properties_.erase(it); |
- } |
- |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnViewSharedPropertyChanged(this, name, value)); |
-} |
- |
-void ServerView::SetTextInputState(const ui::TextInputState& state) { |
- const bool changed = !(text_input_state_ == state); |
- if (changed) { |
- text_input_state_ = state; |
- // keyboard even if the state is not changed. So we have to notify |
- // |observers_|. |
- FOR_EACH_OBSERVER(ServerViewObserver, observers_, |
- OnViewTextInputStateChanged(this, state)); |
- } |
-} |
- |
-bool ServerView::IsDrawn() const { |
- const ServerView* root = delegate_->GetRootView(this); |
- if (!root || !root->visible()) |
- return false; |
- const ServerView* view = this; |
- while (view && view != root && view->visible()) |
- view = view->parent(); |
- return root == view; |
-} |
- |
-void ServerView::SetSurfaceId(cc::SurfaceId surface_id) { |
- surface_id_ = surface_id; |
- delegate_->OnScheduleViewPaint(this); |
-} |
- |
-void ServerView::SubmitCompositorFrame( |
- mojo::CompositorFramePtr frame, |
- const SubmitCompositorFrameCallback& callback) { |
- gfx::Size frame_size = frame->passes[0]->output_rect.To<gfx::Rect>().size(); |
- // Create Surfaces state on demand. |
- if (!surface_factory_) { |
- surface_factory_.reset( |
- new cc::SurfaceFactory(delegate_->GetSurfacesState()->manager(), this)); |
- } |
- if (!surface_id_allocator_) { |
- surface_id_allocator_.reset( |
- new cc::SurfaceIdAllocator( |
- delegate_->GetSurfacesState()->next_id_namespace())); |
- } |
- if (surface_id().is_null()) { |
- // Create a Surface ID for the first time for this view. |
- cc::SurfaceId surface_id(surface_id_allocator_->GenerateId()); |
- surface_factory_->Create(surface_id); |
- SetSurfaceId(surface_id); |
- } else { |
- // If the size of the CompostiorFrame has changed then destroy the existing |
- // Surface and create a new one of the appropriate size. |
- if (frame_size != last_submitted_frame_size()) { |
- surface_factory_->Destroy(surface_id()); |
- cc::SurfaceId surface_id(surface_id_allocator_->GenerateId()); |
- surface_factory_->Create(surface_id); |
- SetSurfaceId(surface_id); |
- } |
- } |
- surface_factory_->SubmitCompositorFrame( |
- surface_id(), |
- delegate_->UpdateViewTreeFromCompositorFrame(frame), |
- base::Bind(&CallCallback, callback)); |
- delegate_->GetSurfacesState()->scheduler()->SetNeedsDraw(); |
- last_submitted_frame_size_ = frame_size; |
-} |
- |
-#if !defined(NDEBUG) |
-std::string ServerView::GetDebugWindowHierarchy() const { |
- std::string result; |
- BuildDebugInfo(std::string(), &result); |
- return result; |
-} |
- |
-void ServerView::BuildDebugInfo(const std::string& depth, |
- std::string* result) const { |
- *result += base::StringPrintf( |
- "%sid=%d,%d visible=%s bounds=%d,%d %dx%d surface_id=%" PRIu64 "\n", |
- depth.c_str(), static_cast<int>(id_.connection_id), |
- static_cast<int>(id_.view_id), visible_ ? "true" : "false", bounds_.x(), |
- bounds_.y(), bounds_.width(), bounds_.height(), surface_id_.id); |
- for (const ServerView* child : children_) |
- child->BuildDebugInfo(depth + " ", result); |
-} |
-#endif |
- |
-void ServerView::ReturnResources( |
- const cc::ReturnedResourceArray& resources) { |
- if (!client_) |
- return; |
- client_->ReturnResources( |
- mojo::Array<mojo::ReturnedResourcePtr>::From(resources)); |
-} |
- |
-void ServerView::RemoveImpl(ServerView* view) { |
- view->parent_ = NULL; |
- children_.erase(std::find(children_.begin(), children_.end(), view)); |
-} |
- |
-} // namespace view_manager |