// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

interface H5vccSystem {
  readonly attribute boolean areKeysReversed;
  readonly attribute DOMString buildId;
  readonly attribute DOMString platform;
  readonly attribute DOMString region;
  readonly attribute DOMString version;
  boolean triggerHelp();

  // enum UserOnExitStrategy
  //
  // When a user requests to leave the application, window.close() should be
  // called.
  const unsigned long USER_ON_EXIT_STRATEGY_CLOSE = 0;
  // When a user requests to leave the application, window.minimize() should be
  // called.
  const unsigned long USER_ON_EXIT_STRATEGY_MINIMIZE = 1;
  // The user should not be allowed to initiate an application exit request.
  const unsigned long USER_ON_EXIT_STRATEGY_NO_EXIT = 2;

  // This variable defines what Cobalt's preferred strategy should be for
  // handling internally triggered application exit requests (e.g. the user
  // chooses to back out of the application).  See the comments in the
  // enum above for more information about possible values.
  readonly attribute unsigned long userOnExitStrategy;
};
