15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/tabs/dock_info_ash.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/coordinate_conversion.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)aura::Window* GetLocalProcessWindowAtPointImpl(
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Point& screen_point,
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::set<gfx::NativeView>& ignore,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    aura::Window* window) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ignore.find(window) != ignore.end())
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!window->IsVisible())
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (window->id() == ash::internal::kShellWindowId_PhantomWindow ||
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      window->id() == ash::internal::kShellWindowId_OverlayContainer)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (window->layer()->type() == ui::LAYER_TEXTURED)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return window->GetBoundsInScreen().Contains(screen_point) ? window : NULL;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (aura::Window::Windows::const_reverse_iterator i =
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           window->children().rbegin(); i != window->children().rend(); ++i) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    aura::Window* result =
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetLocalProcessWindowAtPointImpl(screen_point, ignore, *i);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (result)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return result;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DockInfo GetDockInfoAtPointAsh(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Point& screen_point, const std::set<gfx::NativeView>& ignore) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng):
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return DockInfo();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeView GetLocalProcessWindowAtPointAsh(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Point& screen_point,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::set<gfx::NativeView>& ignore) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetLocalProcessWindowAtPointImpl(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      screen_point, ignore, ::ash::wm::GetRootWindowAt(screen_point));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome
62