<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - AppCache breaks AJAX responseType "arraybuffer""
   href="https://bugs.webkit.org/show_bug.cgi?id=138506">138506</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>AppCache breaks AJAX responseType "arraybuffer"
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>528+ (Nightly build)
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Major
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Web Audio
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned@lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>ashley@scirra.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>crogers@google.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Steps to reproduce:

1. Visit <a href="http://www.scirra.com/labs/bugs/iosajaxcache/">http://www.scirra.com/labs/bugs/iosajaxcache/</a>
2. Press 'Play sound'

If that works correctly, wait a few seconds, press Refresh, then press 'Play sound' again.

Expected result:

Sound should play every time 'Play sound' is pressed.

Observed result:

The AJAX request for explosion.m4a completes successfully, but returns an ArrayBuffer with a byteLength of 0. Audio decoding subsequently fails and the audio cannot play.

Compare to <a href="http://www.scirra.com/labs/bugs/iosajaxnocache/">http://www.scirra.com/labs/bugs/iosajaxnocache/</a>, which is identical except offline.appcache has been deleted and the html manifest attribute removed. Audio plays correctly every time.

Therefore an AJAX request of type "arraybuffer" to a file in the AppCache always returns an empty ArrayBuffer.

Reproduces with Safari on iOS 8.1, as well as Safari 8 on OS X 10.10 Yosemite. It works correctly in Chrome for Windows, Android and OS X, as well as Firefox for Windows. Note the test does not work on Firefox for OS X not because it is affected by this bug (it returns the correct byteLength), but simply because the test only uses an AAC audio file and Firefox does not support that format on all platforms.

Impact:

Any page using both AppCache and Web Audio will be broken, since the normal way of loading audio files to play with Web Audio does not work.

All content created by Construct 2 (www.scirra.com), a major HTML5 game engine, is affected by this issue. All the games it exports use AppCache for offline support and Web Audio for sound effect playback. There is already a large amount of Construct 2 content on the web affected by this, and the impact is that no sound plays in Safari on iOS or OS X.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>