| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2013 Google Inc. All rights reserved. | 2  * Copyright (C) 2013 Google Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions are | 5  * modification, are permitted provided that the following conditions are | 
| 6  * met: | 6  * met: | 
| 7  * | 7  * | 
| 8  *     * Redistributions of source code must retain the above copyright | 8  *     * Redistributions of source code must retain the above copyright | 
| 9  * notice, this list of conditions and the following disclaimer. | 9  * notice, this list of conditions and the following disclaimer. | 
| 10  *     * Redistributions in binary form must reproduce the above | 10  *     * Redistributions in binary form must reproduce the above | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 55     } else { | 55     } else { | 
| 56         const int sequenceArgumentIndex = 0; | 56         const int sequenceArgumentIndex = 0; | 
| 57         if (toV8Sequence(info[sequenceArgumentIndex], length, info.GetIsolate())
     .IsEmpty()) { | 57         if (toV8Sequence(info[sequenceArgumentIndex], length, info.GetIsolate())
     .IsEmpty()) { | 
| 58             throwTypeError(ExceptionMessages::failedToConstruct("File", Exceptio
     nMessages::notAnArrayTypeArgumentOrValue(sequenceArgumentIndex + 1)), info.GetIs
     olate()); | 58             throwTypeError(ExceptionMessages::failedToConstruct("File", Exceptio
     nMessages::notAnArrayTypeArgumentOrValue(sequenceArgumentIndex + 1)), info.GetIs
     olate()); | 
| 59             return; | 59             return; | 
| 60         } | 60         } | 
| 61     } | 61     } | 
| 62 | 62 | 
| 63     V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, fileName, info[1]); | 63     V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, fileName, info[1]); | 
| 64 | 64 | 
| 65     String contentType; | 65     V8BlobCustomHelpers::ParsedProperties properties(true); | 
| 66     String endings = "transparent"; // default if no BlobPropertyBag is passed |  | 
| 67     if (info.Length() > 2) { | 66     if (info.Length() > 2) { | 
| 68         if (!info[2]->IsObject()) { | 67         if (!info[2]->IsObject()) { | 
| 69             throwTypeError(ExceptionMessages::failedToConstruct("File", "The 3rd
      argument is not of type Object."), info.GetIsolate()); | 68             throwTypeError(ExceptionMessages::failedToConstruct("File", "The 3rd
      argument is not of type Object."), info.GetIsolate()); | 
| 70             return; | 69             return; | 
| 71         } | 70         } | 
| 72 | 71 | 
| 73         if (!V8BlobCustomHelpers::processBlobPropertyBag(info[2], "File", conten
     tType, endings, info.GetIsolate())) | 72         if (!properties.parseBlobPropertyBag(info[2], "File", info.GetIsolate())
     ) | 
| 74             return; | 73             return; | 
|  | 74     } else { | 
|  | 75         properties.setDefaultLastModifiedDate(); | 
| 75     } | 76     } | 
| 76 | 77 | 
| 77     BlobBuilder blobBuilder; | 78     BlobBuilder blobBuilder; | 
| 78     v8::Local<v8::Object> blobParts = v8::Local<v8::Object>::Cast(info[0]); | 79     v8::Local<v8::Object> blobParts = v8::Local<v8::Object>::Cast(info[0]); | 
| 79     if (!V8BlobCustomHelpers::processBlobParts(blobParts, length, endings, blobB
     uilder, info.GetIsolate())) | 80     if (!V8BlobCustomHelpers::processBlobParts(blobParts, length, properties.end
     ings, blobBuilder, info.GetIsolate())) | 
| 80         return; | 81         return; | 
| 81 | 82 | 
| 82     RefPtr<File> file = blobBuilder.createFile(contentType, fileName, currentTim
     e()); | 83     RefPtr<File> file = blobBuilder.createFile(properties.contentType, fileName,
      properties.lastModifiedDate()); | 
| 83     v8SetReturnValue(info, file.release()); | 84     v8SetReturnValue(info, file.release()); | 
| 84 } | 85 } | 
| 85 | 86 | 
|  | 87 void V8File::lastModifiedDateAttributeGetterCustom(const v8::PropertyCallbackInf
     o<v8::Value>& info) | 
|  | 88 { | 
|  | 89     // The auto-generated getters return null when the method in the underlying | 
|  | 90     // implementation returns NaN. Here, we need to return a Date whose value | 
|  | 91     // is NaN when the File constructor receives such a Date. WebIDL calls it | 
|  | 92     // an "undefined date". Fortunately, lastModifiedDate never needs to return | 
|  | 93     // null, so we can get away with mapping NaN to "new Date(NaN)" instead of | 
|  | 94     // "null". | 
|  | 95     // | 
|  | 96     // See step 3.3 in Section 7.1, and Section 7.2 of the File API spec: | 
|  | 97     // http://dev.w3.org/2006/webapi/FileAPI/ | 
|  | 98     // | 
|  | 99     // See the following sections of the WebIDL ED: | 
|  | 100     // 3.10.26: http://heycam.github.io/webidl/#idl-Date | 
|  | 101     // 4.2.27: http://heycam.github.io/webidl/#es-Date | 
|  | 102 | 
|  | 103     File* file = V8File::toNative(info.Holder()); | 
|  | 104     v8SetReturnValue(info, v8::Date::New(file->lastModifiedDate())); | 
|  | 105 } | 
|  | 106 | 
| 86 } // namespace WebCore | 107 } // namespace WebCore | 
| OLD | NEW | 
|---|