Tests that application cache model keeps track of manifest urls and statuses correctly after UPDATEREADY event and swapCache() call.

Dumping application cache tree:
    (empty)
Dumping application cache model:
    (empty)

Exception while running: function frameNavigated(frame){callback(frame.id);}
ReferenceError: applicationCache is not defined
    at step1 (http://127.0.0.1:8000/devtools/appcache/appcache-swap.js:26:55)
    at ResourceTreeModel.frameNavigated (http://localhost:8000/inspector-sources/application_test_runner/application_test_runner_module.js:1:284)
    at ResourceTreeModel.result (http://localhost:8000/inspector-sources/test_runner/test_runner.js:30:37)
    at ResourceTreeModel.receiver.<computed> (http://localhost:8000/inspector-sources/test_runner/test_runner.js:19:58)
    at PageDispatcher.frameNavigated (http://localhost:8000/inspector-sources/sdk/sdk.js:1794:25)
    at _DispatcherPrototype.dispatch (http://localhost:8000/inspector-sources/protocol_client/protocol_client.js:125:222)
    at SessionRouter._onMessage (http://localhost:8000/inspector-sources/protocol_client/protocol_client.js:61:41)
    at MainConnection._dispatchMessage (http://localhost:8000/inspector-sources/sdk/sdk.js:2199:61)
    at ObjectWrapper.dispatchEventToListeners (http://localhost:8000/inspector-sources/common/common.js:133:177)
    at innerDispatch (http://localhost:8000/inspector-sources/host/host.js:135:90)

