1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef nsAppFileLocationProvider_h
8 #define nsAppFileLocationProvider_h
9 
10 #include "nsIDirectoryService.h"
11 #include "nsCOMPtr.h"
12 #include "mozilla/Attributes.h"
13 
14 class nsIFile;
15 
16 //*****************************************************************************
17 // class nsAppFileLocationProvider
18 //*****************************************************************************
19 
20 class nsAppFileLocationProvider final : public nsIDirectoryServiceProvider2 {
21  public:
22   nsAppFileLocationProvider();
23 
24   NS_DECL_THREADSAFE_ISUPPORTS
25   NS_DECL_NSIDIRECTORYSERVICEPROVIDER
26   NS_DECL_NSIDIRECTORYSERVICEPROVIDER2
27 
28  private:
29   ~nsAppFileLocationProvider() = default;
30 
31  protected:
32   nsresult CloneMozBinDirectory(nsIFile** aLocalFile);
33   /**
34    * Get the product directory. This is a user-specific directory for storing
35    * application settings (e.g. the Application Data directory on windows
36    * systems).
37    * @param aLocal If true, should try to get a directory that is only stored
38    *               locally (ie not transferred with roaming profiles)
39    */
40   nsresult GetProductDirectory(nsIFile** aLocalFile, bool aLocal = false);
41   nsresult GetDefaultUserProfileRoot(nsIFile** aLocalFile, bool aLocal = false);
42 
43   nsCOMPtr<nsIFile> mMozBinDirectory;
44 };
45 
46 #endif
47