1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/ui/views/auto_keep_alive.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/aura/window.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/views/view_constants_aura.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)AutoKeepAlive::AutoKeepAlive(gfx::NativeWindow window)
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : keep_alive_available_(false) {
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // In case of aura we want default to be keep alive not available for ash
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // because ash has keep alive set and we don't want additional keep alive
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // count. If there is a |window|, use its root window's kDesktopRootWindow
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // to test whether we are on desktop. Otherwise, use GetActiveDesktop().
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (window) {
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    gfx::NativeWindow native_window = window->GetRootWindow();
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (native_window->GetProperty(views::kDesktopRootWindow))
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      keep_alive_available_ = true;
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  } else if (chrome::GetActiveDesktop() != chrome::HOST_DESKTOP_TYPE_ASH) {
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    keep_alive_available_ = true;
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (keep_alive_available_)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    chrome::IncrementKeepAliveCount();
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)AutoKeepAlive::~AutoKeepAlive() {
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (keep_alive_available_)
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    chrome::DecrementKeepAliveCount();
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
34