Index: third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.h |
diff --git a/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.h b/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.h |
index ac2530c9805ca9f3d99bb8adb3df41f0935dddaa..354e01c3c2647249de44fdd06b4b424192dfa0a7 100644 |
--- a/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.h |
+++ b/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.h |
@@ -48,33 +48,103 @@ class CrossOriginAccessControl { |
STATIC_ONLY(CrossOriginAccessControl); |
public: |
- // Given the new request URL, returns true if |
+ // Enumerating the error conditions that the CORS |
+ // access control check can report, including success. |
+ // |
+ // See |checkAccess()| and |accessControlErrorString()| which respectively |
+ // produce and consume these error values, for precise meaning. |
+ enum AccessStatus { |
+ kAccessAllowed, |
+ kInvalidResponse, |
+ kAllowOriginMismatch, |
+ kSubOriginMismatch, |
+ kWildcardOriginNotAllowed, |
+ kMissingAllowOriginHeader, |
+ kMultipleAllowOriginValues, |
+ kInvalidAllowOriginValue, |
+ kDisallowCredentialsNotSetToTrue, |
+ }; |
+ |
+ // Enumerating the error conditions that CORS preflight |
+ // can report, including success. |
+ // |
+ // See |checkPreflight()| methods and |preflightErrorString()| which |
+ // respectively produce and consume these error values, for precise meaning. |
+ enum PreflightStatus { |
+ kPreflightSuccess, |
+ kPreflightInvalidStatus, |
+ // "Access-Control-Allow-External:" |
+ // ( https://wicg.github.io/cors-rfc1918/#headers ) specific error |
+ // conditions: |
+ kPreflightMissingAllowExternal, |
+ kPreflightInvalidAllowExternal, |
+ }; |
+ |
+ // Enumerating the error conditions that CORS redirect target URL |
+ // checks can report, including success. |
+ // |
+ // See |checkRedirectLocation()| methods and |redirectErrorString()| which |
+ // respectively produce and consume these error values, for precise meaning. |
+ enum RedirectStatus { |
+ kRedirectSuccess, |
+ kRedirectDisallowedScheme, |
+ kRedirectContainsCredentials, |
+ }; |
+ |
+ // Perform a CORS access check on the response. Returns |kAccessAllowed| if |
+ // access is allowed. Use |accessControlErrorString()| to construct a |
+ // user-friendly error message for any of the other (error) conditions. |
+ static AccessStatus checkAccess(const ResourceResponse&, |
+ StoredCredentials, |
+ const SecurityOrigin*); |
+ |
+ // Perform the required CORS checks on the response to a preflight request. |
+ // Returns |kPreflightSuccess| if preflight response was successful. |
+ // Use |preflightErrorString()| to construct a user-friendly error message |
+ // for any of the other (error) conditions. |
+ static PreflightStatus checkPreflight(const ResourceResponse&); |
+ |
+ // Error checking for the currently experimental |
+ // "Access-Control-Allow-External:" header. Shares error conditions with |
+ // standard preflight checking. |
+ static PreflightStatus checkExternalPreflight(const ResourceResponse&); |
+ |
+ // Given a redirected-to URL, check if the location is allowed |
+ // according to CORS. That is: |
// - the URL has a CORS supported scheme and |
// - the URL does not contain the userinfo production. |
- static bool isLegalRedirectLocation(const KURL&, String& errorDescription); |
+ // |
+ // Returns |kRedirectSuccess| in all other cases. Use |
+ // |redirectErrorString()| to construct a user-friendly error |
+ // message for any of the error conditions. |
+ static RedirectStatus checkRedirectLocation(const KURL&); |
+ |
static bool handleRedirect(PassRefPtr<SecurityOrigin>, |
ResourceRequest&, |
const ResourceResponse&, |
StoredCredentials, |
ResourceLoaderOptions&, |
String&); |
+ |
+ // Stringify errors from CORS access checks, preflight or redirect checks. |
+ static void accessControlErrorString(StringBuilder&, |
+ AccessStatus, |
+ const ResourceResponse&, |
+ const SecurityOrigin*, |
+ WebURLRequest::RequestContext); |
+ static void preflightErrorString(StringBuilder&, |
+ PreflightStatus, |
+ const ResourceResponse&); |
+ static void redirectErrorString(StringBuilder&, RedirectStatus, const KURL&); |
}; |
+// TODO: also migrate these into the above static class. |
CORE_EXPORT bool isOnAccessControlResponseHeaderWhitelist(const String&); |
CORE_EXPORT ResourceRequest |
createAccessControlPreflightRequest(const ResourceRequest&, |
const SecurityOrigin*); |
-bool passesAccessControlCheck(const ResourceResponse&, |
- StoredCredentials, |
- const SecurityOrigin*, |
- String& errorDescription, |
- WebURLRequest::RequestContext requestType); |
-bool passesPreflightStatusCheck(const ResourceResponse&, |
- String& errorDescription); |
-bool passesExternalPreflightCheck(const ResourceResponse&, |
- String& errorDescription); |
CORE_EXPORT void parseAccessControlExposeHeadersAllowList( |
const String& headerValue, |
HTTPHeaderSet&); |