15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefService; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserContext; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadManager; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Stores all download-related preferences. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadPrefs { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DownloadPrefs(Profile* profile); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~DownloadPrefs(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Returns the default download directory. 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static const base::FilePath& GetDefaultDownloadDirectory(); 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the default download directory for the current profile. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath GetDefaultDownloadDirectoryForProfile() const; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the DownloadPrefs corresponding to the given DownloadManager 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or BrowserContext. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static DownloadPrefs* FromDownloadManager( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadManager* download_manager); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static DownloadPrefs* FromBrowserContext( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath DownloadPath() const; 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetDownloadPath(const base::FilePath& path); 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FilePath SaveFilePath() const; 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetSaveFilePath(const base::FilePath& path); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int save_file_type() const { return *save_file_type_; } 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetSaveFileType(int type); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the prompt_for_download preference has been set and the 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // download location is not managed (which means the user shouldn't be able 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to choose another download location). 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool PromptForDownload() const; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the download path preference is managed. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsDownloadPathManaged() const; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is at least one file extension registered 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for auto-open. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsAutoOpenUsed() const; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if |path| should be opened automatically based on 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |path.Extension()|. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsAutoOpenEnabledBasedOnExtension(const base::FilePath& path) const; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables auto-open based on file extension. Returns true on success. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(phajdan.jr): Add WARN_UNUSED_RESULT here. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool EnableAutoOpenBasedOnExtension(const base::FilePath& file_name); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disables auto-open based on file extension. 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Store the user preference to disk. If |should_open| is true, also disable 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin. 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetShouldOpenPdfInAdobeReader(bool should_open); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Return whether the user prefers to open PDF downloads in Adobe Reader. 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool ShouldOpenPdfInAdobeReader() const; 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetAutoOpen(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SaveAutoOpenState(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BooleanPrefMember prompt_for_download_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePathPrefMember download_path_; 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FilePathPrefMember save_file_path_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember save_file_type_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set of file extensions to open at download completion. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct AutoOpenCompareFunctor { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator()(const base::FilePath::StringType& a, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::StringType& b) const; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::set<base::FilePath::StringType, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutoOpenCompareFunctor> AutoOpenSet; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutoOpenSet auto_open_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool should_open_pdf_in_adobe_reader_; 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadPrefs); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_ 114