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