| <!-- webkit-test-runner [ useEphemeralSession=true ] --> |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body> |
| <script> |
| description("Test IndexedDB IDBKeyRange when we are Out of Memory."); |
| |
| // Since we are low on memory, it is difficult to use the exception test helpers. |
| let exceptionString = undefined; |
| |
| const a = []; |
| a.length = 2**30; |
| a.__proto__ = {}; |
| Object.defineProperty(a, 0, { get: foo }); |
| function foo() { |
| new Uint8Array(a); |
| } |
| |
| try { |
| foo(); |
| } catch { } |
| |
| try { |
| for (let timeoutCount = 1000; timeoutCount--;) |
| new ArrayBuffer(2**20); |
| } catch { } |
| |
| let u8 = new Uint8Array(); |
| |
| try { |
| IDBKeyRange.only(u8); |
| } catch(e) { |
| exceptionString = e.toString(); |
| } |
| |
| // Try to free up some memory to check our exception |
| u8 = undefined; |
| gc(); |
| |
| // Since we can't reliably produce an out of memory everytime, no exception is also a pass. |
| shouldBeTrue("exceptionString == undefined || exceptionString === 'DataError: Provided data is inadequate.'"); |
| |
| testPassed("IDBKeyRange.only didn't crash"); |
| </script> |
| </body> |
| </html> |