OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008, 2009 Google Inc. | 3 * Copyright (C) 2008, 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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 CachedImage* cachedImage = getCachedImage(element); | 217 CachedImage* cachedImage = getCachedImage(element); |
218 if (!cachedImage || !cachedImage->image() || !cachedImage->isLoaded()) | 218 if (!cachedImage || !cachedImage->image() || !cachedImage->isLoaded()) |
219 return; | 219 return; |
220 | 220 |
221 SharedBuffer* imageBuffer = cachedImage->image()->data(); | 221 SharedBuffer* imageBuffer = cachedImage->image()->data(); |
222 if (!imageBuffer || !imageBuffer->size()) | 222 if (!imageBuffer || !imageBuffer->size()) |
223 return; | 223 return; |
224 | 224 |
225 dataObject->setFileContent(imageBuffer); | 225 dataObject->setFileContent(imageBuffer); |
226 | 226 |
227 // Determine the filename for the file contents of the image. We try to | 227 // Determine the filename for the file contents of the image. |
228 // use the alt tag if one exists, otherwise we fall back on the suggested | 228 String filename = cachedImage->response().suggestedFilename(); |
229 // filename in the http header, and finally we resort to using the filename | 229 if (filename.isEmpty()) |
230 // in the URL. | 230 filename = url.lastPathComponent(); |
| 231 if (filename.isEmpty()) |
| 232 filename = element->getAttribute(altAttr); |
| 233 else { |
| 234 // Strip any existing extension. Assume that alt text is usually not a f
ilename. |
| 235 int extensionIndex = filename.reverseFind('.'); |
| 236 if (extensionIndex != -1) |
| 237 filename.truncate(extensionIndex); |
| 238 } |
| 239 filename = ClipboardChromium::validateFileName(filename, dataObject); |
| 240 |
231 String extension = MIMETypeRegistry::getPreferredExtensionForMIMEType( | 241 String extension = MIMETypeRegistry::getPreferredExtensionForMIMEType( |
232 cachedImage->response().mimeType()); | 242 cachedImage->response().mimeType()); |
233 dataObject->setFileExtension(extension.isEmpty() ? emptyString() : "." + ext
ension); | 243 dataObject->setFileExtension(extension.isEmpty() ? emptyString() : "." + ext
ension); |
234 String title = element->getAttribute(altAttr); | |
235 if (title.isEmpty()) | |
236 title = cachedImage->response().suggestedFilename(); | |
237 | 244 |
238 title = ClipboardChromium::validateFileName(title, dataObject); | 245 dataObject->setFileContentFilename(filename + dataObject->fileExtension()); |
239 dataObject->setFileContentFilename(title + dataObject->fileExtension()); | |
240 } | 246 } |
241 | 247 |
242 void ClipboardChromium::declareAndWriteDragImage(Element* element, const KURL& u
rl, const String& title, Frame* frame) | 248 void ClipboardChromium::declareAndWriteDragImage(Element* element, const KURL& u
rl, const String& title, Frame* frame) |
243 { | 249 { |
244 if (!m_dataObject) | 250 if (!m_dataObject) |
245 return; | 251 return; |
246 | 252 |
247 m_dataObject->setData(mimeTypeURL, url); | 253 m_dataObject->setData(mimeTypeURL, url); |
248 m_dataObject->setUrlTitle(title); | 254 m_dataObject->setUrlTitle(title); |
249 | 255 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 // Iterate through the types and add them. | 334 // Iterate through the types and add them. |
329 HashSet<String> types = m_dataObject->types(); | 335 HashSet<String> types = m_dataObject->types(); |
330 for (HashSet<String>::const_iterator it = types.begin(); it != types.end
(); ++it) | 336 for (HashSet<String>::const_iterator it = types.begin(); it != types.end
(); ++it) |
331 items->addPasteboardItem(*it); | 337 items->addPasteboardItem(*it); |
332 } | 338 } |
333 return items; | 339 return items; |
334 } | 340 } |
335 #endif | 341 #endif |
336 | 342 |
337 } // namespace WebCore | 343 } // namespace WebCore |
OLD | NEW |