Changeset 60957 in webkit
- Timestamp:
- Jun 10, 2010 7:31:34 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r60956 r60957 1 2010-06-10 Daniel Cheng <dcheng@chromium.org> 2 3 Reviewed by Jian Li. 4 5 Don't convert filenames to URLs in edit drags. 6 https://bugs.webkit.org/show_bug.cgi?id=38826 7 8 For security reasons, we don't want to expose file system paths to web 9 content, so we filter them out of edit drags. 10 11 * editing/pasteboard/file-drag-to-editable-expected.txt: Added. 12 * editing/pasteboard/file-drag-to-editable.html: Added. 13 * editing/pasteboard/script-tests/file-drag-to-editable.js: Added. 14 * platform/gtk/Skipped: 15 * platform/mac/Skipped: 16 * platform/qt/Skipped: 17 * platform/win/Skipped: 18 1 19 2010-06-10 Marcus Bulach <bulach@google.com> 2 20 -
trunk/LayoutTests/platform/gtk/Skipped
r60936 r60957 666 666 editing/pasteboard/copy-in-password-field.html 667 667 editing/pasteboard/drag-image-in-about-blank-frame.html 668 editing/pasteboard/file-drag-to-editable.html 668 669 editing/pasteboard/file-input-files-access.html 669 670 editing/pasteboard/get-data-text-plain-drop.html -
trunk/LayoutTests/platform/mac/Skipped
r60911 r60957 295 295 fast/dom/Geolocation/reentrant-error.html 296 296 fast/dom/Geolocation/reentrant-success.html 297 298 # Filenames aren't filtered out from edit drags yet, see https://bugs.wekit.org/show_bug.cgi?id=38826 299 editing/pasteboard/file-drag-to-editable.html -
trunk/LayoutTests/platform/qt/Skipped
r60936 r60957 830 830 # ------- missing eventSender.beginDragWithFiles 831 831 editing/pasteboard/dataTransfer-setData-getData.html 832 editing/pasteboard/file-drag-to-editable.html 832 833 editing/pasteboard/file-input-files-access.html 833 834 fast/dom/Window/window-postmessage-clone.html -
trunk/LayoutTests/platform/win/Skipped
r60822 r60957 193 193 # <rdar://problem/5230396> eventSender.beginDragWithFiles is unimplemented 194 194 editing/pasteboard/dataTransfer-setData-getData.html 195 editing/pasteboard/file-drag-to-editable.html 195 196 editing/pasteboard/file-input-files-access.html 196 197 fast/events/drag-to-navigate.html -
trunk/WebCore/ChangeLog
r60955 r60957 1 2010-06-10 Daniel Cheng <dcheng@chromium.org> 2 3 Reviewed by Jian Li. 4 5 Don't convert filenames to URLs in edit drags. 6 https://bugs.webkit.org/show_bug.cgi?id=38826 7 8 For security reasons, we don't want to expose file system paths to web 9 content, so we filter them out of edit drags. 10 11 Test: editing/pasteboard/file-drag-to-editable.html 12 13 * page/DragController.cpp: 14 (WebCore::documentFragmentFromDragData): 15 * platform/DragData.h: 16 (WebCore::DragData::): 17 * platform/android/DragDataAndroid.cpp: 18 (WebCore::DragData::containsURL): 19 (WebCore::DragData::asURL): 20 * platform/chromium/DragDataChromium.cpp: 21 (WebCore::DragData::containsURL): 22 (WebCore::DragData::asURL): 23 * platform/efl/DragDataEfl.cpp: 24 (WebCore::DragData::containsURL): 25 (WebCore::DragData::asURL): 26 * platform/gtk/DragDataGtk.cpp: 27 (WebCore::DragData::containsURL): 28 (WebCore::DragData::asURL): 29 * platform/haiku/DragDataHaiku.cpp: 30 (WebCore::DragData::containsURL): 31 (WebCore::DragData::asURL): 32 * platform/mac/DragDataMac.mm: 33 (WebCore::DragData::containsURL): 34 (WebCore::DragData::asURL): 35 * platform/qt/DragDataQt.cpp: 36 (WebCore::DragData::asPlainText): 37 (WebCore::DragData::containsURL): 38 (WebCore::DragData::asURL): 39 * platform/win/ClipboardUtilitiesWin.cpp: 40 (WebCore::getURL): 41 (WebCore::getPlainText): 42 * platform/win/ClipboardUtilitiesWin.h: 43 * platform/win/ClipboardWin.cpp: 44 (WebCore::ClipboardWin::getData): 45 * platform/win/DragDataWin.cpp: 46 (WebCore::DragData::containsURL): 47 (WebCore::DragData::asURL): 48 * platform/wince/DragDataWince.cpp: 49 (WebCore::DragData::containsURL): 50 (WebCore::DragData::asURL): 51 * platform/wx/DragDataWx.cpp: 52 (WebCore::DragData::containsURL): 53 (WebCore::DragData::asURL): 54 1 55 2010-06-10 Mike Belshe <mbelshe@chromium.org> 2 56 -
trunk/WebCore/page/DragController.cpp
r60943 r60957 111 111 return fragment; 112 112 113 if (dragData->containsURL( )) {113 if (dragData->containsURL(DragData::DoNotConvertFilenames)) { 114 114 String title; 115 String url = dragData->asURL( &title);115 String url = dragData->asURL(DragData::DoNotConvertFilenames, &title); 116 116 if (!url.isEmpty()) { 117 117 RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(document); -
trunk/WebCore/platform/DragData.h
r60025 r60957 79 79 class DragData { 80 80 public: 81 enum FilenameConversionPolicy { DoNotConvertFilenames, ConvertFilenames }; 82 81 83 #if PLATFORM(MAC) 82 84 //FIXME: In the future the WebKit functions provided by the helper class should be moved into WebCore, … … 93 95 DragOperation draggingSourceOperationMask() const { return m_draggingSourceOperationMask; } 94 96 PassRefPtr<Clipboard> createClipboard(ClipboardAccessPolicy) const; 95 bool containsURL( ) const;97 bool containsURL(FilenameConversionPolicy filenamePolicy = ConvertFilenames) const; 96 98 bool containsPlainText() const; 97 99 bool containsCompatibleContent() const; 98 String asURL( String* title = 0) const;100 String asURL(FilenameConversionPolicy filenamePolicy = ConvertFilenames, String* title = 0) const; 99 101 String asPlainText() const; 100 102 void asFilenames(Vector<String>&) const; -
trunk/WebCore/platform/android/DragDataAndroid.cpp
r44580 r60957 69 69 } 70 70 71 bool DragData::containsURL( ) const71 bool DragData::containsURL(FilenameConversionPolicy) const 72 72 { 73 73 return false; 74 74 } 75 75 76 String DragData::asURL( String*) const76 String DragData::asURL(FilenameConversionPolicy, String*) const 77 77 { 78 78 return String(); -
trunk/WebCore/platform/chromium/DragDataChromium.cpp
r59689 r60957 57 57 } 58 58 59 bool DragData::containsURL( ) const59 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 60 60 { 61 return !asURL( ).isEmpty();61 return !asURL(filenamePolicy).isEmpty(); 62 62 } 63 63 64 String DragData::asURL( String* title) const64 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 65 65 { 66 66 String url; 67 67 if (m_platformDragData->hasValidURL()) 68 68 url = m_platformDragData->getURL().string(); 69 else if ( !m_platformDragData->filenames.isEmpty()) {69 else if (filenamePolicy == ConvertFilenames && !m_platformDragData->filenames.isEmpty()) { 70 70 String fileName = m_platformDragData->filenames[0]; 71 71 fileName = ChromiumBridge::getAbsolutePath(fileName); -
trunk/WebCore/platform/efl/DragDataEfl.cpp
r55342 r60957 72 72 } 73 73 74 bool DragData::containsURL( ) const74 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 75 75 { 76 76 return false; 77 77 } 78 78 79 String DragData::asURL( String* title) const79 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 80 80 { 81 81 return String(); -
trunk/WebCore/platform/gtk/DragDataGtk.cpp
r34554 r60957 68 68 } 69 69 70 bool DragData::containsURL( ) const70 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 71 71 { 72 72 return false; 73 73 } 74 74 75 String DragData::asURL( String* title) const75 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 76 76 { 77 77 return String(); -
trunk/WebCore/platform/haiku/DragDataHaiku.cpp
r47068 r60957 87 87 } 88 88 89 bool DragData::containsURL( ) const89 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 90 90 { 91 91 notImplemented(); … … 93 93 } 94 94 95 String DragData::asURL( String* title) const95 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 96 96 { 97 97 notImplemented(); -
trunk/WebCore/platform/mac/DragDataMac.mm
r48426 r60957 114 114 } 115 115 116 bool DragData::containsURL( ) const116 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 117 117 { 118 return !asURL( ).isEmpty();118 return !asURL(filenamePolicy).isEmpty(); 119 119 } 120 120 121 String DragData::asURL( String* title) const121 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 122 122 { 123 // FIXME: Use filenamePolicy. 124 (void)filenamePolicy; 123 125 return m_pasteboardHelper->urlFromPasteboard([m_platformDragData draggingPasteboard], title); 124 126 } -
trunk/WebCore/platform/qt/DragDataQt.cpp
r60749 r60957 91 91 92 92 // FIXME: Should handle rich text here 93 return asURL( 0);93 return asURL(DoNotConvertFilenames, 0); 94 94 } 95 95 … … 113 113 } 114 114 115 bool DragData::containsURL( ) const115 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 116 116 { 117 // FIXME: Use filenamePolicy. 117 118 if (!m_platformDragData) 118 119 return false; … … 120 121 } 121 122 122 String DragData::asURL( String*) const123 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String*) const 123 124 { 125 // FIXME: Use filenamePolicy. 124 126 if (!m_platformDragData) 125 127 return String(); -
trunk/WebCore/platform/win/ClipboardUtilitiesWin.cpp
r59917 r60957 290 290 } 291 291 292 String getURL(IDataObject* dataObject, bool& success, String* title)292 String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filenamePolicy, bool& success, String* title) 293 293 { 294 294 STGMEDIUM store; … … 312 312 ReleaseStgMedium(&store); 313 313 success = true; 314 } else if (SUCCEEDED(dataObject->GetData(filenameWFormat(), &store))) { 315 //file using unicode 316 wchar_t* data = (wchar_t*)GlobalLock(store.hGlobal); 317 if (data && data[0] && (PathFileExists(data) || PathIsUNC(data))) { 318 RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCharacters(kCFAllocatorDefault, (const UniChar*)data, wcslen(data))); 319 if (urlFromPath(pathAsCFString.get(), url)) { 320 if (title) 321 *title = url; 322 success = true; 314 } else if (filenamePolicy == DragData::ConvertFilenames) { 315 if (SUCCEEDED(dataObject->GetData(filenameWFormat(), &store))) { 316 // file using unicode 317 wchar_t* data = (wchar_t*)GlobalLock(store.hGlobal); 318 if (data && data[0] && (PathFileExists(data) || PathIsUNC(data))) { 319 RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCharacters(kCFAllocatorDefault, (const UniChar*)data, wcslen(data))); 320 if (urlFromPath(pathAsCFString.get(), url)) { 321 if (title) 322 *title = url; 323 success = true; 324 } 323 325 } 326 GlobalUnlock(store.hGlobal); 327 ReleaseStgMedium(&store); 328 } else if (SUCCEEDED(dataObject->GetData(filenameFormat(), &store))) { 329 // filename using ascii 330 char* data = (char*)GlobalLock(store.hGlobal); 331 if (data && data[0] && (PathFileExistsA(data) || PathIsUNCA(data))) { 332 RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCString(kCFAllocatorDefault, data, kCFStringEncodingASCII)); 333 if (urlFromPath(pathAsCFString.get(), url)) { 334 if (title) 335 *title = url; 336 success = true; 337 } 338 } 339 GlobalUnlock(store.hGlobal); 340 ReleaseStgMedium(&store); 324 341 } 325 GlobalUnlock(store.hGlobal);326 ReleaseStgMedium(&store);327 } else if (SUCCEEDED(dataObject->GetData(filenameFormat(), &store))) {328 //filename using ascii329 char* data = (char*)GlobalLock(store.hGlobal);330 if (data && data[0] && (PathFileExistsA(data) || PathIsUNCA(data))) {331 RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCString(kCFAllocatorDefault, data, kCFStringEncodingASCII));332 if (urlFromPath(pathAsCFString.get(), url)) {333 if (title)334 *title = url;335 success = true;336 }337 }338 GlobalUnlock(store.hGlobal);339 ReleaseStgMedium(&store);340 342 } 341 343 return url; … … 351 353 UChar* data = (UChar*)GlobalLock(store.hGlobal); 352 354 text = String(data); 353 GlobalUnlock(store.hGlobal); 355 GlobalUnlock(store.hGlobal); 354 356 ReleaseStgMedium(&store); 355 357 success = true; … … 358 360 char* data = (char*)GlobalLock(store.hGlobal); 359 361 text = String(data); 360 GlobalUnlock(store.hGlobal); 362 GlobalUnlock(store.hGlobal); 361 363 ReleaseStgMedium(&store); 362 364 success = true; 363 365 } else { 364 //If a file is dropped on the window, it does not provide either of the 365 //plain text formats, so here we try to forcibly get a url. 366 text = getURL(dataObject, success); 366 // FIXME: Originally, we called getURL() here because dragging and dropping files doesn't 367 // populate the drag with text data. Per https://bugs.webkit.org/show_bug.cgi?id=38826, this 368 // is undesirable, so maybe this line can be removed. 369 text = getURL(dataObject, DragData::DoNotConvertFilenames, success); 367 370 success = true; 368 371 } -
trunk/WebCore/platform/win/ClipboardUtilitiesWin.h
r59917 r60957 62 62 PassRefPtr<DocumentFragment> fragmentFromCF_HTML(Document*, const String& cf_html); 63 63 64 String getURL(IDataObject*, bool& success, String* title = 0);64 String getURL(IDataObject*, DragData::FilenameConversionPolicy, bool& success, String* title = 0); 65 65 String getPlainText(IDataObject*, bool& success); 66 66 … … 68 68 69 69 #endif // ClipboardUtilitiesWin_h 70 -
trunk/WebCore/platform/win/ClipboardWin.cpp
r56825 r60957 500 500 return getPlainText(m_dataObject.get(), success); 501 501 else if (dataType == ClipboardDataTypeURL) 502 return getURL(m_dataObject.get(), success);502 return getURL(m_dataObject.get(), DragData::DoNotConvertFilenames, success); 503 503 504 504 return ""; -
trunk/WebCore/platform/win/DragDataWin.cpp
r34544 r60957 45 45 } 46 46 47 bool DragData::containsURL( ) const47 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 48 48 { 49 49 return SUCCEEDED(m_platformDragData->QueryGetData(urlWFormat())) 50 50 || SUCCEEDED(m_platformDragData->QueryGetData(urlFormat())) 51 || SUCCEEDED(m_platformDragData->QueryGetData(filenameWFormat())) 52 || SUCCEEDED(m_platformDragData->QueryGetData(filenameFormat())); 51 || (filenamePolicy == ConvertFilenames 52 && (SUCCEEDED(m_platformDragData->QueryGetData(filenameWFormat())) 53 || SUCCEEDED(m_platformDragData->QueryGetData(filenameFormat())))); 53 54 } 54 55 55 String DragData::asURL( String* title) const56 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 56 57 { 57 58 bool success; 58 return getURL(m_platformDragData, success, title);59 return getURL(m_platformDragData, filenamePolicy, success, title); 59 60 } 60 61 -
trunk/WebCore/platform/wince/DragDataWince.cpp
r47137 r60957 33 33 } 34 34 35 bool DragData::containsURL( ) const35 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 36 36 { 37 37 return false; 38 38 } 39 39 40 String DragData::asURL( String* title) const40 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 41 41 { 42 42 return String(); -
trunk/WebCore/platform/wx/DragDataWx.cpp
r34554 r60957 77 77 } 78 78 79 bool DragData::containsURL( ) const79 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const 80 80 { 81 81 return false; 82 82 } 83 83 84 String DragData::asURL( String* title) const84 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const 85 85 { 86 86 return String();
Note: See TracChangeset
for help on using the changeset viewer.