OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/download/download_manager_impl.h" | 5 #include "content/browser/download/download_manager_impl.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "net/base/load_flags.h" | 49 #include "net/base/load_flags.h" |
50 #include "net/base/request_priority.h" | 50 #include "net/base/request_priority.h" |
51 #include "net/base/upload_bytes_element_reader.h" | 51 #include "net/base/upload_bytes_element_reader.h" |
52 #include "net/log/net_log_source_type.h" | 52 #include "net/log/net_log_source_type.h" |
53 #include "net/log/net_log_with_source.h" | 53 #include "net/log/net_log_with_source.h" |
54 #include "net/traffic_annotation/network_traffic_annotation.h" | 54 #include "net/traffic_annotation/network_traffic_annotation.h" |
55 #include "net/url_request/url_request_context.h" | 55 #include "net/url_request/url_request_context.h" |
56 #include "storage/browser/blob/blob_url_request_job_factory.h" | 56 #include "storage/browser/blob/blob_url_request_job_factory.h" |
57 #include "url/origin.h" | 57 #include "url/origin.h" |
58 | 58 |
| 59 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 60 #include "base/nix/xdg_util.h" |
| 61 #endif |
| 62 |
59 namespace content { | 63 namespace content { |
60 namespace { | 64 namespace { |
61 | 65 |
62 std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload( | 66 std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload( |
63 std::unique_ptr<DownloadUrlParameters> params, | 67 std::unique_ptr<DownloadUrlParameters> params, |
64 content::ResourceContext* resource_context, | 68 content::ResourceContext* resource_context, |
65 uint32_t download_id, | 69 uint32_t download_id, |
66 base::WeakPtr<DownloadManagerImpl> download_manager) { | 70 base::WeakPtr<DownloadManagerImpl> download_manager) { |
67 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 71 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
68 | 72 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 const base::FilePath& path, | 173 const base::FilePath& path, |
170 const GURL& url, | 174 const GURL& url, |
171 const std::string& mime_type, | 175 const std::string& mime_type, |
172 std::unique_ptr<DownloadRequestHandleInterface> request_handle, | 176 std::unique_ptr<DownloadRequestHandleInterface> request_handle, |
173 const net::NetLogWithSource& net_log) override { | 177 const net::NetLogWithSource& net_log) override { |
174 return new DownloadItemImpl(delegate, download_id, path, url, mime_type, | 178 return new DownloadItemImpl(delegate, download_id, path, url, mime_type, |
175 std::move(request_handle), net_log); | 179 std::move(request_handle), net_log); |
176 } | 180 } |
177 }; | 181 }; |
178 | 182 |
| 183 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 184 base::FilePath GetTemporaryDownloadDirectory() { |
| 185 std::unique_ptr<base::Environment> env(base::Environment::Create()); |
| 186 return base::nix::GetXDGDirectory(env.get(), "XDG_DATA_HOME", ".local/share"); |
| 187 } |
| 188 #endif |
| 189 |
179 } // namespace | 190 } // namespace |
180 | 191 |
181 DownloadManagerImpl::DownloadManagerImpl(net::NetLog* net_log, | 192 DownloadManagerImpl::DownloadManagerImpl(net::NetLog* net_log, |
182 BrowserContext* browser_context) | 193 BrowserContext* browser_context) |
183 : item_factory_(new DownloadItemFactoryImpl()), | 194 : item_factory_(new DownloadItemFactoryImpl()), |
184 file_factory_(new DownloadFileFactory()), | 195 file_factory_(new DownloadFileFactory()), |
185 shutdown_needed_(true), | 196 shutdown_needed_(true), |
186 initialized_(false), | 197 initialized_(false), |
187 browser_context_(browser_context), | 198 browser_context_(browser_context), |
188 delegate_(nullptr), | 199 delegate_(nullptr), |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 // The ByteStreamReader lives and dies on the FILE thread. | 365 // The ByteStreamReader lives and dies on the FILE thread. |
355 if (info->result == DOWNLOAD_INTERRUPT_REASON_NONE) | 366 if (info->result == DOWNLOAD_INTERRUPT_REASON_NONE) |
356 BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE, | 367 BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE, |
357 stream.release()); | 368 stream.release()); |
358 return; | 369 return; |
359 } | 370 } |
360 download = item_iterator->second.get(); | 371 download = item_iterator->second.get(); |
361 } | 372 } |
362 | 373 |
363 base::FilePath default_download_directory; | 374 base::FilePath default_download_directory; |
| 375 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 376 // TODO(thomasanderson): Remove this when all Linux distros with |
| 377 // versions of GTK lower than 3.14.7 are no longer supported. This |
| 378 // should happen when support for Ubuntu Trusty and Debian Jessie |
| 379 // are removed. |
| 380 default_download_directory = GetTemporaryDownloadDirectory(); |
| 381 #else |
364 if (delegate_) { | 382 if (delegate_) { |
365 base::FilePath website_save_directory; // Unused | 383 base::FilePath website_save_directory; // Unused |
366 bool skip_dir_check = false; // Unused | 384 bool skip_dir_check = false; // Unused |
367 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, | 385 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, |
368 &default_download_directory, &skip_dir_check); | 386 &default_download_directory, &skip_dir_check); |
369 } | 387 } |
| 388 #endif |
370 | 389 |
371 std::unique_ptr<DownloadFile> download_file; | 390 std::unique_ptr<DownloadFile> download_file; |
372 | 391 |
373 if (info->result == DOWNLOAD_INTERRUPT_REASON_NONE) { | 392 if (info->result == DOWNLOAD_INTERRUPT_REASON_NONE) { |
374 DCHECK(stream.get()); | 393 DCHECK(stream.get()); |
375 download_file.reset(file_factory_->CreateFile( | 394 download_file.reset(file_factory_->CreateFile( |
376 std::move(info->save_info), default_download_directory, | 395 std::move(info->save_info), default_download_directory, |
377 std::move(stream), download->GetNetLogWithSource(), | 396 std::move(stream), download->GetNetLogWithSource(), |
378 download->DestinationObserverAsWeakPtr())); | 397 download->DestinationObserverAsWeakPtr())); |
379 } | 398 } |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 if (delegate_) | 781 if (delegate_) |
763 delegate_->OpenDownload(download); | 782 delegate_->OpenDownload(download); |
764 } | 783 } |
765 | 784 |
766 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { | 785 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { |
767 if (delegate_) | 786 if (delegate_) |
768 delegate_->ShowDownloadInShell(download); | 787 delegate_->ShowDownloadInShell(download); |
769 } | 788 } |
770 | 789 |
771 } // namespace content | 790 } // namespace content |
OLD | NEW |