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

// The <code>chrome.launcherPage</code> API provides launcher pages in the
// Chrome Launcher with the capabilities and events they need.
namespace launcherPage {
  callback PushSubpageCallback = void();
  callback ShowCallback = void();
  callback HideCallback = void();
  callback SetEnabledCallback = void();

  interface Functions {
    // Pushes a subpage state onto a state stack for the launcher page. This
    // state will be popped when the launcher's back button is pressed,
    // preventing the launcher from hiding the launcher page and sending an
    // onPopSubpage event to the launcher page. Once all states are popped, the
    // next press of the back button will cause the launcher to be hidden.
    //
    // Note: All subpages are immediately popped when the launcher is closed or
    // the launcher page is otherwise hidden.
    static void pushSubpage(optional PushSubpageCallback callback);

    // Opens the launcher if it isn't currently open and shows the launcher
    // page.
    static void show(optional ShowCallback callback);

    // Returns the launcher to the start page if the launcher page is showing.
    static void hide(optional HideCallback callback);

    // Sets whether the launcher page is enabled in the launcher. If disabled,
    // the launcher page will not be shown when the area at the bottom of the
    // launcher is pressed.
    //
    // Note: The launcher page will still be displayed at the bottom of the
    // launcher's start page and launcherPage.show() will still show the
    // launcher page.
    static void setEnabled(boolean enabled,
                           optional SetEnabledCallback callback);
  };

  interface Events {
    // Fired when the launcher page is transitioning between hidden and shown.
    // It's possible for this to be called with a pushed subpage so this
    // event handler should account for transitioning from any subpage to a
    // collapsed view.
    static void onTransitionChanged(double progress);

    // Fired when the launcher's back button is pressed if there are remaining
    // subpages on the state stack pushed by pushSubpage().
    static void onPopSubpage();
  };
};
