Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: chrome/browser/ui/views/tab_contents/tab_contents_drag_win.cc

Issue 7005011: Fix bug 79905: Drag and drop of "DownloadURL" type ignores specified filename for data URLs. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/gtk/tab_contents_drag_source.cc ('k') | net/base/net_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/tab_contents/tab_contents_drag_win.h" 5 #include "chrome/browser/ui/views/tab_contents/tab_contents_drag_win.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 string16 mime_type; 189 string16 mime_type;
190 FilePath file_name; 190 FilePath file_name;
191 GURL download_url; 191 GURL download_url;
192 if (!drag_download_util::ParseDownloadMetadata(drop_data.download_metadata, 192 if (!drag_download_util::ParseDownloadMetadata(drop_data.download_metadata,
193 &mime_type, 193 &mime_type,
194 &file_name, 194 &file_name,
195 &download_url)) 195 &download_url))
196 return; 196 return;
197 197
198 // Generate the download filename. 198 // Generate the download filename.
199 std::string content_disposition =
200 "attachment; filename=" + UTF16ToUTF8(file_name.value());
201 FilePath generated_file_name; 199 FilePath generated_file_name;
202 download_util::GenerateFileName(download_url, 200 download_util::GenerateFileNameFromSuggestedName(
203 content_disposition, 201 download_url,
204 std::string(), 202 UTF16ToUTF8(file_name.value()),
205 UTF16ToUTF8(mime_type), 203 UTF16ToUTF8(mime_type),
206 &generated_file_name); 204 &generated_file_name);
207 205
208 // Provide the data as file (CF_HDROP). A temporary download file with the 206 // Provide the data as file (CF_HDROP). A temporary download file with the
209 // Zone.Identifier ADS (Alternate Data Stream) attached will be created. 207 // Zone.Identifier ADS (Alternate Data Stream) attached will be created.
210 linked_ptr<net::FileStream> empty_file_stream; 208 linked_ptr<net::FileStream> empty_file_stream;
211 scoped_refptr<DragDownloadFile> download_file = 209 scoped_refptr<DragDownloadFile> download_file =
212 new DragDownloadFile(generated_file_name, 210 new DragDownloadFile(generated_file_name,
213 empty_file_stream, 211 empty_file_stream,
214 download_url, 212 download_url,
215 page_url, 213 page_url,
216 page_encoding, 214 page_encoding,
217 view_->GetTabContents()); 215 view_->GetTabContents());
218 ui::OSExchangeData::DownloadFileInfo file_download(FilePath(), 216 ui::OSExchangeData::DownloadFileInfo file_download(FilePath(),
219 download_file.get()); 217 download_file.get());
220 data->SetDownloadFileInfo(file_download); 218 data->SetDownloadFileInfo(file_download);
221 219
222 // Enable asynchronous operation. 220 // Enable asynchronous operation.
223 ui::OSExchangeDataProviderWin::GetIAsyncOperation(*data)->SetAsyncMode(TRUE); 221 ui::OSExchangeDataProviderWin::GetIAsyncOperation(*data)->SetAsyncMode(TRUE);
224 } 222 }
225 223
226 void TabContentsDragWin::PrepareDragForFileContents( 224 void TabContentsDragWin::PrepareDragForFileContents(
227 const WebDropData& drop_data, ui::OSExchangeData* data) { 225 const WebDropData& drop_data, ui::OSExchangeData* data) {
228 // Images without ALT text will only have a file extension so we need to 226 // Images without ALT text will only have a file extension so we need to
229 // synthesize one from the provided extension and URL. 227 // synthesize one from the provided extension and URL.
230 FilePath file_name(drop_data.file_description_filename); 228 FilePath file_name(drop_data.file_description_filename);
231 file_name = file_name.BaseName().RemoveExtension(); 229 file_name = file_name.BaseName().RemoveExtension();
232 if (file_name.value().empty()) { 230 if (file_name.value().empty()) {
233 // Retrieve the name from the URL. 231 // Retrieve the name from the URL.
234 file_name = FilePath( 232 file_name = FilePath(
235 net::GetSuggestedFilename(drop_data.url, "", "", string16())); 233 net::GetSuggestedFilename(drop_data.url, "", "", "", string16()));
236 if (file_name.value().size() + drop_data.file_extension.size() + 1 > 234 if (file_name.value().size() + drop_data.file_extension.size() + 1 >
237 MAX_PATH) { 235 MAX_PATH) {
238 file_name = FilePath(file_name.value().substr( 236 file_name = FilePath(file_name.value().substr(
239 0, MAX_PATH - drop_data.file_extension.size() - 2)); 237 0, MAX_PATH - drop_data.file_extension.size() - 2));
240 } 238 }
241 } 239 }
242 file_name = file_name.ReplaceExtension(drop_data.file_extension); 240 file_name = file_name.ReplaceExtension(drop_data.file_extension);
243 data->SetFileContents(file_name, drop_data.file_contents); 241 data->SetFileContents(file_name, drop_data.file_contents);
244 } 242 }
245 243
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 357
360 void TabContentsDragWin::OnDataObjectDisposed() { 358 void TabContentsDragWin::OnDataObjectDisposed() {
361 DCHECK(drag_drop_thread_id_ == base::PlatformThread::CurrentId()); 359 DCHECK(drag_drop_thread_id_ == base::PlatformThread::CurrentId());
362 360
363 // The drag-and-drop thread is only closed after OLE is done with 361 // The drag-and-drop thread is only closed after OLE is done with
364 // DataObjectImpl. 362 // DataObjectImpl.
365 BrowserThread::PostTask( 363 BrowserThread::PostTask(
366 BrowserThread::UI, FROM_HERE, 364 BrowserThread::UI, FROM_HERE,
367 NewRunnableMethod(this, &TabContentsDragWin::CloseThread)); 365 NewRunnableMethod(this, &TabContentsDragWin::CloseThread));
368 } 366 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/tab_contents_drag_source.cc ('k') | net/base/net_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698