OLD | NEW |
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/download/download_prefs.h" | 5 #include "chrome/browser/download/download_prefs.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/string_split.h" | 9 #include "base/string_split.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
11 #include "base/sys_string_conversions.h" | 11 #include "base/sys_string_conversions.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "chrome/browser/download/download_extensions.h" | 13 #include "chrome/browser/download/download_extensions.h" |
14 #include "chrome/browser/download/download_util.h" | 14 #include "chrome/browser/download/download_util.h" |
15 #include "chrome/browser/download/save_package.h" | 15 #include "chrome/browser/download/save_package.h" |
16 #include "chrome/browser/prefs/pref_service.h" | 16 #include "chrome/browser/prefs/pref_service.h" |
17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
18 #include "content/browser/browser_thread.h" | 18 #include "content/browser/browser_thread.h" |
19 | 19 |
20 DownloadPrefs::DownloadPrefs(PrefService* prefs) : prefs_(prefs) { | 20 DownloadPrefs::DownloadPrefs(PrefService* prefs) : prefs_(prefs) { |
| 21 next_download_id_.Init(prefs::kNextDownloadId, prefs, NULL); |
21 prompt_for_download_.Init(prefs::kPromptForDownload, prefs, NULL); | 22 prompt_for_download_.Init(prefs::kPromptForDownload, prefs, NULL); |
22 download_path_.Init(prefs::kDownloadDefaultDirectory, prefs, NULL); | 23 download_path_.Init(prefs::kDownloadDefaultDirectory, prefs, NULL); |
23 save_file_type_.Init(prefs::kSaveFileType, prefs, NULL); | 24 save_file_type_.Init(prefs::kSaveFileType, prefs, NULL); |
24 | 25 |
25 // We store any file extension that should be opened automatically at | 26 // We store any file extension that should be opened automatically at |
26 // download completion in this pref. | 27 // download completion in this pref. |
27 std::string extensions_to_open = | 28 std::string extensions_to_open = |
28 prefs->GetString(prefs::kDownloadExtensionsToOpen); | 29 prefs->GetString(prefs::kDownloadExtensionsToOpen); |
29 std::vector<std::string> extensions; | 30 std::vector<std::string> extensions; |
30 base::SplitString(extensions_to_open, ':', &extensions); | 31 base::SplitString(extensions_to_open, ':', &extensions); |
31 | 32 |
32 for (size_t i = 0; i < extensions.size(); ++i) { | 33 for (size_t i = 0; i < extensions.size(); ++i) { |
33 #if defined(OS_POSIX) | 34 #if defined(OS_POSIX) |
34 FilePath path(extensions[i]); | 35 FilePath path(extensions[i]); |
35 #elif defined(OS_WIN) | 36 #elif defined(OS_WIN) |
36 FilePath path(UTF8ToWide(extensions[i])); | 37 FilePath path(UTF8ToWide(extensions[i])); |
37 #endif | 38 #endif |
38 if (!extensions[i].empty() && | 39 if (!extensions[i].empty() && |
39 download_util::GetFileDangerLevel(path) == download_util::NotDangerous) | 40 download_util::GetFileDangerLevel(path) == download_util::NotDangerous) |
40 auto_open_.insert(path.value()); | 41 auto_open_.insert(path.value()); |
41 } | 42 } |
42 } | 43 } |
43 | 44 |
44 DownloadPrefs::~DownloadPrefs() { | 45 DownloadPrefs::~DownloadPrefs() { |
45 SaveAutoOpenState(); | 46 SaveAutoOpenState(); |
46 } | 47 } |
47 | 48 |
48 // static | 49 // static |
49 void DownloadPrefs::RegisterUserPrefs(PrefService* prefs) { | 50 void DownloadPrefs::RegisterUserPrefs(PrefService* prefs) { |
| 51 prefs->RegisterIntegerPref(prefs::kNextDownloadId, |
| 52 0, |
| 53 PrefService::UNSYNCABLE_PREF); |
50 prefs->RegisterBooleanPref(prefs::kPromptForDownload, | 54 prefs->RegisterBooleanPref(prefs::kPromptForDownload, |
51 false, | 55 false, |
52 PrefService::SYNCABLE_PREF); | 56 PrefService::SYNCABLE_PREF); |
53 prefs->RegisterStringPref(prefs::kDownloadExtensionsToOpen, | 57 prefs->RegisterStringPref(prefs::kDownloadExtensionsToOpen, |
54 "", | 58 "", |
55 PrefService::UNSYNCABLE_PREF); | 59 PrefService::UNSYNCABLE_PREF); |
56 prefs->RegisterBooleanPref(prefs::kDownloadDirUpgraded, | 60 prefs->RegisterBooleanPref(prefs::kDownloadDirUpgraded, |
57 false, | 61 false, |
58 PrefService::UNSYNCABLE_PREF); | 62 PrefService::UNSYNCABLE_PREF); |
59 prefs->RegisterIntegerPref(prefs::kSaveFileType, | 63 prefs->RegisterIntegerPref(prefs::kSaveFileType, |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 extension.erase(0, 1); | 132 extension.erase(0, 1); |
129 auto_open_.erase(extension); | 133 auto_open_.erase(extension); |
130 SaveAutoOpenState(); | 134 SaveAutoOpenState(); |
131 } | 135 } |
132 | 136 |
133 void DownloadPrefs::ResetAutoOpen() { | 137 void DownloadPrefs::ResetAutoOpen() { |
134 auto_open_.clear(); | 138 auto_open_.clear(); |
135 SaveAutoOpenState(); | 139 SaveAutoOpenState(); |
136 } | 140 } |
137 | 141 |
| 142 int DownloadPrefs::GetNextId() { |
| 143 int next_id = *next_download_id_; |
| 144 prefs_->SetInteger(prefs::kNextDownloadId, next_id + 1); |
| 145 return next_id; |
| 146 } |
| 147 |
138 void DownloadPrefs::SaveAutoOpenState() { | 148 void DownloadPrefs::SaveAutoOpenState() { |
139 std::string extensions; | 149 std::string extensions; |
140 for (AutoOpenSet::iterator it = auto_open_.begin(); | 150 for (AutoOpenSet::iterator it = auto_open_.begin(); |
141 it != auto_open_.end(); ++it) { | 151 it != auto_open_.end(); ++it) { |
142 #if defined(OS_POSIX) | 152 #if defined(OS_POSIX) |
143 std::string this_extension = *it; | 153 std::string this_extension = *it; |
144 #elif defined(OS_WIN) | 154 #elif defined(OS_WIN) |
145 // TODO(phajdan.jr): Why we're using Sys conversion here, but not in ctor? | 155 // TODO(phajdan.jr): Why we're using Sys conversion here, but not in ctor? |
146 std::string this_extension = base::SysWideToUTF8(*it); | 156 std::string this_extension = base::SysWideToUTF8(*it); |
147 #endif | 157 #endif |
148 extensions += this_extension + ":"; | 158 extensions += this_extension + ":"; |
149 } | 159 } |
150 if (!extensions.empty()) | 160 if (!extensions.empty()) |
151 extensions.erase(extensions.size() - 1); | 161 extensions.erase(extensions.size() - 1); |
152 | 162 |
153 prefs_->SetString(prefs::kDownloadExtensionsToOpen, extensions); | 163 prefs_->SetString(prefs::kDownloadExtensionsToOpen, extensions); |
154 } | 164 } |
155 | 165 |
156 bool DownloadPrefs::AutoOpenCompareFunctor::operator()( | 166 bool DownloadPrefs::AutoOpenCompareFunctor::operator()( |
157 const FilePath::StringType& a, | 167 const FilePath::StringType& a, |
158 const FilePath::StringType& b) const { | 168 const FilePath::StringType& b) const { |
159 return FilePath::CompareLessIgnoreCase(a, b); | 169 return FilePath::CompareLessIgnoreCase(a, b); |
160 } | 170 } |
OLD | NEW |