Index: content/public/browser/child_process_security_policy.h |
diff --git a/content/public/browser/child_process_security_policy.h b/content/public/browser/child_process_security_policy.h |
index 9a2becf0c827c0a435215f4091477a4c7976fba3..7a226563f9d07c6948d0da2c6e01116f883ee073 100644 |
--- a/content/public/browser/child_process_security_policy.h |
+++ b/content/public/browser/child_process_security_policy.h |
@@ -34,11 +34,27 @@ class ChildProcessSecurityPolicy { |
static CONTENT_EXPORT ChildProcessSecurityPolicy* GetInstance(); |
// Web-safe schemes can be requested by any child process. Once a web-safe |
- // scheme has been registered, any child process can request URLs with |
- // that scheme. There is no mechanism for revoking web-safe schemes. |
+ // scheme has been registered, any child process can request URLs whose |
+ // origins use that scheme. There is no mechanism for revoking web-safe |
+ // schemes. |
+ // |
+ // Only call this function if URLs of this scheme are okay to host in |
+ // any ordinary renderer process. |
+ // |
+ // Registering 'your-scheme' as web-safe also causes 'blob:your-scheme://' |
+ // and 'filesystem:your-scheme://' URLs to be considered web-safe. |
virtual void RegisterWebSafeScheme(const std::string& scheme) = 0; |
+ // More restrictive variant of RegisterWebSafeScheme; URLs with this scheme |
+ // may be requested by any child process, but navigations to this scheme may |
+ // only commit in child processes that have been explicitly granted |
+ // permission to do so. |
+ virtual void RegisterWebSafeIsolatedScheme(const std::string& scheme) = 0; |
+ |
// Returns true iff |scheme| has been registered as a web-safe scheme. |
+ // TODO(nick): This function does not have enough information to render |
+ // an appropriate judgment for blob and filesystem URLs; change it |
+ // to accept an URL instead. |
Charlie Reis
2016/09/28 22:07:16
Good call! Can we list a bug number here so we do
ncarter (slow)
2016/09/29 21:01:45
Done.
|
virtual bool IsWebSafeScheme(const std::string& scheme) = 0; |
// This permission grants only read access to a file. |
@@ -58,6 +74,17 @@ class ChildProcessSecurityPolicy { |
// This permission grants delete permission for |dir|. |
virtual void GrantDeleteFrom(int child_id, const base::FilePath& dir) = 0; |
+ // Determine whether the process has the capability to request the URL. |
+ // Before servicing a child process's request for a URL, the content layer |
+ // calls this method to determine whether it is safe. |
+ virtual bool CanRequestURL(int child_id, const GURL& url) = 0; |
Charlie Reis
2016/09/28 22:07:16
Are these only public so tests can call them? I s
ncarter (slow)
2016/09/29 21:01:45
Yes, they're exposed for test. Embedders already c
|
+ |
+ // Whether the process is allowed to commit a document from the given URL. |
+ // This is more restrictive than CanRequestURL, since CanRequestURL allows |
+ // requests that might lead to cross-process navigations or external protocol |
+ // handlers. |
+ virtual bool CanCommitURL(int child_id, const GURL& url) = 0; |
+ |
// These methods verify whether or not the child process has been granted |
// permissions perform these functions on |file|. |