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

Unified Diff: services/window_manager/window_manager_root.cc

Issue 1531403003: Delete the ViewManager and WindowManager services. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-3
Patch Set: rebase Created 4 years, 11 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: services/window_manager/window_manager_root.cc
diff --git a/services/window_manager/window_manager_root.cc b/services/window_manager/window_manager_root.cc
deleted file mode 100644
index 4c15e43b28225767cb9f7f87f11f695560fe02d3..0000000000000000000000000000000000000000
--- a/services/window_manager/window_manager_root.cc
+++ /dev/null
@@ -1,413 +0,0 @@
-// Copyright 2015 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 "services/window_manager/window_manager_root.h"
-
-#include <algorithm>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "mojo/converters/geometry/geometry_type_converters.h"
-#include "mojo/converters/input_events/input_events_type_converters.h"
-#include "mojo/public/cpp/application/application_connection.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/interfaces/application/shell.mojom.h"
-#include "mojo/services/view_manager/cpp/view.h"
-#include "mojo/services/view_manager/cpp/view_manager.h"
-#include "services/window_manager/capture_controller.h"
-#include "services/window_manager/focus_controller.h"
-#include "services/window_manager/focus_rules.h"
-#include "services/window_manager/hit_test.h"
-#include "services/window_manager/view_event_dispatcher.h"
-#include "services/window_manager/view_target.h"
-#include "services/window_manager/view_targeter.h"
-#include "services/window_manager/window_manager_delegate.h"
-
-using mojo::ApplicationConnection;
-using mojo::Id;
-using mojo::ServiceProvider;
-using mojo::View;
-using mojo::WindowManager;
-
-namespace window_manager {
-
-namespace {
-
-Id GetIdForView(View* view) {
- return view ? view->id() : 0;
-}
-
-} // namespace
-
-// Used for calls to Embed() that occur before we've connected to the
-// ViewManager.
-struct WindowManagerRoot::PendingEmbed {
- mojo::String url;
- mojo::InterfaceRequest<ServiceProvider> services;
- mojo::ServiceProviderPtr exposed_services;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, public:
-
-WindowManagerRoot::WindowManagerRoot(
- mojo::ApplicationImpl* application_impl,
- mojo::ApplicationConnection* connection,
- WindowManagerControllerFactory* controller_factory,
- mojo::InterfaceRequest<mojo::WindowManager> request)
- : application_impl_(application_impl),
- connection_(connection),
- root_(nullptr) {
- window_manager_controller_ =
- controller_factory->CreateWindowManagerController(connection, this);
- LaunchViewManager(application_impl_);
-
- // We own WindowManagerImpl. When binding to the request, WindowManagerImpl
- // registers an error callback to WindowManagerRoot::RemoveConnectedService,
- // which will delete it.
- AddConnectedService(make_scoped_ptr(
- new WindowManagerImpl(this, request.PassMessagePipe(), false)));
-}
-
-WindowManagerRoot::~WindowManagerRoot() {
- // TODO(msw|sky): Should this destructor explicitly delete the ViewManager?
- mojo::ViewManager* cached_view_manager = view_manager();
- for (RegisteredViewIdSet::const_iterator it = registered_view_id_set_.begin();
- cached_view_manager && it != registered_view_id_set_.end(); ++it) {
- View* view = cached_view_manager->GetViewById(*it);
- if (view && view == root_)
- root_ = nullptr;
- if (view)
- view->RemoveObserver(this);
- }
- registered_view_id_set_.clear();
- DCHECK(!root_);
-
- // connected_services_ destructor will ensure we don't leak any
- // WindowManagerImpl objects and close all connections.
-}
-
-void WindowManagerRoot::AddConnectedService(
- scoped_ptr<WindowManagerImpl> connection) {
- connected_services_.push_back(connection.Pass());
-}
-
-void WindowManagerRoot::RemoveConnectedService(WindowManagerImpl* connection) {
- ConnectedServices::iterator position = std::find(
- connected_services_.begin(), connected_services_.end(), connection);
- DCHECK(position != connected_services_.end());
-
- connected_services_.erase(position);
-
- // Having no inbound connection is not a guarantee we are no longer used: we
- // can be processing an embed request (App 1 asked for a WindowManager, calls
- // Embed then immediately closes the connection, EmbeddedApp is not yet
- // started).
-}
-
-bool WindowManagerRoot::SetCapture(Id view_id) {
- View* view = view_manager()->GetViewById(view_id);
- return view && SetCaptureImpl(view);
-}
-
-bool WindowManagerRoot::FocusWindow(Id view_id) {
- View* view = view_manager()->GetViewById(view_id);
- return view && FocusWindowImpl(view);
-}
-
-bool WindowManagerRoot::ActivateWindow(Id view_id) {
- View* view = view_manager()->GetViewById(view_id);
- return view && ActivateWindowImpl(view);
-}
-
-bool WindowManagerRoot::IsReady() const {
- return root_;
-}
-
-void WindowManagerRoot::InitFocus(scoped_ptr<FocusRules> rules) {
- DCHECK(root_);
-
- focus_controller_.reset(new FocusController(rules.Pass()));
- focus_controller_->AddObserver(this);
- SetFocusController(root_, focus_controller_.get());
-
- capture_controller_.reset(new CaptureController);
- capture_controller_->AddObserver(this);
- SetCaptureController(root_, capture_controller_.get());
-}
-
-void WindowManagerRoot::Embed(
- const mojo::String& url,
- mojo::InterfaceRequest<mojo::ServiceProvider> services,
- mojo::ServiceProviderPtr exposed_services) {
- if (view_manager()) {
- window_manager_controller_->Embed(url, services.Pass(),
- exposed_services.Pass());
- return;
- }
- scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed);
- pending_embed->url = url;
- pending_embed->services = services.Pass();
- pending_embed->exposed_services = exposed_services.Pass();
- pending_embeds_.push_back(pending_embed.release());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, ViewManagerDelegate implementation:
-
-void WindowManagerRoot::OnEmbed(
- View* root,
- mojo::InterfaceRequest<mojo::ServiceProvider> services,
- mojo::ServiceProviderPtr exposed_services) {
- DCHECK(!root_);
- root_ = root;
-
- view_event_dispatcher_.reset(new ViewEventDispatcher);
-
- RegisterSubtree(root_);
-
- if (window_manager_controller_.get()) {
- window_manager_controller_->OnEmbed(root, services.Pass(),
- exposed_services.Pass());
- }
-
- for (PendingEmbed* pending_embed : pending_embeds_) {
- Embed(pending_embed->url, pending_embed->services.Pass(),
- pending_embed->exposed_services.Pass());
- }
- pending_embeds_.clear();
-}
-
-void WindowManagerRoot::OnViewManagerDisconnected(
- mojo::ViewManager* view_manager) {
- if (window_manager_controller_.get())
- window_manager_controller_->OnViewManagerDisconnected(view_manager);
- delete this;
-}
-
-bool WindowManagerRoot::OnPerformAction(mojo::View* view,
- const std::string& action) {
- if (!view)
- return false;
- if (action == "capture")
- return SetCaptureImpl(view);
- if (action == "focus")
- return FocusWindowImpl(view);
- else if (action == "activate")
- return ActivateWindowImpl(view);
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, ViewObserver implementation:
-
-void WindowManagerRoot::OnTreeChanged(
- const ViewObserver::TreeChangeParams& params) {
- if (params.receiver != root_)
- return;
- DCHECK(params.old_parent || params.new_parent);
- if (!params.target)
- return;
-
- if (params.new_parent) {
- if (registered_view_id_set_.find(params.target->id()) ==
- registered_view_id_set_.end()) {
- RegisteredViewIdSet::const_iterator it =
- registered_view_id_set_.find(params.new_parent->id());
- DCHECK(it != registered_view_id_set_.end());
- RegisterSubtree(params.target);
- }
- } else if (params.old_parent) {
- UnregisterSubtree(params.target);
- }
-}
-
-void WindowManagerRoot::OnViewDestroying(View* view) {
- Unregister(view);
- if (view == root_) {
- root_ = nullptr;
- if (focus_controller_)
- focus_controller_->RemoveObserver(this);
- if (capture_controller_)
- capture_controller_->RemoveObserver(this);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, ui::EventHandler implementation:
-
-void WindowManagerRoot::OnEvent(ui::Event* event) {
- if (!window_manager_client_)
- return;
-
- View* view = static_cast<ViewTarget*>(event->target())->view();
- if (!view)
- return;
-
- if (event->IsKeyEvent()) {
- const ui::KeyEvent* key_event = static_cast<const ui::KeyEvent*>(event);
- if (key_event->type() == ui::ET_KEY_PRESSED) {
- ui::Accelerator accelerator = ConvertEventToAccelerator(key_event);
- if (accelerator_manager_.Process(accelerator, view))
- return;
- }
- }
-
- if (focus_controller_)
- focus_controller_->OnEvent(event);
-
- window_manager_client_->DispatchInputEventToView(view->id(),
- mojo::Event::From(*event));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, mojo::FocusControllerObserver implementation:
-
-void WindowManagerRoot::OnFocused(View* gained_focus) {
- for (ConnectedServices::const_iterator it = connected_services_.begin();
- it != connected_services_.end(); ++it) {
- (*it)->NotifyViewFocused(GetIdForView(gained_focus));
- }
-}
-
-void WindowManagerRoot::OnActivated(View* gained_active) {
- for (ConnectedServices::const_iterator it = connected_services_.begin();
- it != connected_services_.end(); ++it) {
- (*it)->NotifyWindowActivated(GetIdForView(gained_active));
- }
- if (gained_active)
- gained_active->MoveToFront();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, mojo::CaptureControllerObserver implementation:
-
-void WindowManagerRoot::OnCaptureChanged(View* gained_capture) {
- for (ConnectedServices::const_iterator it = connected_services_.begin();
- it != connected_services_.end(); ++it) {
- (*it)->NotifyCaptureChanged(GetIdForView(gained_capture));
- }
- if (gained_capture)
- gained_capture->MoveToFront();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManagerRoot, private:
-
-bool WindowManagerRoot::SetCaptureImpl(View* view) {
- CHECK(view);
- capture_controller_->SetCapture(view);
- return capture_controller_->GetCapture() == view;
-}
-
-bool WindowManagerRoot::FocusWindowImpl(View* view) {
- CHECK(view);
- focus_controller_->FocusView(view);
- return focus_controller_->GetFocusedView() == view;
-}
-
-bool WindowManagerRoot::ActivateWindowImpl(View* view) {
- CHECK(view);
- focus_controller_->ActivateView(view);
- return focus_controller_->GetActiveView() == view;
-}
-
-void WindowManagerRoot::RegisterSubtree(View* view) {
- view->AddObserver(this);
- DCHECK(registered_view_id_set_.find(view->id()) ==
- registered_view_id_set_.end());
- // All events pass through the root during dispatch, so we only need a handler
- // installed there.
- if (view == root_) {
- ViewTarget* target = ViewTarget::TargetFromView(view);
- target->SetEventTargeter(scoped_ptr<ViewTargeter>(new ViewTargeter()));
- target->AddPreTargetHandler(this);
- view_event_dispatcher_->SetRootViewTarget(target);
- }
- registered_view_id_set_.insert(view->id());
- View::Children::const_iterator it = view->children().begin();
- for (; it != view->children().end(); ++it)
- RegisterSubtree(*it);
-}
-
-void WindowManagerRoot::UnregisterSubtree(View* view) {
- for (View* child : view->children())
- UnregisterSubtree(child);
- Unregister(view);
-}
-
-void WindowManagerRoot::Unregister(View* view) {
- RegisteredViewIdSet::iterator it = registered_view_id_set_.find(view->id());
- if (it == registered_view_id_set_.end()) {
- // Because we unregister in OnViewDestroying() we can still get a subsequent
- // OnTreeChanged for the same view. Ignore this one.
- return;
- }
- view->RemoveObserver(this);
- DCHECK(it != registered_view_id_set_.end());
- registered_view_id_set_.erase(it);
-}
-
-void WindowManagerRoot::DispatchInputEventToView(View* view,
- mojo::EventPtr event) {
- window_manager_client_->DispatchInputEventToView(view->id(), event.Pass());
-}
-
-void WindowManagerRoot::SetViewportSize(const gfx::Size& size) {
- window_manager_client_->SetViewportSize(mojo::Size::From(size));
-}
-
-void WindowManagerRoot::LaunchViewManager(mojo::ApplicationImpl* app) {
- // TODO(sky): figure out logic if this connection goes away.
- view_manager_client_factory_.reset(
- new mojo::ViewManagerClientFactory(application_impl_->shell(), this));
-
- ApplicationConnection* view_manager_app =
- app->ConnectToApplication("mojo:view_manager");
- view_manager_app->ConnectToService(&view_manager_service_);
-
- view_manager_app->AddService<WindowManagerInternal>(this);
- view_manager_app->AddService<mojo::NativeViewportEventDispatcher>(this);
-
- view_manager_app->ConnectToService(&window_manager_client_);
-}
-
-void WindowManagerRoot::Create(
- ApplicationConnection* connection,
- mojo::InterfaceRequest<WindowManagerInternal> request) {
- if (wm_internal_binding_.get()) {
- VLOG(1)
- << "WindowManager allows only one WindowManagerInternal connection.";
- return;
- }
- wm_internal_binding_.reset(
- new mojo::Binding<WindowManagerInternal>(this, request.Pass()));
-}
-
-void WindowManagerRoot::Create(
- mojo::ApplicationConnection* connection,
- mojo::InterfaceRequest<mojo::NativeViewportEventDispatcher> request) {
- new NativeViewportEventDispatcherImpl(this, request.Pass());
-}
-
-void WindowManagerRoot::CreateWindowManagerForViewManagerClient(
- uint16_t connection_id,
- mojo::ScopedMessagePipeHandle window_manager_pipe) {
- // TODO(sky): pass in |connection_id| for validation.
- AddConnectedService(make_scoped_ptr(
- new WindowManagerImpl(this, window_manager_pipe.Pass(), true)));
-}
-
-void WindowManagerRoot::SetViewManagerClient(
- mojo::ScopedMessagePipeHandle view_manager_client_request) {
- view_manager_client_.reset(
- mojo::ViewManagerClientFactory::WeakBindViewManagerToPipe(
- mojo::MakeRequest<mojo::ViewManagerClient>(
- view_manager_client_request.Pass()),
- view_manager_service_.Pass(), application_impl_->shell(), this));
-}
-
-} // namespace window_manager
« no previous file with comments | « services/window_manager/window_manager_root.h ('k') | services/window_manager/window_manager_root_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698