diff options
author | jungshik@google.com <jungshik@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 22:51:50 +0000 |
---|---|---|
committer | jungshik@google.com <jungshik@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 22:51:50 +0000 |
commit | c9825a4d401b014d89534020c8cf93302efd398c (patch) | |
tree | dcc654d12d5f538c2507f5f0b920cac091fe1a89 /chrome/browser/download/download_manager.cc | |
parent | 36c165e203d4ddf415c29b865b4c13f0b9f32d38 (diff) | |
download | chromium_src-c9825a4d401b014d89534020c8cf93302efd398c.zip chromium_src-c9825a4d401b014d89534020c8cf93302efd398c.tar.gz chromium_src-c9825a4d401b014d89534020c8cf93302efd398c.tar.bz2 |
This CL makes Chrome on par with Firefox in terms of 'GetSuggestedFilename' for file download via context-menu.
For a download initiated with a click on a link in a web page, a webkit-side change is necessary, which will be done later.
Add a field (referrer_charset) to URLRequestContext and DownloadCreateInfo. It's set to the character encoding of a document where the download request originates from when it's known (download initiated via "save as" in the context menu).
If it's not known (a download initiated by clicking on a download link or typing a url directly to the omnibox), it's initialized to the default character encoding in the user's preference. I guess this is marginally better than leaving it empty (in that case, step 2b below will be skipped and step 2c will be taken) because a user has a better control over how raw 8bit characters in C-D are interpreted (especially on Windows where a reboot is required to change the OS default codepage).
This is later passed to GetSuggestedFilename and used as one of fallback encodings (1. UTF-8, 2. origin_charset, 3. default OS codepage). With this change, we support the following:
1. RFC 2047
2. Raw-8bit-characters : a. UTF-8, b. origin_charset, c. default os codepage.
3. %-escaped UTF-8.
In this CL, for #3, I didn't add a fallback similar to one used for #2. If necessary, it can be added easily. New entries are added to 3 existing tests. What's previously not covered (raw 8bit Content-Disposition header) is now covered in all 3 tests.
BUG=1148
TEST=net unit test: NetUtilTest.GetFileNameFromCD
NetUtilTest.GetSuggestedFilename
unittest : DownloadManagerTest.TestDownloadFilename
Review URL: http://codereview.chromium.org/83002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15113 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download/download_manager.cc')
-rw-r--r-- | chrome/browser/download/download_manager.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc index 5a5649c..0fc444f 100644 --- a/chrome/browser/download/download_manager.cc +++ b/chrome/browser/download/download_manager.cc @@ -1085,8 +1085,10 @@ int DownloadManager::RemoveAllDownloads() { // download. void DownloadManager::DownloadUrl(const GURL& url, const GURL& referrer, + const std::string& referrer_charset, WebContents* web_contents) { DCHECK(web_contents); + request_context_->set_referrer_charset(referrer_charset); file_manager_->DownloadUrl(url, referrer, web_contents->process()->pid(), @@ -1179,6 +1181,7 @@ void DownloadManager::GenerateFilename(DownloadCreateInfo* info, *generated_name = FilePath::FromWStringHack( net::GetSuggestedFilename(GURL(info->url), info->content_disposition, + info->referrer_charset, L"download")); DCHECK(!generated_name->empty()); |