Home | History | Annotate | Download | only in download
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_
      6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_
      7 
      8 #include <set>
      9 
     10 #include "base/files/file_path.h"
     11 #include "base/prefs/pref_member.h"
     12 
     13 class PrefService;
     14 class Profile;
     15 
     16 namespace content {
     17 class BrowserContext;
     18 class DownloadManager;
     19 }
     20 
     21 namespace user_prefs {
     22 class PrefRegistrySyncable;
     23 }
     24 
     25 // Stores all download-related preferences.
     26 class DownloadPrefs {
     27  public:
     28   explicit DownloadPrefs(Profile* profile);
     29   ~DownloadPrefs();
     30 
     31   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     32 
     33   // Returns the default download directory.
     34   static const base::FilePath& GetDefaultDownloadDirectory();
     35 
     36   // Returns the default download directory for the current profile.
     37   base::FilePath GetDefaultDownloadDirectoryForProfile() const;
     38 
     39   // Returns the DownloadPrefs corresponding to the given DownloadManager
     40   // or BrowserContext.
     41   static DownloadPrefs* FromDownloadManager(
     42       content::DownloadManager* download_manager);
     43   static DownloadPrefs* FromBrowserContext(
     44       content::BrowserContext* browser_context);
     45 
     46   base::FilePath DownloadPath() const;
     47   void SetDownloadPath(const base::FilePath& path);
     48   base::FilePath SaveFilePath() const;
     49   void SetSaveFilePath(const base::FilePath& path);
     50   int save_file_type() const { return *save_file_type_; }
     51   void SetSaveFileType(int type);
     52 
     53   // Returns true if the prompt_for_download preference has been set and the
     54   // download location is not managed (which means the user shouldn't be able
     55   // to choose another download location).
     56   bool PromptForDownload() const;
     57 
     58   // Returns true if the download path preference is managed.
     59   bool IsDownloadPathManaged() const;
     60 
     61   // Returns true if there is at least one file extension registered
     62   // for auto-open.
     63   bool IsAutoOpenUsed() const;
     64 
     65   // Returns true if |path| should be opened automatically based on
     66   // |path.Extension()|.
     67   bool IsAutoOpenEnabledBasedOnExtension(const base::FilePath& path) const;
     68 
     69   // Enables auto-open based on file extension. Returns true on success.
     70   // TODO(phajdan.jr): Add WARN_UNUSED_RESULT here.
     71   bool EnableAutoOpenBasedOnExtension(const base::FilePath& file_name);
     72 
     73   // Disables auto-open based on file extension.
     74   void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
     75 
     76 #if defined(OS_WIN)
     77   // Store the user preference to disk. If |should_open| is true, also disable
     78   // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
     79   void SetShouldOpenPdfInAdobeReader(bool should_open);
     80 
     81   // Return whether the user prefers to open PDF downloads in Adobe Reader.
     82   bool ShouldOpenPdfInAdobeReader() const;
     83 #endif
     84 
     85   void ResetAutoOpen();
     86 
     87  private:
     88   void SaveAutoOpenState();
     89 
     90   Profile* profile_;
     91 
     92   BooleanPrefMember prompt_for_download_;
     93   FilePathPrefMember download_path_;
     94   FilePathPrefMember save_file_path_;
     95   IntegerPrefMember save_file_type_;
     96 
     97   // Set of file extensions to open at download completion.
     98   struct AutoOpenCompareFunctor {
     99     bool operator()(const base::FilePath::StringType& a,
    100                     const base::FilePath::StringType& b) const;
    101   };
    102   typedef std::set<base::FilePath::StringType,
    103                    AutoOpenCompareFunctor> AutoOpenSet;
    104   AutoOpenSet auto_open_;
    105 
    106 #if defined(OS_WIN)
    107   bool should_open_pdf_in_adobe_reader_;
    108 #endif
    109 
    110   DISALLOW_COPY_AND_ASSIGN(DownloadPrefs);
    111 };
    112 
    113 #endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_
    114