Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / ui / host_desktop.cc
blobbf90814eb8a6e5a6eb7afd804eb8e42feb2e0e0b
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/host_desktop.h"
7 #if defined(OS_WIN)
8 #include <windows.h>
9 #endif
11 #include "chrome/browser/ui/ash/ash_util.h"
12 #include "chrome/browser/ui/aura/active_desktop_monitor.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_list.h"
16 #if defined(USE_ASH)
17 #include "ash/shell.h"
18 #endif
20 namespace chrome {
22 HostDesktopType GetHostDesktopTypeForNativeView(gfx::NativeView native_view) {
23 #if defined(USE_ASH)
24 // TODO(ananta)
25 // Once we've threaded creation context to wherever needed, we should remove
26 // this check here.
27 #if defined(OS_WIN)
28 if (!native_view)
29 return GetActiveDesktop();
30 #endif
31 return IsNativeViewInAsh(native_view) ?
32 HOST_DESKTOP_TYPE_ASH :
33 HOST_DESKTOP_TYPE_NATIVE;
34 #else
35 return HOST_DESKTOP_TYPE_NATIVE;
36 #endif
39 HostDesktopType GetHostDesktopTypeForNativeWindow(
40 gfx::NativeWindow native_window) {
41 #if defined(USE_ASH)
42 // TODO(ananta)
43 // Once we've threaded creation context to wherever needed, we should remove
44 // this check here.
45 #if defined(OS_WIN)
46 if (!native_window)
47 return GetActiveDesktop();
48 #endif
49 return IsNativeWindowInAsh(native_window) ?
50 HOST_DESKTOP_TYPE_ASH :
51 HOST_DESKTOP_TYPE_NATIVE;
52 #else
53 return HOST_DESKTOP_TYPE_NATIVE;
54 #endif
57 HostDesktopType GetActiveDesktop() {
58 #if defined(USE_ASH) && !defined(OS_CHROMEOS)
59 // The Ash desktop is considered active if a non-desktop RootWindow was last
60 // activated and the Ash desktop is still open. As it is, the Ash desktop
61 // will be considered the last active if a user switches from metro Chrome to
62 // the Windows desktop but doesn't activate any Chrome windows there (e.g.,
63 // by clicking on one or otherwise giving one focus). Consider finding a way
64 // to detect that the Windows desktop has been activated so that the native
65 // desktop can be considered active once the user switches to it if its
66 // BrowserList isn't empty.
67 if ((ActiveDesktopMonitor::GetLastActivatedDesktopType() ==
68 chrome::HOST_DESKTOP_TYPE_ASH) &&
69 ash::Shell::HasInstance()) {
70 return HOST_DESKTOP_TYPE_ASH;
72 #endif
73 return HOST_DESKTOP_TYPE_NATIVE;
76 } // namespace chrome