Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: content/child/site_isolation_stats_gatherer.cc

Issue 2568133007: Allow CrossSiteDocumentClassifier to operate on Origins (Closed)
Patch Set: pkasting review Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "content/child/site_isolation_stats_gatherer.h" 5 #include "content/child/site_isolation_stats_gatherer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // See if this is for navigation. If it is, don't block it, under the 119 // See if this is for navigation. If it is, don't block it, under the
120 // assumption that we will put it in an appropriate process. 120 // assumption that we will put it in an appropriate process.
121 if (IsResourceTypeFrame(resource_type)) 121 if (IsResourceTypeFrame(resource_type))
122 return nullptr; 122 return nullptr;
123 123
124 if (!CrossSiteDocumentClassifier::IsBlockableScheme(response_url)) 124 if (!CrossSiteDocumentClassifier::IsBlockableScheme(response_url))
125 return nullptr; 125 return nullptr;
126 126
127 // TODO(csharrison): Add a path for IsSameSite/IsValidCorsHeaderSet to take an 127 // TODO(csharrison): Add a path for IsSameSite/IsValidCorsHeaderSet to take an
128 // Origin. 128 // Origin.
129 GURL frame_origin_url = frame_origin.GetURL(); 129 if (CrossSiteDocumentClassifier::IsSameSite(frame_origin, response_url))
130 if (CrossSiteDocumentClassifier::IsSameSite(frame_origin_url, response_url))
131 return nullptr; 130 return nullptr;
132 131
133 CrossSiteDocumentMimeType canonical_mime_type = 132 CrossSiteDocumentMimeType canonical_mime_type =
134 CrossSiteDocumentClassifier::GetCanonicalMimeType(info.mime_type); 133 CrossSiteDocumentClassifier::GetCanonicalMimeType(info.mime_type);
135 134
136 if (canonical_mime_type == CROSS_SITE_DOCUMENT_MIME_TYPE_OTHERS) 135 if (canonical_mime_type == CROSS_SITE_DOCUMENT_MIME_TYPE_OTHERS)
137 return nullptr; 136 return nullptr;
138 137
139 // Every CORS request should have the Access-Control-Allow-Origin header even 138 // Every CORS request should have the Access-Control-Allow-Origin header even
140 // if it is preceded by a pre-flight request. Therefore, if this is a CORS 139 // if it is preceded by a pre-flight request. Therefore, if this is a CORS
141 // request, it has this header. response.httpHeaderField() internally uses 140 // request, it has this header. response.httpHeaderField() internally uses
142 // case-insensitive matching for the header name. 141 // case-insensitive matching for the header name.
143 std::string access_control_origin; 142 std::string access_control_origin;
144 143
145 // We can use a case-insensitive header name for EnumerateHeader(). 144 // We can use a case-insensitive header name for EnumerateHeader().
146 info.headers->EnumerateHeader(NULL, "access-control-allow-origin", 145 info.headers->EnumerateHeader(NULL, "access-control-allow-origin",
147 &access_control_origin); 146 &access_control_origin);
148 if (CrossSiteDocumentClassifier::IsValidCorsHeaderSet( 147 if (CrossSiteDocumentClassifier::IsValidCorsHeaderSet(
149 frame_origin_url, response_url, access_control_origin)) 148 frame_origin, response_url, access_control_origin)) {
150 return nullptr; 149 return nullptr;
150 }
151 151
152 // Real XSD data collection starts from here. 152 // Real XSD data collection starts from here.
153 std::string no_sniff; 153 std::string no_sniff;
154 info.headers->EnumerateHeader(NULL, "x-content-type-options", &no_sniff); 154 info.headers->EnumerateHeader(NULL, "x-content-type-options", &no_sniff);
155 155
156 std::unique_ptr<SiteIsolationResponseMetaData> resp_data( 156 std::unique_ptr<SiteIsolationResponseMetaData> resp_data(
157 new SiteIsolationResponseMetaData); 157 new SiteIsolationResponseMetaData);
158 resp_data->frame_origin = frame_origin_url.spec();
159 resp_data->response_url = response_url; 158 resp_data->response_url = response_url;
160 resp_data->resource_type = resource_type; 159 resp_data->resource_type = resource_type;
161 resp_data->canonical_mime_type = canonical_mime_type; 160 resp_data->canonical_mime_type = canonical_mime_type;
162 resp_data->http_status_code = info.headers->response_code(); 161 resp_data->http_status_code = info.headers->response_code();
163 resp_data->no_sniff = base::LowerCaseEqualsASCII(no_sniff, "nosniff"); 162 resp_data->no_sniff = base::LowerCaseEqualsASCII(no_sniff, "nosniff");
164 163
165 return resp_data; 164 return resp_data;
166 } 165 }
167 166
168 bool SiteIsolationStatsGatherer::OnReceivedFirstChunk( 167 bool SiteIsolationStatsGatherer::OnReceivedFirstChunk(
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 } 254 }
256 255
257 bool SiteIsolationStatsGatherer::SniffForJS(base::StringPiece data) { 256 bool SiteIsolationStatsGatherer::SniffForJS(base::StringPiece data) {
258 // The purpose of this function is to try to see if there's any possibility 257 // The purpose of this function is to try to see if there's any possibility
259 // that this data can be JavaScript (superset of JS). Search for "var " for JS 258 // that this data can be JavaScript (superset of JS). Search for "var " for JS
260 // detection. This is a real hack and should only be used for stats gathering. 259 // detection. This is a real hack and should only be used for stats gathering.
261 return data.find("var ") != base::StringPiece::npos; 260 return data.find("var ") != base::StringPiece::npos;
262 } 261 }
263 262
264 } // namespace content 263 } // namespace content
OLDNEW
« no previous file with comments | « content/child/site_isolation_stats_gatherer.h ('k') | content/common/cross_site_document_classifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698