| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ | 5 #ifndef CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ |
| 6 #define CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ | 6 #define CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/strings/string_piece.h" | 9 #include "base/strings/string_piece.h" |
| 10 #include "content/common/content_export.h" | 10 #include "content/common/content_export.h" |
| 11 #include "url/gurl.h" | 11 #include "url/gurl.h" |
| 12 #include "url/origin.h" |
| 12 | 13 |
| 13 namespace content { | 14 namespace content { |
| 14 | 15 |
| 15 // CrossSiteDocumentClassifier implements the cross-site document blocking | 16 // CrossSiteDocumentClassifier implements the cross-site document blocking |
| 16 // policy (XSDP) for Site Isolation. XSDP will monitor network responses to a | 17 // policy (XSDP) for Site Isolation. XSDP will monitor network responses to a |
| 17 // renderer and block illegal responses so that a compromised renderer cannot | 18 // renderer and block illegal responses so that a compromised renderer cannot |
| 18 // steal private information from other sites. | 19 // steal private information from other sites. |
| 19 | 20 |
| 20 enum CrossSiteDocumentMimeType { | 21 enum CrossSiteDocumentMimeType { |
| 21 // Note that these values are used in histograms, and must not change. | 22 // Note that these values are used in histograms, and must not change. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 33 // response. For example, this returns the same value for all text/xml mime | 34 // response. For example, this returns the same value for all text/xml mime |
| 34 // type families such as application/xml, application/rss+xml. | 35 // type families such as application/xml, application/rss+xml. |
| 35 static CrossSiteDocumentMimeType GetCanonicalMimeType( | 36 static CrossSiteDocumentMimeType GetCanonicalMimeType( |
| 36 const std::string& mime_type); | 37 const std::string& mime_type); |
| 37 | 38 |
| 38 // Returns whether this scheme is a target of cross-site document | 39 // Returns whether this scheme is a target of cross-site document |
| 39 // policy(XSDP). This returns true only for http://* and https://* urls. | 40 // policy(XSDP). This returns true only for http://* and https://* urls. |
| 40 static bool IsBlockableScheme(const GURL& frame_origin); | 41 static bool IsBlockableScheme(const GURL& frame_origin); |
| 41 | 42 |
| 42 // Returns whether the two urls belong to the same sites. | 43 // Returns whether the two urls belong to the same sites. |
| 43 static bool IsSameSite(const GURL& frame_origin, const GURL& response_url); | 44 static bool IsSameSite(const url::Origin& frame_origin, |
| 45 const GURL& response_url); |
| 44 | 46 |
| 45 // Returns whether there's a valid CORS header for frame_origin. This is | 47 // Returns whether there's a valid CORS header for frame_origin. This is |
| 46 // simliar to CrossOriginAccessControl::passesAccessControlCheck(), but we use | 48 // simliar to CrossOriginAccessControl::passesAccessControlCheck(), but we use |
| 47 // sites as our security domain, not origins. | 49 // sites as our security domain, not origins. |
| 48 // TODO(dsjang): this must be improved to be more accurate to the actual CORS | 50 // TODO(dsjang): this must be improved to be more accurate to the actual CORS |
| 49 // specification. For now, this works conservatively, allowing XSDs that are | 51 // specification. For now, this works conservatively, allowing XSDs that are |
| 50 // not allowed by actual CORS rules by ignoring 1) credentials and 2) | 52 // not allowed by actual CORS rules by ignoring 1) credentials and 2) |
| 51 // methods. Preflight requests don't matter here since they are not used to | 53 // methods. Preflight requests don't matter here since they are not used to |
| 52 // decide whether to block a document or not on the client side. | 54 // decide whether to block a document or not on the client side. |
| 53 static bool IsValidCorsHeaderSet(const GURL& frame_origin, | 55 static bool IsValidCorsHeaderSet(const url::Origin& frame_origin, |
| 54 const GURL& website_origin, | 56 const GURL& website_origin, |
| 55 const std::string& access_control_origin); | 57 const std::string& access_control_origin); |
| 56 | 58 |
| 57 static bool SniffForHTML(base::StringPiece data); | 59 static bool SniffForHTML(base::StringPiece data); |
| 58 static bool SniffForXML(base::StringPiece data); | 60 static bool SniffForXML(base::StringPiece data); |
| 59 static bool SniffForJSON(base::StringPiece data); | 61 static bool SniffForJSON(base::StringPiece data); |
| 60 | 62 |
| 61 private: | 63 private: |
| 62 CrossSiteDocumentClassifier(); // Not instantiable. | 64 CrossSiteDocumentClassifier(); // Not instantiable. |
| 63 | 65 |
| 64 DISALLOW_COPY_AND_ASSIGN(CrossSiteDocumentClassifier); | 66 DISALLOW_COPY_AND_ASSIGN(CrossSiteDocumentClassifier); |
| 65 }; | 67 }; |
| 66 | 68 |
| 67 } // namespace content | 69 } // namespace content |
| 68 | 70 |
| 69 #endif // CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ | 71 #endif // CONTENT_COMMON_CROSS_SITE_DOCUMENT_CLASSIFIER_H_ |
| OLD | NEW |