// Copyright 2015 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_PROPERTY_UTIL_H_
#define ASH_WM_PROPERTY_UTIL_H_

#include <stdint.h>

#include <map>
#include <string>
#include <vector>

namespace aura {
class PropertyConverter;
class Window;
}  // namespace aura

namespace gfx {
class Rect;
class Size;
}  // namespace gfx

namespace ui {
namespace mojom {
enum class WindowType;
}
}  // namespace ui

namespace ash {

// Functions for extracting properties that are used at a Window creation time.
// Clients pass an initial set of properties when requesting a new aura::Window.
// Not all of these properties need be persisted, some are used solely to
// configure the window. The functions below extract those properties.

// Long lived properties are converted and stored as properties on the
// associated aura::Window. See aura::PropertyConverter for this set of
// properties.

using InitProperties = std::map<std::string, std::vector<uint8_t>>;

// Returns the kDisplayId_InitProperty if present, otherwise
// kInvalidDisplayID.
int64_t GetInitialDisplayId(const InitProperties& properties);

// If |window| has the |kContainerId_InitProperty| set as a property, then
// the value of |kContainerId_InitProperty| is set in |container_id| and true
// is returned. Otherwise false is returned.
bool GetInitialContainerId(const InitProperties& properties, int* container_id);

bool GetInitialBounds(const InitProperties& properties, gfx::Rect* bounds);

bool GetWindowPreferredSize(const InitProperties& properties, gfx::Size* size);

// Applies |properties| to |window| using |property_converter|.
void ApplyProperties(
    aura::Window* window,
    aura::PropertyConverter* property_converter,
    const std::map<std::string, std::vector<uint8_t>>& properties);

}  // namespace ash

#endif  // ASH_WM_PROPERTY_UTIL_H_
