// Copyright 2018 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.

module ash.mojom;

import "ui/gfx/geometry/mojo/geometry.mojom";

// Allows clients to control pieces of the UI used in first-run tutorials.
// Exists because the first-run tutorial is a component extension run by
// Chrome. Methods exist here instead of on the Shelf or SystemTray interfaces
// due to small behavior differences (all methods only affect the primary
// display, opening the system tray bubble is persistent, etc.).
interface FirstRunHelper {
  // Cleans up the ash UI on tutorial start.
  Start(FirstRunHelperClient client);

  // Restores the ash UI on tutorial stop.
  Stop();

  // Returns the bounds of the app list button on the primary display in screen
  // coordinates.
  GetAppListButtonBounds() => (gfx.mojom.Rect screen_bounds);

  // Opens the system tray bubble menu to show the default view. Does nothing if
  // the bubble is already open. The bubble stays open until explicitly closed.
  // Returns bubble bounds in screen coordinates.
  OpenTrayBubble() => (gfx.mojom.Rect screen_bounds);

  // Closes the system tray bubble menu. Does nothing if the bubble is already
  // closed.
  CloseTrayBubble();
};

// The client for the FirstRunHelper interface, e.g. chrome.
interface FirstRunHelperClient {
  // Informs the client that something happened inside ash that should cancel
  // the tutorial (e.g. the device is shutting down).
  OnCancelled();
};
