OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Google Inc. | 3 * Copyright (C) 2009 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 10 matching lines...) Expand all Loading... |
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 */ | 25 */ |
26 | 26 |
27 #include "config.h" | 27 #include "config.h" |
28 #include "ClipboardChromium.h" | 28 #include "ClipboardChromium.h" |
29 | 29 |
30 #include "ChromiumDataObject.h" | 30 #include "ChromiumDataObject.h" |
31 #include "NotImplemented.h" | |
32 | 31 |
33 namespace WebCore { | 32 namespace WebCore { |
| 33 |
| 34 |
| 35 // Filename length and character-set limits vary by filesystem, and there's no |
| 36 // real way to tell what filesystem is in use. Since HFS+ is by far the most |
| 37 // common, we'll abide by its limits, which are 255 Unicode characters (slightly |
| 38 // simplified; really it uses Normalization Form D, but the differences aren't |
| 39 // really worth dealing with here.) |
| 40 static const unsigned MaxHFSFilenameLength = 255; |
| 41 |
| 42 |
| 43 static bool isInvalidFileCharacter(UChar c) |
| 44 { |
| 45 // HFS+ basically allows anything but '/'. For sanity's sake we'll disallow |
| 46 // control characters. |
| 47 return c < ' ' || c == 0x7F || c == '/'; |
| 48 } |
34 | 49 |
35 String ClipboardChromium::validateFileName(const String& title, ChromiumDataObje
ct* dataObject) | 50 String ClipboardChromium::validateFileName(const String& title, ChromiumDataObje
ct* dataObject) |
36 { | 51 { |
37 notImplemented(); | 52 // Remove any invalid file system characters, especially "/". |
38 return title; | 53 String result = title.removeCharacters(isInvalidFileCharacter); |
| 54 String extension = dataObject->fileExtension().removeCharacters(&isInvalidFi
leCharacter); |
| 55 |
| 56 // Remove a ridiculously-long extension. |
| 57 if (extension.length() >= MaxHFSFilenameLength) |
| 58 extension = ""; |
| 59 |
| 60 // Truncate an overly-long filename. |
| 61 int overflow = result.length() + extension.length() - MaxHFSFilenameLength; |
| 62 if (overflow > 0) |
| 63 result.remove(result.length() - overflow, overflow); |
| 64 |
| 65 dataObject->setFileExtension(extension); |
| 66 return result; |
39 } | 67 } |
40 | 68 |
41 } // namespace WebCore | 69 } // namespace WebCore |
OLD | NEW |