chromium/third_party/blink/web_tests/fast/filesystem/file-metadata-after-write.html

<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<div>This verifies File.size (for a file from FileSystem API) always returns the fresh size even after the file is modified.</div>
<div id='console'></div>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

var fileEntryForCleanup;
var testFile;
var testText1 = '1234567890';
var testText2 = 'abcdefghijklmnopqrstuvwxyz';

webkitRequestFileSystem(
    window.TEMPORARY, 100, function(fs) {
        fs.root.getFile('test', {create:true}, function(entry) {
            fileEntryForCleanup = entry;
            writeTextToFile(entry, testText1, function() {
                log('Write succeeded.');
                entry.file(onWrittenFile.bind(this, entry), onError);
            });
        }, onError);
    }, onError);

function onWrittenFile(entry, file) {
    testFile = file;
    shouldBe('testFile.size', 'testText1.length');
    // Write into this file again.
    writeTextToFile(entry, testText2, function() {
        log('Write succeeded.');
        entry.file(function(newFile) {
            // The file size should be updated only for the new file.
            shouldBe('testFile.size', 'testText1.length');
            testFile = newFile;
            shouldBe('testFile.size', 'testText2.length');
            cleanup();
        }, onError);
    });
}

function writeTextToFile(entry, contents, successCallback)
{
    log('Writing ' + contents + ' to the file...');
    entry.createWriter(function(writer) {
        log('Created a writer.');
        writer.write(new Blob([contents], {type:'text/plain'}));
        writer.onwriteend = successCallback;
        writer.onerror = onError;
    });
}

function log(text)
{
    var console = document.getElementById('console');
    console.appendChild(document.createTextNode(text));
    console.appendChild(document.createElement('br'));
}

function onError(e)
{
    log('ERROR: ' + e.name);
    console.log(e);
    cleanup();
}

function cleanup()
{
    if (fileEntryForCleanup) {
        fileEntryForCleanup.remove(endTest, endTest);
        return;
    }
    endTest();
}

function endTest()
{
    if (window.testRunner)
        testRunner.notifyDone();
}

</script>
</body>
</html>