/*! @license
 * Shaka Player
 * Copyright 2016 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

goog.provide('shaka.polyfill.Aria');

goog.require('shaka.log');
goog.require('shaka.polyfill');

/**
 * @summary A polyfill to add support for the ARIAMixin interface mixin, for
 * browsers that do not implement it (e.g. Firefox).
 * Note that IE also does not support ARIAMixin, but this polyfill does not work
 * for that platform, as it relies on getters and setters.
 * @see https://w3c.github.io/aria/#ARIAMixin
 * @see https://developer.mozilla.org/en-US/docs/Web/API/Element
 */
shaka.polyfill.Aria = class {
  /** Install the polyfill if needed. */
  static install() {
    // eslint-disable-next-line no-restricted-syntax
    if (Object.getOwnPropertyDescriptor(Element.prototype, 'ariaHidden')) {
      shaka.log.info('Using native ARIAMixin interface.');
      return;
    }
    shaka.log.info('ARIAMixin interface not detected. Installing polyfill.');

    // Define a list of all of the ARIAMixin properties that we have externs
    // for.
    const attributes = [
      'ariaHidden',
      'ariaLabel',
      'ariaPressed',
      'ariaSelected',
    ];

    // Add each attribute, one by one.
    for (const attribute of attributes) {
      shaka.polyfill.Aria.addARIAMixinAttribute_(attribute);
    }
  }

  /**
   * Adds an attribute with the given name.
   * @param {string} name The name of the attribute, in camelCase.
   * @private
   */
  static addARIAMixinAttribute_(name) {
    const snakeCaseName = name.toLowerCase().replace('aria', 'aria-');
    /* eslint-disable no-restricted-syntax */
    Object.defineProperty(Element.prototype, name, {
      get() {
        const element = /** @type {!Element} */ (this);
        return element.getAttribute(snakeCaseName);
      },
      set(value) {
        const element = /** @type {!Element} */ (this);
        if (value == null || value == undefined) {
          element.removeAttribute(snakeCaseName);
        } else {
          element.setAttribute(snakeCaseName, value);
        }
      },
    });
    /* eslint-enable no-restricted-syntax */
  }
};


shaka.polyfill.register(shaka.polyfill.Aria.install);

@@ -1505,22 +1505,17 @@
   const 
-snakeC
+b
 aseName 
@@ -1547,25 +1547,375 @@
 ace(
-'aria', 'aria-');
+/%5Earia/, '');%0A    // NOTE: All the attributes listed in the method above begin with %22aria%22.%0A    // However, to add extra protection against the possibility of XSS attacks%0A    // through this method, this enforces %22aria-%22 at the beginning of the%0A    // snake-case name, even if somehow %22aria%22 were missing from the input.%0A    const snakeCaseName = %60aria-$%7BbaseName%7D%60;%0A
 %0A   

Make ARIA polyfill more robust