// 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;
  readonly attribute DOMString advertisingId;
  readonly attribute boolean limitAdTracking;
  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;
};
