Chromium Code Reviews| Index: content/common/sandbox_mac.h |
| diff --git a/content/common/sandbox_mac.h b/content/common/sandbox_mac.h |
| index 557b4fb7c87671addf373401a8ce39fe1a2dcbd6..12e500fdc0c2d5cb729c3a04cb86bdc0f243fe15 100644 |
| --- a/content/common/sandbox_mac.h |
| +++ b/content/common/sandbox_mac.h |
| @@ -27,38 +27,36 @@ class NSString; |
| namespace content { |
| -// Class representing a substring of the sandbox profile tagged with its type. |
| -class SandboxSubstring { |
| +// This class wraps the C-style sandbox APIs in a class to |
| +// ensure proper initialization and cleanup |
|
Robert Sesek
2015/06/16 23:52:40
nit: Comments should have proper punctuation. Also
Greg K
2015/06/18 20:45:18
Done.
|
| +class CONTENT_EXPORT SandboxCompiler { |
|
Robert Sesek
2015/06/16 23:52:40
Potential future TODO: Move this to //sandbox/mac
Greg K
2015/06/18 20:45:18
Acknowledged.
|
| public: |
| - enum SandboxSubstringType { |
| - PLAIN, // Just a plain string, no escaping necessary. |
| - LITERAL, // Escape for use in (literal ...) expression. |
| - REGEX, // Escape for use in (regex ...) expression. |
| - }; |
| - |
| - SandboxSubstring() {} |
| - |
| - explicit SandboxSubstring(const std::string& value) |
| - : value_(value), |
| - type_(PLAIN) {} |
| - |
| - SandboxSubstring(const std::string& value, SandboxSubstringType type) |
| - : value_(value), |
| - type_(type) {} |
| - |
| - const std::string& value() { return value_; } |
| - SandboxSubstringType type() { return type_; } |
| + // Explicit out-of-line constructor |
|
Robert Sesek
2015/06/16 23:52:40
nit: remove, and line 36. This should be obvious t
Greg K
2015/06/18 20:45:18
Done.
|
| + explicit SandboxCompiler(const std::string& profile_str); |
| + // Explicit out-of-line destructor |
| + ~SandboxCompiler(); |
| + // Initialize the sandbox parameters |
|
Robert Sesek
2015/06/16 23:52:40
When does this method need to be called? Does this
Greg K
2015/06/18 20:45:18
Acknowledged.
|
| + bool Init(); |
|
Robert Sesek
2015/06/16 23:52:40
nit: Place blank lines after each of these methods
Robert Sesek
2015/06/16 23:52:40
Potential idea: Remove Init() entirely, and wait t
Greg K
2015/06/18 20:45:17
Done.
Greg K
2015/06/18 20:45:18
Done.
|
| + // Inserts a boolean into the parameters key/value list |
| + void InsertBooleanParam(const std::string& key, bool value); |
| + // Inserts a string into the parameters key/value list |
| + void InsertStringParam(const std::string& key, const std::string& value); |
| + // Compile and apply the profile, returns 0 on success |
| + int CompileAndApplyProfile(std::string* error); |
| private: |
| - std::string value_; |
| - SandboxSubstringType type_; |
| + // Ensure that the C++ strings are not destroyed while the |
|
Robert Sesek
2015/06/16 23:52:40
"Storage for the string parameters that are used i
Greg K
2015/06/18 20:45:18
Done.
|
| + // parameters vector holds a pointer to their c_str() |
| + std::vector<std::string> strings_; |
| + void* params_; |
|
Robert Sesek
2015/06/16 23:52:40
Document these two members.
Greg K
2015/06/18 20:45:18
Done.
|
| + void* profile_; |
| + const std::string profile_str_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SandboxCompiler); |
| }; |
| class CONTENT_EXPORT Sandbox { |
| public: |
| - // A map of variable name -> string to substitute in its place. |
| - typedef base::hash_map<std::string, SandboxSubstring> |
| - SandboxVariableSubstitions; |
| // Warm up System APIs that empirically need to be accessed before the |
| // sandbox is turned on. |sandbox_type| is the type of sandbox to warm up. |
| @@ -80,58 +78,6 @@ class CONTENT_EXPORT Sandbox { |
| // Returns true if the sandbox has been enabled for the current process. |
| static bool SandboxIsCurrentlyActive(); |
| - // Exposed for testing purposes, used by an accessory function of our tests |
| - // so we can't use FRIEND_TEST. |
| - |
| - // Build the Sandbox command necessary to allow access to a named directory |
| - // indicated by |allowed_dir|. |
| - // Returns a string containing the sandbox profile commands necessary to allow |
| - // access to that directory or nil if an error occured. |
| - |
| - // The header comment for PostProcessSandboxProfile() explains how variable |
| - // substition works in sandbox templates. |
| - // The returned string contains embedded variables. The function fills in |
| - // |substitutions| to contain the values for these variables. |
| - static NSString* BuildAllowDirectoryAccessSandboxString( |
| - const base::FilePath& allowed_dir, |
| - SandboxVariableSubstitions* substitutions); |
| - |
| - // Assemble the final sandbox profile from a template by removing comments |
| - // and substituting variables. |
| - // |
| - // |sandbox_template| is a string which contains 2 entitites to operate on: |
| - // |
| - // - Comments - The sandbox comment syntax is used to make the OS sandbox |
| - // optionally ignore commands it doesn't support. e.g. |
| - // ;10.6_ONLY (foo) |
| - // Where (foo) is some command that is only supported on OS X 10.6. |
| - // The ;10.6_ONLY comment can then be removed from the template to enable |
| - // (foo) as appropriate. |
| - // |
| - // - Variables - denoted by @variable_name@ . These are defined in the |
| - // sandbox template in cases where another string needs to be substituted at |
| - // runtime. e.g. @HOMEDIR_AS_LITERAL@ is substituted at runtime for the user's |
| - // home directory escaped appropriately for a (literal ...) expression. |
| - // |
| - // |comments_to_remove| is a list of NSStrings containing the comments to |
| - // remove. |
| - // |substitutions| is a hash of "variable name" -> "string to substitute". |
| - // Where the replacement string is tagged with information on how it is to be |
| - // escaped e.g. used as part of a regex string or a literal. |
| - // |
| - // On output |final_sandbox_profile_str| contains the final sandbox profile. |
| - // Returns true on success, false otherwise. |
| - static bool PostProcessSandboxProfile( |
| - NSString* in_sandbox_data, |
| - NSArray* comments_to_remove, |
| - SandboxVariableSubstitions& substitutions, |
| - std::string *final_sandbox_profile_str); |
| - |
| - private: |
| - // Returns an (allow file-read-metadata) rule for |allowed_path| and all its |
| - // parent directories. |
| - static NSString* AllowMetadataForPath(const base::FilePath& allowed_path); |
| - |
| // Escape |src_utf8| for use in a plain string variable in a sandbox |
| // configuraton file. On return |dst| is set to the quoted output. |
| // Returns: true on success, false otherwise. |
| @@ -152,6 +98,7 @@ class CONTENT_EXPORT Sandbox { |
| static bool QuoteStringForRegex(const std::string& str_utf8, |
| std::string* dst); |
| + private: |
| // Convert provided path into a "canonical" path matching what the Sandbox |
| // expects i.e. one without symlinks. |
| // This path is not necessarily unique e.g. in the face of hardlinks. |