// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_WM_BOOT_SPLASH_SCREEN_H_
#define ASH_WM_BOOT_SPLASH_SCREEN_H_

#include <string>

#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"

namespace aura {
class RootWindow;
}

namespace ui {
class Layer;
class LayerDelegate;
}

namespace ash {
namespace internal {

// BootSplashScreen manages a ui::Layer, stacked at the top of the root layer's
// children, that displays a copy of the initial contents of the host window.
// This allows us to continue displaying the Chrome OS boot splash screen (which
// is displayed before Ash starts) after the compositor has taken over so we can
// animate the transition between the splash screen and the login screen.
class BootSplashScreen {
 public:
  explicit BootSplashScreen(aura::RootWindow* root_window);
  ~BootSplashScreen();

  // Begins animating |layer_|'s opacity to 0 over |duration|.
  void StartHideAnimation(base::TimeDelta duration);

 private:
  class CopyHostContentLayerDelegate;

  // Copies the host window's content to |layer_|.
  scoped_ptr<CopyHostContentLayerDelegate> layer_delegate_;

  scoped_ptr<ui::Layer> layer_;

  DISALLOW_COPY_AND_ASSIGN(BootSplashScreen);
};

}  // namespace internal
}  // namespace ash

#endif  // ASH_WM_BOOT_SPLASH_SCREEN_H_
