eca19d3de68444633683b71de1584f86cd433dde
[platform/framework/web/crosswalk.git] / src / chrome / browser / download / download_prefs.h
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   void ResetAutoOpen();
77
78  private:
79   void SaveAutoOpenState();
80
81   Profile* profile_;
82
83   BooleanPrefMember prompt_for_download_;
84   FilePathPrefMember download_path_;
85   FilePathPrefMember save_file_path_;
86   IntegerPrefMember save_file_type_;
87
88   // Set of file extensions to open at download completion.
89   struct AutoOpenCompareFunctor {
90     bool operator()(const base::FilePath::StringType& a,
91                     const base::FilePath::StringType& b) const;
92   };
93   typedef std::set<base::FilePath::StringType,
94                    AutoOpenCompareFunctor> AutoOpenSet;
95   AutoOpenSet auto_open_;
96
97   DISALLOW_COPY_AND_ASSIGN(DownloadPrefs);
98 };
99
100 #endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_PREFS_H_