| 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&);
|
|
|