blob: 8091d2fce621fa8894e033f524f9a259f413698f [file] [log] [blame]
// 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 SERVICES_UI_VIEW_MANAGER_VIEW_LAYOUT_REQUEST_H_
#define SERVICES_UI_VIEW_MANAGER_VIEW_LAYOUT_REQUEST_H_
#include <memory>
#include <vector>
#include "base/callback.h"
#include "base/macros.h"
#include "mojo/services/ui/views/interfaces/layouts.mojom.h"
namespace view_manager {
using ViewLayoutCallback = base::Callback<void(mojo::ui::ViewLayoutInfoPtr)>;
// Describes a pending layout request for a view.
class ViewLayoutRequest {
public:
explicit ViewLayoutRequest(mojo::ui::ViewLayoutParamsPtr layout_params);
// Dispatches null layout info automatically if DispatchLayoutInfo was not
// called.
~ViewLayoutRequest();
// Gets the layout parameters for this request.
// Does not confer ownership.
mojo::ui::ViewLayoutParams* layout_params() { return layout_params_.get(); }
// Gets the layout parameters for this request and takes ownership.
mojo::ui::ViewLayoutParamsPtr TakeLayoutParams() {
return layout_params_.Pass();
}
// Adds a callback to this layout request.
// Must be called before dispatching.
void AddCallback(const ViewLayoutCallback& callback);
// Returns true if the request has callbacks.
bool has_callbacks() { return !callbacks_.empty(); }
// Sends the layout information to each client.
// Must be invoked exactly once before destroying the request to prevent
// dangling callbacks.
void DispatchLayoutInfo(mojo::ui::ViewLayoutInfo* info);
// True if the request has been issued to the view.
// False if it is still pending in the queue.
bool issued() const { return issued_; }
void set_issued(bool value) { issued_ = value; }
private:
mojo::ui::ViewLayoutParamsPtr layout_params_;
std::vector<ViewLayoutCallback> callbacks_;
bool was_dispatched_;
bool issued_;
DISALLOW_COPY_AND_ASSIGN(ViewLayoutRequest);
};
} // namespace view_manager
#endif // SERVICES_UI_VIEW_MANAGER_VIEW_LAYOUT_REQUEST_H_