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

Side by Side Diff: chrome/browser/download/download_prefs.cc

Issue 2943763002: Add a new group policy to disable safe browsing for files downloaded from trusted sources. (Closed)
Patch Set: Fix an XML goof Created 3 years, 5 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
OLDNEW
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 "chrome/browser/download/download_prefs.h" 5 #include "chrome/browser/download/download_prefs.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/bind_helpers.h" 13 #include "base/bind_helpers.h"
14 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
15 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/macros.h" 17 #include "base/macros.h"
18 #include "base/path_service.h" 18 #include "base/path_service.h"
19 #include "base/strings/string_split.h" 19 #include "base/strings/string_split.h"
20 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
21 #include "base/strings/sys_string_conversions.h" 21 #include "base/strings/sys_string_conversions.h"
22 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
23 #include "build/build_config.h" 23 #include "build/build_config.h"
24 #include "chrome/browser/download/chrome_download_manager_delegate.h" 24 #include "chrome/browser/download/chrome_download_manager_delegate.h"
25 #include "chrome/browser/download/download_target_determiner.h" 25 #include "chrome/browser/download/download_target_determiner.h"
26 #include "chrome/browser/download/trusted_sources_manager.h"
26 #include "chrome/browser/profiles/profile.h" 27 #include "chrome/browser/profiles/profile.h"
27 #include "chrome/browser/profiles/profile_manager.h" 28 #include "chrome/browser/profiles/profile_manager.h"
28 #include "chrome/common/chrome_paths.h" 29 #include "chrome/common/chrome_paths.h"
29 #include "chrome/common/pref_names.h" 30 #include "chrome/common/pref_names.h"
30 #include "chrome/common/safe_browsing/file_type_policies.h" 31 #include "chrome/common/safe_browsing/file_type_policies.h"
31 #include "components/pref_registry/pref_registry_syncable.h" 32 #include "components/pref_registry/pref_registry_syncable.h"
32 #include "components/prefs/pref_service.h" 33 #include "components/prefs/pref_service.h"
33 #include "content/public/browser/browser_thread.h" 34 #include "content/public/browser/browser_thread.h"
35 #include "content/public/browser/download_item.h"
34 #include "content/public/browser/download_manager.h" 36 #include "content/public/browser/download_manager.h"
35 #include "content/public/browser/save_page_type.h" 37 #include "content/public/browser/save_page_type.h"
36 38
37 #if defined(OS_CHROMEOS) 39 #if defined(OS_CHROMEOS)
38 #include "chrome/browser/chromeos/drive/drive_integration_service.h" 40 #include "chrome/browser/chromeos/drive/drive_integration_service.h"
39 #include "chrome/browser/chromeos/drive/file_system_util.h" 41 #include "chrome/browser/chromeos/drive/file_system_util.h"
40 #include "chrome/browser/chromeos/file_manager/path_util.h" 42 #include "chrome/browser/chromeos/file_manager/path_util.h"
41 #endif 43 #endif
42 44
43 #if defined(OS_WIN) 45 #if defined(OS_WIN)
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 prefs->SetFilePath(prefs::kDownloadDefaultDirectory, 151 prefs->SetFilePath(prefs::kDownloadDefaultDirectory,
150 GetDefaultDownloadDirectoryForProfile()); 152 GetDefaultDownloadDirectoryForProfile());
151 } 153 }
152 prefs->SetBoolean(prefs::kDownloadDirUpgraded, true); 154 prefs->SetBoolean(prefs::kDownloadDirUpgraded, true);
153 } 155 }
154 156
155 prompt_for_download_.Init(prefs::kPromptForDownload, prefs); 157 prompt_for_download_.Init(prefs::kPromptForDownload, prefs);
156 download_path_.Init(prefs::kDownloadDefaultDirectory, prefs); 158 download_path_.Init(prefs::kDownloadDefaultDirectory, prefs);
157 save_file_path_.Init(prefs::kSaveFileDefaultDirectory, prefs); 159 save_file_path_.Init(prefs::kSaveFileDefaultDirectory, prefs);
158 save_file_type_.Init(prefs::kSaveFileType, prefs); 160 save_file_type_.Init(prefs::kSaveFileType, prefs);
161 safebrowsing_for_trusted_sources_enabled_.Init(
162 prefs::kSafeBrowsingForTrustedSourcesEnabled, prefs);
159 download_restriction_.Init(prefs::kDownloadRestrictions, prefs); 163 download_restriction_.Init(prefs::kDownloadRestrictions, prefs);
160 164
161 // We store any file extension that should be opened automatically at 165 // We store any file extension that should be opened automatically at
162 // download completion in this pref. 166 // download completion in this pref.
163 std::string extensions_to_open = 167 std::string extensions_to_open =
164 prefs->GetString(prefs::kDownloadExtensionsToOpen); 168 prefs->GetString(prefs::kDownloadExtensionsToOpen);
165 169
166 for (const auto& extension_string : base::SplitString( 170 for (const auto& extension_string : base::SplitString(
167 extensions_to_open, ":", 171 extensions_to_open, ":",
168 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { 172 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
(...skipping 12 matching lines...) Expand all
181 // IsAllowedToOpenAutomatically() needs a filename. 185 // IsAllowedToOpenAutomatically() needs a filename.
182 base::FilePath filename_with_extension = base::FilePath( 186 base::FilePath filename_with_extension = base::FilePath(
183 base::FilePath::StringType(1, base::FilePath::kExtensionSeparator) + 187 base::FilePath::StringType(1, base::FilePath::kExtensionSeparator) +
184 extension); 188 extension);
185 189
186 // Note that the list of file types that are not allowed to open 190 // Note that the list of file types that are not allowed to open
187 // automatically can change in the future. When the list is tightened, it is 191 // automatically can change in the future. When the list is tightened, it is
188 // expected that some entries in the users' auto open list will get dropped 192 // expected that some entries in the users' auto open list will get dropped
189 // permanently as a result. 193 // permanently as a result.
190 if (FileTypePolicies::GetInstance()->IsAllowedToOpenAutomatically( 194 if (FileTypePolicies::GetInstance()->IsAllowedToOpenAutomatically(
191 filename_with_extension)) 195 filename_with_extension)) {
192 auto_open_.insert(extension); 196 auto_open_.insert(extension);
197 }
193 } 198 }
194 } 199 }
195 200
196 DownloadPrefs::~DownloadPrefs() {} 201 DownloadPrefs::~DownloadPrefs() {}
197 202
198 // static 203 // static
199 void DownloadPrefs::RegisterProfilePrefs( 204 void DownloadPrefs::RegisterProfilePrefs(
200 user_prefs::PrefRegistrySyncable* registry) { 205 user_prefs::PrefRegistrySyncable* registry) {
201 registry->RegisterBooleanPref( 206 registry->RegisterBooleanPref(
202 prefs::kPromptForDownload, 207 prefs::kPromptForDownload,
203 false, 208 false,
204 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 209 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
205 registry->RegisterStringPref(prefs::kDownloadExtensionsToOpen, std::string()); 210 registry->RegisterStringPref(prefs::kDownloadExtensionsToOpen, std::string());
206 registry->RegisterBooleanPref(prefs::kDownloadDirUpgraded, false); 211 registry->RegisterBooleanPref(prefs::kDownloadDirUpgraded, false);
207 registry->RegisterIntegerPref(prefs::kSaveFileType, 212 registry->RegisterIntegerPref(prefs::kSaveFileType,
208 content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML); 213 content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML);
214 registry->RegisterIntegerPref(prefs::kDownloadRestrictions, 0);
215 registry->RegisterBooleanPref(prefs::kSafeBrowsingForTrustedSourcesEnabled,
216 true);
209 217
210 const base::FilePath& default_download_path = GetDefaultDownloadDirectory(); 218 const base::FilePath& default_download_path = GetDefaultDownloadDirectory();
211 registry->RegisterFilePathPref(prefs::kDownloadDefaultDirectory, 219 registry->RegisterFilePathPref(prefs::kDownloadDefaultDirectory,
212 default_download_path); 220 default_download_path);
213 registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory, 221 registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
214 default_download_path); 222 default_download_path);
215 #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) 223 #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
216 registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false); 224 registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
217 #endif 225 #endif
218 } 226 }
(...skipping 19 matching lines...) Expand all
238 download_manager->GetDelegate()); 246 download_manager->GetDelegate());
239 return delegate->download_prefs(); 247 return delegate->download_prefs();
240 } 248 }
241 249
242 // static 250 // static
243 DownloadPrefs* DownloadPrefs::FromBrowserContext( 251 DownloadPrefs* DownloadPrefs::FromBrowserContext(
244 content::BrowserContext* context) { 252 content::BrowserContext* context) {
245 return FromDownloadManager(BrowserContext::GetDownloadManager(context)); 253 return FromDownloadManager(BrowserContext::GetDownloadManager(context));
246 } 254 }
247 255
256 bool DownloadPrefs::IsFromTrustedSource(const content::DownloadItem& item) {
257 if (!trusted_sources_manager_)
258 trusted_sources_manager_.reset(TrustedSourcesManager::Create());
259 return trusted_sources_manager_->IsFromTrustedSource(item.GetURL());
260 }
261
248 base::FilePath DownloadPrefs::DownloadPath() const { 262 base::FilePath DownloadPrefs::DownloadPath() const {
249 #if defined(OS_CHROMEOS) 263 #if defined(OS_CHROMEOS)
250 // If the download path is under /drive, and DriveIntegrationService isn't 264 // If the download path is under /drive, and DriveIntegrationService isn't
251 // available (which it isn't for incognito mode, for instance), use the 265 // available (which it isn't for incognito mode, for instance), use the
252 // default download directory (/Downloads). 266 // default download directory (/Downloads).
253 if (drive::util::IsUnderDriveMountPoint(*download_path_)) { 267 if (drive::util::IsUnderDriveMountPoint(*download_path_)) {
254 drive::DriveIntegrationService* integration_service = 268 drive::DriveIntegrationService* integration_service =
255 drive::DriveIntegrationServiceFactory::FindForProfile(profile_); 269 drive::DriveIntegrationServiceFactory::FindForProfile(profile_);
256 if (!integration_service || !integration_service->is_enabled()) 270 if (!integration_service || !integration_service->is_enabled())
257 return GetDefaultDownloadDirectoryForProfile(); 271 return GetDefaultDownloadDirectoryForProfile();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 return true; 322 return true;
309 #endif 323 #endif
310 324
311 return auto_open_.find(extension) != auto_open_.end(); 325 return auto_open_.find(extension) != auto_open_.end();
312 } 326 }
313 327
314 bool DownloadPrefs::EnableAutoOpenBasedOnExtension( 328 bool DownloadPrefs::EnableAutoOpenBasedOnExtension(
315 const base::FilePath& file_name) { 329 const base::FilePath& file_name) {
316 base::FilePath::StringType extension = file_name.Extension(); 330 base::FilePath::StringType extension = file_name.Extension();
317 if (!FileTypePolicies::GetInstance()->IsAllowedToOpenAutomatically( 331 if (!FileTypePolicies::GetInstance()->IsAllowedToOpenAutomatically(
318 file_name)) 332 file_name)) {
319 return false; 333 return false;
334 }
320 335
321 DCHECK(extension[0] == base::FilePath::kExtensionSeparator); 336 DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
322 extension.erase(0, 1); 337 extension.erase(0, 1);
323 338
324 auto_open_.insert(extension); 339 auto_open_.insert(extension);
325 SaveAutoOpenState(); 340 SaveAutoOpenState();
326 return true; 341 return true;
327 } 342 }
328 343
329 void DownloadPrefs::DisableAutoOpenBasedOnExtension( 344 void DownloadPrefs::DisableAutoOpenBasedOnExtension(
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 extensions.erase(extensions.size() - 1); 396 extensions.erase(extensions.size() - 1);
382 397
383 profile_->GetPrefs()->SetString(prefs::kDownloadExtensionsToOpen, extensions); 398 profile_->GetPrefs()->SetString(prefs::kDownloadExtensionsToOpen, extensions);
384 } 399 }
385 400
386 bool DownloadPrefs::AutoOpenCompareFunctor::operator()( 401 bool DownloadPrefs::AutoOpenCompareFunctor::operator()(
387 const base::FilePath::StringType& a, 402 const base::FilePath::StringType& a,
388 const base::FilePath::StringType& b) const { 403 const base::FilePath::StringType& b) const {
389 return base::FilePath::CompareLessIgnoreCase(a, b); 404 return base::FilePath::CompareLessIgnoreCase(a, b);
390 } 405 }
OLDNEW
« no previous file with comments | « chrome/browser/download/download_prefs.h ('k') | chrome/browser/download/trusted_sources_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698