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)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_OPTIONS_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_OPTIONS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/storage_browser_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace leveldb {
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Env;
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provides runtime options that may change FileSystem API behavior.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This object is copyable.
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass STORAGE_EXPORT FileSystemOptions {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum ProfileMode {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PROFILE_MODE_NORMAL = 0,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PROFILE_MODE_INCOGNITO
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |profile_mode| specifies if the profile (for this filesystem)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is running in incognito mode (PROFILE_MODE_INCOGNITO) or no
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (PROFILE_MODE_NORMAL).
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |additional_allowed_schemes| specifies schemes that are allowed
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to access FileSystem API in addition to "http" and "https".
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Non-NULL |env_override| overrides internal LevelDB environment.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemOptions(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProfileMode profile_mode,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::vector<std::string>& additional_allowed_schemes,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      leveldb::Env* env_override);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FileSystemOptions();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if it is running in the incognito mode.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_incognito() const { return profile_mode_ == PROFILE_MODE_INCOGNITO; }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the schemes that must be allowed to access FileSystem API
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in addition to standard "http" and "https".
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (e.g. If the --allow-file-access-from-files option is given in chrome
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "file" scheme will also need to be allowed).
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::vector<std::string>& additional_allowed_schemes() const {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return additional_allowed_schemes_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  leveldb::Env* env_override() const { return env_override_; }
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const ProfileMode profile_mode_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::vector<std::string> additional_allowed_schemes_;
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  leveldb::Env* env_override_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_OPTIONS_H_
63