| Index: content/browser/child_process_security_policy_impl.h
|
| diff --git a/content/browser/child_process_security_policy_impl.h b/content/browser/child_process_security_policy_impl.h
|
| index 82a5e818a4a2e10bb72ca6e312f31d0b9088ce0a..70dcca64a9ec3671c87fe115d55fa52444256173 100644
|
| --- a/content/browser/child_process_security_policy_impl.h
|
| +++ b/content/browser/child_process_security_policy_impl.h
|
| @@ -209,17 +209,21 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
|
| // scheme+host+port tuple rather than scheme and eTLD+1 will be used.
|
| // SiteInstances for these origins will also use the full origin as site URL.
|
| //
|
| + // Subdomains of an isolated origin are considered to be part of that
|
| + // origin's site. For example, if https://isolated.foo.com is added as an
|
| + // isolated origin, then https://bar.isolated.foo.com will be considered part
|
| + // of the site for https://isolated.foo.com.
|
| + //
|
| // Note that |origin| must not be unique. URLs that render with
|
| // unique origins, such as data: URLs, are not supported. Suborigins (see
|
| // https://w3c.github.io/webappsec-suborigins/ -- not to be confused with
|
| // subdomains) and non-standard schemes are also not supported. Sandboxed
|
| - // frames (e.g., <iframe sandbox>)
|
| - // *are* supported, since process placement decisions will be based on the
|
| - // URLs such frames navigate to, and not the origin of committed documents
|
| - // (which might be unique). If an isolated origin opens an about:blank
|
| - // popup, it will stay in the isolated origin's process. Nested URLs
|
| - // (filesystem: and blob:) retain process isolation behavior of their inner
|
| - // origin.
|
| + // frames (e.g., <iframe sandbox>) *are* supported, since process placement
|
| + // decisions will be based on the URLs such frames navigate to, and not the
|
| + // origin of committed documents (which might be unique). If an isolated
|
| + // origin opens an about:blank popup, it will stay in the isolated origin's
|
| + // process. Nested URLs (filesystem: and blob:) retain process isolation
|
| + // behavior of their inner origin.
|
| void AddIsolatedOrigin(const url::Origin& origin);
|
|
|
| // Register a set of isolated origins as specified on the command line with
|
| @@ -228,9 +232,44 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
|
| // AddIsolatedOrigin for definition of an isolated origin.
|
| void AddIsolatedOriginsFromCommandLine(const std::string& origin_list);
|
|
|
| - // Helper to check whether an origin requires origin-wide process isolation.
|
| + // Check whether |origin| requires origin-wide process isolation.
|
| + //
|
| + // Subdomains of an isolated origin are considered part of that isolated
|
| + // origin. Thus, if https://isolated.foo.com/ had been added as an isolated
|
| + // origin, this will return true for https://isolated.foo.com/,
|
| + // https://bar.isolated.foo.com/, or https://baz.bar.isolated.foo.com/; and
|
| + // it will return false for https://foo.com/ or https://unisolated.foo.com/.
|
| + //
|
| + // Note that unlike site URLs for regular web sites, isolated origins care
|
| + // about port.
|
| bool IsIsolatedOrigin(const url::Origin& origin);
|
|
|
| + // This function will check whether |origin| requires process isolation, and
|
| + // if so, it will return true and put the most specific matching isolated
|
| + // origin into |result|.
|
| + //
|
| + // If |origin| does not require process isolation, this function will return
|
| + // false, and |result| will be a unique origin. This means that neither
|
| + // |origin|, nor any origins for which |origin| is a subdomain, have been
|
| + // registered as isolated origins.
|
| + //
|
| + // For example, if both https://isolated.com/ and
|
| + // https://bar.foo.isolated.com/ are registered as isolated origins, then the
|
| + // values returned in |result| are:
|
| + // https://isolated.com/ --> https://isolated.com/
|
| + // https://foo.isolated.com/ --> https://isolated.com/
|
| + // https://bar.foo.isolated.com/ --> https://bar.foo.isolated.com/
|
| + // https://baz.bar.foo.isolated.com/ --> https://bar.foo.isolated.com/
|
| + // https://unisolated.com/ --> (unique origin)
|
| + bool GetMatchingIsolatedOrigin(const url::Origin& origin,
|
| + url::Origin* result);
|
| +
|
| + // Removes a previously added isolated origin, currently only used in tests.
|
| + //
|
| + // TODO(alexmos): Exposing this more generally will require extra care, such
|
| + // as ensuring that there are no active SiteInstances in that origin.
|
| + void RemoveIsolatedOriginForTesting(const url::Origin& origin);
|
| +
|
| private:
|
| friend class ChildProcessSecurityPolicyInProcessBrowserTest;
|
| friend class ChildProcessSecurityPolicyTest;
|
|
|