File.lastModifiedDate() should return the current date/time if the file date/time...
authorkinuko@chromium.org <kinuko@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Mar 2013 05:20:29 +0000 (05:20 +0000)
committerkinuko@chromium.org <kinuko@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Mar 2013 05:20:29 +0000 (05:20 +0000)
https://bugs.webkit.org/show_bug.cgi?id=111403

Reviewed by Kent Tamura.

Source/WebCore:

Per the recent File API spec change:
http://www.w3.org/TR/2012/WD-FileAPI-20121025/#dfn-lastModifiedDate

Test: http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js:

* fileapi/File.cpp:
(WebCore::File::lastModifiedDate): Changed to return the current date/time instead null if the valid file date/time is not available.
* fileapi/File.h:
(File):

LayoutTests:

* http/tests/local/fileapi/file-last-modified-after-delete-expected.txt: Updated.
* http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js: Updated.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@145035 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/http/tests/local/fileapi/file-last-modified-after-delete-expected.txt
LayoutTests/http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js
Source/WebCore/ChangeLog
Source/WebCore/fileapi/File.cpp
Source/WebCore/fileapi/File.h

index e06d58e..c5f5a13 100644 (file)
@@ -1,3 +1,13 @@
+2013-03-05  Kinuko Yasuda  <kinuko@chromium.org>
+
+        File.lastModifiedDate() should return the current date/time if the file date/time is not available
+        https://bugs.webkit.org/show_bug.cgi?id=111403
+
+        Reviewed by Kent Tamura.
+
+        * http/tests/local/fileapi/file-last-modified-after-delete-expected.txt: Updated.
+        * http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js: Updated.
+
 2013-03-06  Jer Noble  <jer.noble@apple.com>
 
         Unreviewed gardening.
index 5ceef9a..973ccdf 100644 (file)
@@ -4,7 +4,9 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS event.dataTransfer contains a File object on drop.
-PASS lastModifiedDate is null
+PASS lastModifiedDate is not null
+PASS lastModifiedDate is >= testStartTime
+PASS (new Date()).getTime() is >= lastModifiedDate
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7c0794a..8566f06 100644 (file)
@@ -2,6 +2,7 @@ description("Test File.lastModifiedDate returns null if the information is not a
 
 var tempFileContent = "1234567890";
 var tempFileName = "file-last-modified-after-delete.tmp";
+var testStartTime = new Date();
 var lastModifiedDate;
 
 function onFileDrop(file)
@@ -11,7 +12,11 @@ function onFileDrop(file)
 
     // This synchronosly queries the file's lastModifiedDate (which should fail) until/unless we start capturing the file metadata at File construction time.
     lastModifiedDate = file.lastModifiedDate;
-    shouldBe('lastModifiedDate', 'null');
+
+    // The returned value should be equal to the current date/time since the file's modified date/time is not available.
+    shouldNotBe('lastModifiedDate', 'null');
+    shouldBeGreaterThanOrEqual('lastModifiedDate', 'testStartTime');
+    shouldBeGreaterThanOrEqual('(new Date()).getTime()', 'lastModifiedDate');
 }
 
 function runTest()
index 96618a6..fce878b 100644 (file)
@@ -1,3 +1,20 @@
+2013-03-04  Kinuko Yasuda  <kinuko@chromium.org>
+
+        File.lastModifiedDate() should return the current date/time if the file date/time is not available
+        https://bugs.webkit.org/show_bug.cgi?id=111403
+
+        Reviewed by Kent Tamura.
+
+        Per the recent File API spec change:
+        http://www.w3.org/TR/2012/WD-FileAPI-20121025/#dfn-lastModifiedDate
+
+        Test: http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js:
+
+        * fileapi/File.cpp:
+        (WebCore::File::lastModifiedDate): Changed to return the current date/time instead null if the valid file date/time is not available.
+        * fileapi/File.h:
+        (File):
+
 2013-03-06  Philippe Liard  <pliard@chromium.org>
 
         Make RuleData support up to 8191 selectors
index 692bde1..147b4d4 100644 (file)
@@ -30,6 +30,7 @@
 #include "FileSystem.h"
 #include "MIMETypeRegistry.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/DateMath.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -152,16 +153,15 @@ File::File(const KURL& fileSystemURL, const FileMetadata& metadata)
 double File::lastModifiedDate() const
 {
 #if ENABLE(FILE_SYSTEM)
-    if (hasValidSnapshotMetadata())
-        return m_snapshotModificationTime * 1000.0;
+    if (hasValidSnapshotMetadata() && isValidFileTime(m_snapshotModificationTime))
+        return m_snapshotModificationTime * msPerSecond;
 #endif
 
     time_t modificationTime;
-    if (!getFileModificationTime(m_path, modificationTime))
-        return invalidFileTime();
+    if (getFileModificationTime(m_path, modificationTime) && isValidFileTime(modificationTime))
+        return modificationTime * msPerSecond;
 
-    // Needs to return epoch time in milliseconds for Date.
-    return modificationTime * 1000.0;
+    return currentTime() * msPerSecond;
 }
 
 unsigned long long File::size() const
index d466adc..53302db 100644 (file)
@@ -91,7 +91,7 @@ public:
     const String& path() const { return m_path; }
     const String& name() const { return m_name; }
 
-    // This may return NaN (which is converted to null Date in javascript layer) if getFileModificationTime() platform call has failed or the information is not available.
+    // This returns the current date and time if the file's last modifiecation date is not known (per spec: http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate).
     double lastModifiedDate() const;
 
 #if ENABLE(DIRECTORY_UPLOAD)