Get event targetting working for mouse events.

In 28b50b9614, I committed a patch which broke input handling as I
removed window_manager's aura dependency. This has been fixed for mouse
events, and the wm_flow demo now switches windows on clicks.

Key input is still broken here; that will be handled in another
followup.

BUG=431047
R=sky@chromium.org

Review URL: https://codereview.chromium.org/724973003
diff --git a/mojo/services/window_manager/window_manager_app.cc b/mojo/services/window_manager/window_manager_app.cc
index dfc10d0..cb807d1 100644
--- a/mojo/services/window_manager/window_manager_app.cc
+++ b/mojo/services/window_manager/window_manager_app.cc
@@ -85,17 +85,6 @@
   STLDeleteElements(&connections_);
 }
 
-// static
-View* WindowManagerApp::GetViewForViewTarget(ViewTarget* target) {
-  return target->view();
-}
-
-ViewTarget* WindowManagerApp::GetViewTargetForViewId(Id view) {
-  ViewIdToViewTargetMap::const_iterator it =
-      view_id_to_view_target_map_.find(view);
-  return it != view_id_to_view_target_map_.end() ? it->second : nullptr;
-}
-
 void WindowManagerApp::AddConnection(WindowManagerImpl* connection) {
   DCHECK(connections_.find(connection) == connections_.end());
   connections_.insert(connection);
@@ -176,7 +165,7 @@
 
   view_event_dispatcher_.reset(new ViewEventDispatcher());
 
-  RegisterSubtree(root_, nullptr);
+  RegisterSubtree(root_);
 
   // TODO(erg): Also move the capture client over.
   //
@@ -214,12 +203,12 @@
     return;
 
   if (params.new_parent) {
-    if (view_id_to_view_target_map_.find(params.target->id()) ==
-        view_id_to_view_target_map_.end()) {
-      ViewIdToViewTargetMap::const_iterator it =
-          view_id_to_view_target_map_.find(params.new_parent->id());
-      DCHECK(it != view_id_to_view_target_map_.end());
-      RegisterSubtree(params.target, it->second);
+    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);
@@ -236,13 +225,6 @@
     focus_controller_->RemoveObserver(this);
 }
 
-void WindowManagerApp::OnViewBoundsChanged(View* view,
-                                           const Rect& old_bounds,
-                                           const Rect& new_bounds) {
-  // aura::Window* window = GetWindowForViewId(view->id());
-  // window->SetBounds(new_bounds.To<gfx::Rect>());
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 // WindowManagerApp, ui::EventHandler implementation:
 
@@ -250,7 +232,7 @@
   if (!window_manager_client_)
     return;
 
-  View* view = GetViewForViewTarget(static_cast<ViewTarget*>(event->target()));
+  View* view = static_cast<ViewTarget*>(event->target())->view();
   if (!view)
     return;
 
@@ -287,24 +269,22 @@
 ////////////////////////////////////////////////////////////////////////////////
 // WindowManagerApp, private:
 
-void WindowManagerApp::RegisterSubtree(View* view, ViewTarget* parent) {
+void WindowManagerApp::RegisterSubtree(View* view) {
   view->AddObserver(this);
-  DCHECK(view_id_to_view_target_map_.find(view->id()) ==
-         view_id_to_view_target_map_.end());
-  ViewTarget* target = new ViewTarget(this, view);
+  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);
   }
-  // TODO(erg): Why is there no matching RemoveChild()? How does that work in
-  // the aura version?
-  view_id_to_view_target_map_[view->id()] = target;
+  registered_view_id_set_.insert(view->id());
   View::Children::const_iterator it = view->children().begin();
   for (; it != view->children().end(); ++it)
-    RegisterSubtree(*it, target);
+    RegisterSubtree(*it);
 }
 
 void WindowManagerApp::UnregisterSubtree(View* view) {
@@ -314,19 +294,15 @@
 }
 
 void WindowManagerApp::Unregister(View* view) {
-  ViewIdToViewTargetMap::iterator it =
-      view_id_to_view_target_map_.find(view->id());
-  if (it == view_id_to_view_target_map_.end()) {
+  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 != view_id_to_view_target_map_.end());
-  // Delete before we remove from map as destruction may want to look up view
-  // for window.
-  delete it->second;
-  view_id_to_view_target_map_.erase(it);
+  DCHECK(it != registered_view_id_set_.end());
+  registered_view_id_set_.erase(it);
 }
 
 void WindowManagerApp::DispatchInputEventToView(View* view, EventPtr event) {