| Index: services/ui/public/cpp/in_flight_change.h
|
| diff --git a/services/ui/public/cpp/in_flight_change.h b/services/ui/public/cpp/in_flight_change.h
|
| deleted file mode 100644
|
| index ad14be96baf548764cfebde0dde6fb44d9dd7f9d..0000000000000000000000000000000000000000
|
| --- a/services/ui/public/cpp/in_flight_change.h
|
| +++ /dev/null
|
| @@ -1,312 +0,0 @@
|
| -// 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_PUBLIC_CPP_IN_FLIGHT_CHANGE_H_
|
| -#define SERVICES_UI_PUBLIC_CPP_IN_FLIGHT_CHANGE_H_
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include <memory>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "services/ui/public/cpp/window_observer.h"
|
| -#include "ui/gfx/geometry/rect.h"
|
| -
|
| -namespace ui {
|
| -
|
| -namespace mojom {
|
| -enum class Cursor : int32_t;
|
| -}
|
| -
|
| -class Window;
|
| -class WindowTreeClient;
|
| -
|
| -enum class ChangeType {
|
| - ADD_CHILD,
|
| - ADD_TRANSIENT_WINDOW,
|
| - BOUNDS,
|
| - CAPTURE,
|
| - DELETE_WINDOW,
|
| - DRAG_LOOP,
|
| - FOCUS,
|
| - MOVE_LOOP,
|
| - NEW_TOP_LEVEL_WINDOW,
|
| - NEW_WINDOW,
|
| - OPACITY,
|
| - PREDEFINED_CURSOR,
|
| - PROPERTY,
|
| - REMOVE_CHILD,
|
| - REMOVE_TRANSIENT_WINDOW_FROM_PARENT,
|
| - REORDER,
|
| - SET_MODAL,
|
| - VISIBLE,
|
| -};
|
| -
|
| -// InFlightChange is used to track function calls to the server and take the
|
| -// appropriate action when the call fails, or the same property changes while
|
| -// waiting for the response. When a function is called on the server an
|
| -// InFlightChange is created. The function call is complete when
|
| -// OnChangeCompleted() is received from the server. The following may occur
|
| -// while waiting for a response:
|
| -// . A new value is encountered from the server. For example, the bounds of
|
| -// a window is locally changed and while waiting for the ack
|
| -// OnWindowBoundsChanged() is received.
|
| -// When this happens SetRevertValueFrom() is invoked on the InFlightChange.
|
| -// The expectation is SetRevertValueFrom() takes the value to revert from the
|
| -// supplied change.
|
| -// . While waiting for the ack the property is again modified locally. When
|
| -// this happens a new InFlightChange is created. Once the ack for the first
|
| -// call is received, and the server rejected the change ChangeFailed() is
|
| -// invoked on the first change followed by SetRevertValueFrom() on the second
|
| -// InFlightChange. This allows the new change to update the value to revert
|
| -// should the second call fail.
|
| -// . If the server responds that the call failed and there is not another
|
| -// InFlightChange for the same window outstanding, then ChangeFailed() is
|
| -// invoked followed by Revert(). The expectation is Revert() sets the
|
| -// appropriate value back on the Window.
|
| -//
|
| -// In general there are two classes of changes:
|
| -// 1. We are the only side allowed to make the change.
|
| -// 2. The change can also be applied by another client. For example, the
|
| -// window manager may change the bounds as well as the local client.
|
| -//
|
| -// For (1) use CrashInFlightChange. As the name implies this change CHECKs that
|
| -// the change succeeded. Use the following pattern for this. This code goes
|
| -// where the change is sent to the server (in WindowTreeClient):
|
| -// const uint32_t change_id =
|
| -// ScheduleInFlightChange(base::WrapUnique(new CrashInFlightChange(
|
| -// window, ChangeType::REORDER)));
|
| -//
|
| -// For (2) use the same pattern as (1), but in the on change callback from the
|
| -// server (e.g. OnWindowBoundsChanged()) add the following:
|
| -// // value_from_server is the value supplied from the server. It corresponds
|
| -// // to the value of the property at the time the server processed the
|
| -// // change. If the local change fails, this is the value reverted to.
|
| -// InFlightBoundsChange new_change(window, value_from_server);
|
| -// if (ApplyServerChangeToExistingInFlightChange(new_change)) {
|
| -// // There was an in flight change for the same property. The in flight
|
| -// // change takes the value to revert from |new_change|.
|
| -// return;
|
| -// }
|
| -//
|
| -// // else case is no flight in change and the new value can be applied
|
| -// // immediately.
|
| -// WindowPrivate(window).LocalSetValue(new_value_from_server);
|
| -//
|
| -class InFlightChange {
|
| - public:
|
| - InFlightChange(Window* window, ChangeType type);
|
| - virtual ~InFlightChange();
|
| -
|
| - // NOTE: for properties not associated with any window window is null.
|
| - Window* window() { return window_; }
|
| - const Window* window() const { return window_; }
|
| - ChangeType change_type() const { return change_type_; }
|
| -
|
| - // Returns true if the two changes are considered the same. This is only
|
| - // invoked if the window id and ChangeType match.
|
| - virtual bool Matches(const InFlightChange& change) const;
|
| -
|
| - // Called in two cases:
|
| - // . When the corresponding property on the server changes. In this case
|
| - // |change| corresponds to the value from the server.
|
| - // . When |change| unsuccesfully completes.
|
| - virtual void SetRevertValueFrom(const InFlightChange& change) = 0;
|
| -
|
| - // The change failed. Normally you need not take any action here as Revert()
|
| - // is called as appropriate.
|
| - virtual void ChangeFailed();
|
| -
|
| - // The change failed and there is no pending change of the same type
|
| - // outstanding, revert the value.
|
| - virtual void Revert() = 0;
|
| -
|
| - private:
|
| - Window* window_;
|
| - const ChangeType change_type_;
|
| -};
|
| -
|
| -class InFlightBoundsChange : public InFlightChange {
|
| - public:
|
| - InFlightBoundsChange(Window* window, const gfx::Rect& revert_bounds);
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - gfx::Rect revert_bounds_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightBoundsChange);
|
| -};
|
| -
|
| -class InFlightDragChange : public InFlightChange {
|
| - public:
|
| - InFlightDragChange(Window* window, ChangeType type);
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightDragChange);
|
| -};
|
| -
|
| -// Inflight change that crashes on failure. This is useful for changes that are
|
| -// expected to always complete.
|
| -class CrashInFlightChange : public InFlightChange {
|
| - public:
|
| - CrashInFlightChange(Window* window, ChangeType type);
|
| - ~CrashInFlightChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void ChangeFailed() override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(CrashInFlightChange);
|
| -};
|
| -
|
| -// Use this class for properties that are specific to the client, and not a
|
| -// particular window. For example, only a single window can have focus, so focus
|
| -// is specific to the client.
|
| -//
|
| -// This does not implement InFlightChange::Revert, subclasses must implement
|
| -// that to update the WindowTreeClient.
|
| -class InFlightWindowTreeClientChange : public InFlightChange,
|
| - public WindowObserver {
|
| - public:
|
| - InFlightWindowTreeClientChange(WindowTreeClient* client,
|
| - Window* revert_value,
|
| - ChangeType type);
|
| - ~InFlightWindowTreeClientChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| -
|
| - protected:
|
| - WindowTreeClient* client() { return client_; }
|
| - Window* revert_window() { return revert_window_; }
|
| -
|
| - private:
|
| - void SetRevertWindow(Window* window);
|
| -
|
| - // WindowObserver:
|
| - void OnWindowDestroying(Window* window) override;
|
| -
|
| - WindowTreeClient* client_;
|
| - Window* revert_window_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightWindowTreeClientChange);
|
| -};
|
| -
|
| -class InFlightCaptureChange : public InFlightWindowTreeClientChange {
|
| - public:
|
| - InFlightCaptureChange(WindowTreeClient* client, Window* revert_value);
|
| - ~InFlightCaptureChange() override;
|
| -
|
| - // InFlightChange:
|
| - void Revert() override;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightCaptureChange);
|
| -};
|
| -
|
| -class InFlightFocusChange : public InFlightWindowTreeClientChange {
|
| - public:
|
| - InFlightFocusChange(WindowTreeClient* client, Window* revert_value);
|
| - ~InFlightFocusChange() override;
|
| -
|
| - // InFlightChange:
|
| - void Revert() override;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightFocusChange);
|
| -};
|
| -
|
| -class InFlightPropertyChange : public InFlightChange {
|
| - public:
|
| - InFlightPropertyChange(
|
| - Window* window,
|
| - const std::string& property_name,
|
| - const base::Optional<std::vector<uint8_t>>& revert_value);
|
| - ~InFlightPropertyChange() override;
|
| -
|
| - // InFlightChange:
|
| - bool Matches(const InFlightChange& change) const override;
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - const std::string property_name_;
|
| - base::Optional<std::vector<uint8_t>> revert_value_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightPropertyChange);
|
| -};
|
| -
|
| -class InFlightPredefinedCursorChange : public InFlightChange {
|
| - public:
|
| - InFlightPredefinedCursorChange(Window* window, mojom::Cursor revert_value);
|
| - ~InFlightPredefinedCursorChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - mojom::Cursor revert_cursor_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightPredefinedCursorChange);
|
| -};
|
| -
|
| -class InFlightVisibleChange : public InFlightChange {
|
| - public:
|
| - InFlightVisibleChange(Window* window, const bool revert_value);
|
| - ~InFlightVisibleChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - bool revert_visible_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightVisibleChange);
|
| -};
|
| -
|
| -class InFlightOpacityChange : public InFlightChange {
|
| - public:
|
| - InFlightOpacityChange(Window* window, float revert_value);
|
| - ~InFlightOpacityChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - float revert_opacity_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightOpacityChange);
|
| -};
|
| -
|
| -class InFlightSetModalChange : public InFlightChange {
|
| - public:
|
| - explicit InFlightSetModalChange(Window* window);
|
| - ~InFlightSetModalChange() override;
|
| -
|
| - // InFlightChange:
|
| - void SetRevertValueFrom(const InFlightChange& change) override;
|
| - void Revert() override;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InFlightSetModalChange);
|
| -};
|
| -
|
| -} // namespace ui
|
| -
|
| -#endif // SERVICES_UI_PUBLIC_CPP_IN_FLIGHT_CHANGE_H_
|
|
|