|  | testStorages(function(storageString) { | 
|  | async_test(function(t) { | 
|  | assert_true(storageString in window, storageString + " exist"); | 
|  | var storage = window[storageString]; | 
|  | t.add_cleanup(function() { storage.clear() }); | 
|  |  | 
|  | clearStorage(storageString, t.step_func(loadiframe)); | 
|  | assert_equals(storage.length, 0, "storage.length"); | 
|  |  | 
|  | function loadiframe(msg) | 
|  | { | 
|  | iframe.onload = t.step_func(step0); | 
|  | iframe.src = "resources/event_basic.html"; | 
|  | } | 
|  |  | 
|  | function step0(msg) | 
|  | { | 
|  | storage.foo = "test"; | 
|  | runAfterNStorageEvents(t.step_func(step1), 1); | 
|  | } | 
|  |  | 
|  | function step1(msg) | 
|  | { | 
|  | storageEventList = new Array(); | 
|  | storage.foo = "test"; | 
|  |  | 
|  | runAfterNStorageEvents(t.step_func(step2), 0); | 
|  | } | 
|  |  | 
|  | function step2(msg) | 
|  | { | 
|  | if(msg != undefined) { | 
|  | assert_unreached(msg); | 
|  | } | 
|  | assert_equals(storageEventList.length, 0); | 
|  |  | 
|  | storage.foo = "TEST"; | 
|  |  | 
|  | runAfterNStorageEvents(t.step_func(step3), 1); | 
|  | } | 
|  |  | 
|  | function step3(msg) | 
|  | { | 
|  | if(msg != undefined) { | 
|  | assert_unreached(msg); | 
|  | } | 
|  | assert_equals(storageEventList.length, 1); | 
|  |  | 
|  | t.done(); | 
|  | } | 
|  | }, storageString + " storage events fire even when only the case of the value changes."); | 
|  | }); |