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

// H5vcc stands for "HTML5 Video Container for Consoles".
//
// The H5vcc node acts as a Javascript namespace collecting various disparate
// APIs which allow clients to call non-standard native functions that we
// expose.
//
// For example we provide a h5vcc.storage.ClearCookies(), which can empty the
// cookie jar in response to the user's request. Other H5vcc modules expose
// audio capabilities about the platform, or run an in-app DIAL server.
//
// The H5vcc node should just be a collection of readonly sub-nodes.
// This is created by the BrowserModule and passed directly to the Window
// during construction.

// Note: every attribute defined here must have a corresponding interface idl
// file included in BUILD.gn unconditionally, even if there is
// a condition before the declaration of the attribute.

interface H5vcc {
  readonly attribute H5vccAccessibility accessibility;
  readonly attribute H5vccAccountInfo accountInfo;
  readonly attribute H5vccAudioConfigArray audioConfig;
  readonly attribute H5vccCrashLog crashLog;
  readonly attribute CValView cVal;
  readonly attribute H5vccRuntime runtime;
  readonly attribute H5vccSettings settings;
  [Conditional=COBALT_ENABLE_SSO]
      readonly attribute H5vccSso sso;
  readonly attribute H5vccStorage storage;
  readonly attribute H5vccSystem system;
  readonly attribute H5vccTraceEvent traceEvent;
  [Conditional=SB_IS_EVERGREEN]
      readonly attribute H5vccUpdater updater;
};
