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

Side by Side Diff: third_party/WebKit/Source/platform/weborigin/SchemeRegistry.cpp

Issue 2462893002: Assume SchemeRegistry only operates on lowercase schemes (Closed)
Patch Set: remove assumptions from tests Created 4 years, 1 month 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 /* 1 /*
2 * Copyright (C) 2010 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2010 Apple Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 return schemes; 97 return schemes;
98 } 98 }
99 99
100 static URLSchemesSet& notAllowingJavascriptURLsSchemes() { 100 static URLSchemesSet& notAllowingJavascriptURLsSchemes() {
101 DEFINE_STATIC_LOCAL_WITH_LOCK(URLSchemesSet, notAllowingJavascriptURLsSchemes, 101 DEFINE_STATIC_LOCAL_WITH_LOCK(URLSchemesSet, notAllowingJavascriptURLsSchemes,
102 ()); 102 ());
103 return notAllowingJavascriptURLsSchemes; 103 return notAllowingJavascriptURLsSchemes;
104 } 104 }
105 105
106 void SchemeRegistry::registerURLSchemeAsLocal(const String& scheme) { 106 void SchemeRegistry::registerURLSchemeAsLocal(const String& scheme) {
107 DCHECK_EQ(scheme, scheme.lower());
107 MutexLocker locker(mutex()); 108 MutexLocker locker(mutex());
108 localURLSchemes().add(scheme); 109 localURLSchemes().add(scheme);
109 } 110 }
110 111
111 const URLSchemesSet& SchemeRegistry::localSchemes() { 112 const URLSchemesSet& SchemeRegistry::localSchemes() {
112 MutexLocker locker(mutex()); 113 MutexLocker locker(mutex());
113 return localURLSchemes(); 114 return localURLSchemes();
114 } 115 }
115 116
116 static URLSchemesSet& CORSEnabledSchemes() { 117 static URLSchemesSet& CORSEnabledSchemes() {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 180
180 return allowedInReferrerSchemes; 181 return allowedInReferrerSchemes;
181 } 182 }
182 183
183 void SchemeRegistry::initialize() { 184 void SchemeRegistry::initialize() {
184 // Instantiate the mutex object. 185 // Instantiate the mutex object.
185 mutex(); 186 mutex();
186 } 187 }
187 188
188 bool SchemeRegistry::shouldTreatURLSchemeAsLocal(const String& scheme) { 189 bool SchemeRegistry::shouldTreatURLSchemeAsLocal(const String& scheme) {
190 DCHECK_EQ(scheme, scheme.lower());
189 if (scheme.isEmpty()) 191 if (scheme.isEmpty())
190 return false; 192 return false;
191 MutexLocker locker(mutex()); 193 MutexLocker locker(mutex());
192 return localURLSchemes().contains(scheme); 194 return localURLSchemes().contains(scheme);
193 } 195 }
194 196
195 void SchemeRegistry::registerURLSchemeAsNoAccess(const String& scheme) { 197 void SchemeRegistry::registerURLSchemeAsNoAccess(const String& scheme) {
198 DCHECK_EQ(scheme, scheme.lower());
196 MutexLocker locker(mutex()); 199 MutexLocker locker(mutex());
197 schemesWithUniqueOrigins().add(scheme); 200 schemesWithUniqueOrigins().add(scheme);
198 } 201 }
199 202
200 bool SchemeRegistry::shouldTreatURLSchemeAsNoAccess(const String& scheme) { 203 bool SchemeRegistry::shouldTreatURLSchemeAsNoAccess(const String& scheme) {
204 DCHECK_EQ(scheme, scheme.lower());
201 if (scheme.isEmpty()) 205 if (scheme.isEmpty())
202 return false; 206 return false;
203 MutexLocker locker(mutex()); 207 MutexLocker locker(mutex());
204 return schemesWithUniqueOrigins().contains(scheme); 208 return schemesWithUniqueOrigins().contains(scheme);
205 } 209 }
206 210
207 void SchemeRegistry::registerURLSchemeAsDisplayIsolated(const String& scheme) { 211 void SchemeRegistry::registerURLSchemeAsDisplayIsolated(const String& scheme) {
212 DCHECK_EQ(scheme, scheme.lower());
208 MutexLocker locker(mutex()); 213 MutexLocker locker(mutex());
209 displayIsolatedURLSchemes().add(scheme); 214 displayIsolatedURLSchemes().add(scheme);
210 } 215 }
211 216
212 bool SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated( 217 bool SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(
213 const String& scheme) { 218 const String& scheme) {
219 DCHECK_EQ(scheme, scheme.lower());
214 if (scheme.isEmpty()) 220 if (scheme.isEmpty())
215 return false; 221 return false;
216 MutexLocker locker(mutex()); 222 MutexLocker locker(mutex());
217 return displayIsolatedURLSchemes().contains(scheme); 223 return displayIsolatedURLSchemes().contains(scheme);
218 } 224 }
219 225
220 void SchemeRegistry::registerURLSchemeAsRestrictingMixedContent( 226 void SchemeRegistry::registerURLSchemeAsRestrictingMixedContent(
221 const String& scheme) { 227 const String& scheme) {
228 DCHECK_EQ(scheme, scheme.lower());
222 MutexLocker locker(mutex()); 229 MutexLocker locker(mutex());
223 mixedContentRestrictingSchemes().add(scheme); 230 mixedContentRestrictingSchemes().add(scheme);
224 } 231 }
225 232
226 bool SchemeRegistry::shouldTreatURLSchemeAsRestrictingMixedContent( 233 bool SchemeRegistry::shouldTreatURLSchemeAsRestrictingMixedContent(
227 const String& scheme) { 234 const String& scheme) {
235 DCHECK_EQ(scheme, scheme.lower());
228 if (scheme.isEmpty()) 236 if (scheme.isEmpty())
229 return false; 237 return false;
230 MutexLocker locker(mutex()); 238 MutexLocker locker(mutex());
231 return mixedContentRestrictingSchemes().contains(scheme); 239 return mixedContentRestrictingSchemes().contains(scheme);
232 } 240 }
233 241
234 void SchemeRegistry::registerURLSchemeAsSecure(const String& scheme) { 242 void SchemeRegistry::registerURLSchemeAsSecure(const String& scheme) {
243 DCHECK_EQ(scheme, scheme.lower());
235 MutexLocker locker(mutex()); 244 MutexLocker locker(mutex());
236 secureSchemes().add(scheme); 245 secureSchemes().add(scheme);
237 } 246 }
238 247
239 bool SchemeRegistry::shouldTreatURLSchemeAsSecure(const String& scheme) { 248 bool SchemeRegistry::shouldTreatURLSchemeAsSecure(const String& scheme) {
249 DCHECK_EQ(scheme, scheme.lower());
240 if (scheme.isEmpty()) 250 if (scheme.isEmpty())
241 return false; 251 return false;
242 MutexLocker locker(mutex()); 252 MutexLocker locker(mutex());
243 return secureSchemes().contains(scheme); 253 return secureSchemes().contains(scheme);
244 } 254 }
245 255
246 void SchemeRegistry::registerURLSchemeAsEmptyDocument(const String& scheme) { 256 void SchemeRegistry::registerURLSchemeAsEmptyDocument(const String& scheme) {
257 DCHECK_EQ(scheme, scheme.lower());
247 MutexLocker locker(mutex()); 258 MutexLocker locker(mutex());
248 emptyDocumentSchemes().add(scheme); 259 emptyDocumentSchemes().add(scheme);
249 } 260 }
250 261
251 bool SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument(const String& scheme) { 262 bool SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument(const String& scheme) {
263 DCHECK_EQ(scheme, scheme.lower());
252 if (scheme.isEmpty()) 264 if (scheme.isEmpty())
253 return false; 265 return false;
254 MutexLocker locker(mutex()); 266 MutexLocker locker(mutex());
255 return emptyDocumentSchemes().contains(scheme); 267 return emptyDocumentSchemes().contains(scheme);
256 } 268 }
257 269
258 void SchemeRegistry::setDomainRelaxationForbiddenForURLScheme( 270 void SchemeRegistry::setDomainRelaxationForbiddenForURLScheme(
259 bool forbidden, 271 bool forbidden,
260 const String& scheme) { 272 const String& scheme) {
273 DCHECK_EQ(scheme, scheme.lower());
261 if (scheme.isEmpty()) 274 if (scheme.isEmpty())
262 return; 275 return;
263 276
264 MutexLocker locker(mutex()); 277 MutexLocker locker(mutex());
265 if (forbidden) 278 if (forbidden)
266 schemesForbiddenFromDomainRelaxation().add(scheme); 279 schemesForbiddenFromDomainRelaxation().add(scheme);
267 else 280 else
268 schemesForbiddenFromDomainRelaxation().remove(scheme); 281 schemesForbiddenFromDomainRelaxation().remove(scheme);
269 } 282 }
270 283
271 bool SchemeRegistry::isDomainRelaxationForbiddenForURLScheme( 284 bool SchemeRegistry::isDomainRelaxationForbiddenForURLScheme(
272 const String& scheme) { 285 const String& scheme) {
286 DCHECK_EQ(scheme, scheme.lower());
273 if (scheme.isEmpty()) 287 if (scheme.isEmpty())
274 return false; 288 return false;
275 MutexLocker locker(mutex()); 289 MutexLocker locker(mutex());
276 return schemesForbiddenFromDomainRelaxation().contains(scheme); 290 return schemesForbiddenFromDomainRelaxation().contains(scheme);
277 } 291 }
278 292
279 bool SchemeRegistry::canDisplayOnlyIfCanRequest(const String& scheme) { 293 bool SchemeRegistry::canDisplayOnlyIfCanRequest(const String& scheme) {
280 return equalIgnoringASCIICase("blob", scheme) || 294 DCHECK_EQ(scheme, scheme.lower());
281 equalIgnoringASCIICase("filesystem", scheme); 295 return scheme == "blob" || scheme == "filesystem";
282 } 296 }
283 297
284 void SchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs( 298 void SchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs(
285 const String& scheme) { 299 const String& scheme) {
300 DCHECK_EQ(scheme, scheme.lower());
286 MutexLocker locker(mutex()); 301 MutexLocker locker(mutex());
287 notAllowingJavascriptURLsSchemes().add(scheme); 302 notAllowingJavascriptURLsSchemes().add(scheme);
288 } 303 }
289 304
290 bool SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs( 305 bool SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs(
291 const String& scheme) { 306 const String& scheme) {
307 DCHECK_EQ(scheme, scheme.lower());
292 if (scheme.isEmpty()) 308 if (scheme.isEmpty())
293 return false; 309 return false;
294 MutexLocker locker(mutex()); 310 MutexLocker locker(mutex());
295 return notAllowingJavascriptURLsSchemes().contains(scheme); 311 return notAllowingJavascriptURLsSchemes().contains(scheme);
296 } 312 }
297 313
298 void SchemeRegistry::registerURLSchemeAsCORSEnabled(const String& scheme) { 314 void SchemeRegistry::registerURLSchemeAsCORSEnabled(const String& scheme) {
315 DCHECK_EQ(scheme, scheme.lower());
299 MutexLocker locker(mutex()); 316 MutexLocker locker(mutex());
300 CORSEnabledSchemes().add(scheme); 317 CORSEnabledSchemes().add(scheme);
301 } 318 }
302 319
303 bool SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(const String& scheme) { 320 bool SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(const String& scheme) {
321 DCHECK_EQ(scheme, scheme.lower());
304 if (scheme.isEmpty()) 322 if (scheme.isEmpty())
305 return false; 323 return false;
306 MutexLocker locker(mutex()); 324 MutexLocker locker(mutex());
307 return CORSEnabledSchemes().contains(scheme); 325 return CORSEnabledSchemes().contains(scheme);
308 } 326 }
309 327
310 String SchemeRegistry::listOfCORSEnabledURLSchemes() { 328 String SchemeRegistry::listOfCORSEnabledURLSchemes() {
311 StringBuilder builder; 329 StringBuilder builder;
312 bool addSeparator = false; 330 bool addSeparator = false;
313 URLSchemesSet schemes; 331 URLSchemesSet schemes;
314 { 332 {
315 MutexLocker locker(mutex()); 333 MutexLocker locker(mutex());
316 schemes = CORSEnabledSchemes(); 334 schemes = CORSEnabledSchemes();
317 } 335 }
318 for (const auto& scheme : schemes) { 336 for (const auto& scheme : schemes) {
319 if (addSeparator) 337 if (addSeparator)
320 builder.append(", "); 338 builder.append(", ");
321 else 339 else
322 addSeparator = true; 340 addSeparator = true;
323 341
324 builder.append(scheme); 342 builder.append(scheme);
325 } 343 }
326 return builder.toString(); 344 return builder.toString();
327 } 345 }
328 346
329 bool SchemeRegistry::shouldTreatURLSchemeAsLegacy(const String& scheme) { 347 bool SchemeRegistry::shouldTreatURLSchemeAsLegacy(const String& scheme) {
330 return equalIgnoringASCIICase("ftp", scheme) || 348 return scheme == "ftp" || scheme == "gopher";
331 equalIgnoringASCIICase("gopher", scheme);
332 } 349 }
333 350
334 void SchemeRegistry::registerURLSchemeAsAllowingServiceWorkers( 351 void SchemeRegistry::registerURLSchemeAsAllowingServiceWorkers(
335 const String& scheme) { 352 const String& scheme) {
353 DCHECK_EQ(scheme, scheme.lower());
336 MutexLocker locker(mutex()); 354 MutexLocker locker(mutex());
337 serviceWorkerSchemes().add(scheme); 355 serviceWorkerSchemes().add(scheme);
338 } 356 }
339 357
340 bool SchemeRegistry::shouldTreatURLSchemeAsAllowingServiceWorkers( 358 bool SchemeRegistry::shouldTreatURLSchemeAsAllowingServiceWorkers(
341 const String& scheme) { 359 const String& scheme) {
360 DCHECK_EQ(scheme, scheme.lower());
342 if (scheme.isEmpty()) 361 if (scheme.isEmpty())
343 return false; 362 return false;
344 MutexLocker locker(mutex()); 363 MutexLocker locker(mutex());
345 return serviceWorkerSchemes().contains(scheme); 364 return serviceWorkerSchemes().contains(scheme);
346 } 365 }
347 366
348 void SchemeRegistry::registerURLSchemeAsSupportingFetchAPI( 367 void SchemeRegistry::registerURLSchemeAsSupportingFetchAPI(
349 const String& scheme) { 368 const String& scheme) {
369 DCHECK_EQ(scheme, scheme.lower());
350 MutexLocker locker(mutex()); 370 MutexLocker locker(mutex());
351 fetchAPISchemes().add(scheme); 371 fetchAPISchemes().add(scheme);
352 } 372 }
353 373
354 bool SchemeRegistry::shouldTreatURLSchemeAsSupportingFetchAPI( 374 bool SchemeRegistry::shouldTreatURLSchemeAsSupportingFetchAPI(
355 const String& scheme) { 375 const String& scheme) {
376 DCHECK_EQ(scheme, scheme.lower());
356 if (scheme.isEmpty()) 377 if (scheme.isEmpty())
357 return false; 378 return false;
358 MutexLocker locker(mutex()); 379 MutexLocker locker(mutex());
359 return fetchAPISchemes().contains(scheme); 380 return fetchAPISchemes().contains(scheme);
360 } 381 }
361 382
362 void SchemeRegistry::registerURLSchemeAsFirstPartyWhenTopLevel( 383 void SchemeRegistry::registerURLSchemeAsFirstPartyWhenTopLevel(
363 const String& scheme) { 384 const String& scheme) {
385 DCHECK_EQ(scheme, scheme.lower());
364 MutexLocker locker(mutex()); 386 MutexLocker locker(mutex());
365 firstPartyWhenTopLevelSchemes().add(scheme); 387 firstPartyWhenTopLevelSchemes().add(scheme);
366 } 388 }
367 389
368 void SchemeRegistry::removeURLSchemeAsFirstPartyWhenTopLevel( 390 void SchemeRegistry::removeURLSchemeAsFirstPartyWhenTopLevel(
369 const String& scheme) { 391 const String& scheme) {
392 DCHECK_EQ(scheme, scheme.lower());
370 MutexLocker locker(mutex()); 393 MutexLocker locker(mutex());
371 firstPartyWhenTopLevelSchemes().remove(scheme); 394 firstPartyWhenTopLevelSchemes().remove(scheme);
372 } 395 }
373 396
374 bool SchemeRegistry::shouldTreatURLSchemeAsFirstPartyWhenTopLevel( 397 bool SchemeRegistry::shouldTreatURLSchemeAsFirstPartyWhenTopLevel(
375 const String& scheme) { 398 const String& scheme) {
399 DCHECK_EQ(scheme, scheme.lower());
376 if (scheme.isEmpty()) 400 if (scheme.isEmpty())
377 return false; 401 return false;
378 MutexLocker locker(mutex()); 402 MutexLocker locker(mutex());
379 return firstPartyWhenTopLevelSchemes().contains(scheme); 403 return firstPartyWhenTopLevelSchemes().contains(scheme);
380 } 404 }
381 405
382 void SchemeRegistry::registerURLSchemeAsAllowedForReferrer( 406 void SchemeRegistry::registerURLSchemeAsAllowedForReferrer(
383 const String& scheme) { 407 const String& scheme) {
408 DCHECK_EQ(scheme, scheme.lower());
384 MutexLocker locker(mutex()); 409 MutexLocker locker(mutex());
385 allowedInReferrerSchemes().add(scheme); 410 allowedInReferrerSchemes().add(scheme);
386 } 411 }
387 412
388 void SchemeRegistry::removeURLSchemeAsAllowedForReferrer(const String& scheme) { 413 void SchemeRegistry::removeURLSchemeAsAllowedForReferrer(const String& scheme) {
389 MutexLocker locker(mutex()); 414 MutexLocker locker(mutex());
390 allowedInReferrerSchemes().remove(scheme); 415 allowedInReferrerSchemes().remove(scheme);
391 } 416 }
392 417
393 bool SchemeRegistry::shouldTreatURLSchemeAsAllowedForReferrer( 418 bool SchemeRegistry::shouldTreatURLSchemeAsAllowedForReferrer(
394 const String& scheme) { 419 const String& scheme) {
420 DCHECK_EQ(scheme, scheme.lower());
395 if (scheme.isEmpty()) 421 if (scheme.isEmpty())
396 return false; 422 return false;
397 MutexLocker locker(mutex()); 423 MutexLocker locker(mutex());
398 return allowedInReferrerSchemes().contains(scheme); 424 return allowedInReferrerSchemes().contains(scheme);
399 } 425 }
400 426
401 void SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy( 427 void SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy(
402 const String& scheme, 428 const String& scheme,
403 PolicyAreas policyAreas) { 429 PolicyAreas policyAreas) {
430 DCHECK_EQ(scheme, scheme.lower());
404 MutexLocker locker(mutex()); 431 MutexLocker locker(mutex());
405 ContentSecurityPolicyBypassingSchemes().add(scheme, policyAreas); 432 ContentSecurityPolicyBypassingSchemes().add(scheme, policyAreas);
406 } 433 }
407 434
408 void SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy( 435 void SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(
409 const String& scheme) { 436 const String& scheme) {
437 DCHECK_EQ(scheme, scheme.lower());
410 MutexLocker locker(mutex()); 438 MutexLocker locker(mutex());
411 ContentSecurityPolicyBypassingSchemes().remove(scheme); 439 ContentSecurityPolicyBypassingSchemes().remove(scheme);
412 } 440 }
413 441
414 bool SchemeRegistry::schemeShouldBypassContentSecurityPolicy( 442 bool SchemeRegistry::schemeShouldBypassContentSecurityPolicy(
415 const String& scheme, 443 const String& scheme,
416 PolicyAreas policyAreas) { 444 PolicyAreas policyAreas) {
417 ASSERT(policyAreas != PolicyAreaNone); 445 ASSERT(policyAreas != PolicyAreaNone);
418 if (scheme.isEmpty() || policyAreas == PolicyAreaNone) 446 if (scheme.isEmpty() || policyAreas == PolicyAreaNone)
419 return false; 447 return false;
420 448
421 // get() returns 0 (PolicyAreaNone) if there is no entry in the map. 449 // get() returns 0 (PolicyAreaNone) if there is no entry in the map.
422 // Thus by default, schemes do not bypass CSP. 450 // Thus by default, schemes do not bypass CSP.
423 MutexLocker locker(mutex()); 451 MutexLocker locker(mutex());
424 return (ContentSecurityPolicyBypassingSchemes().get(scheme) & policyAreas) == 452 return (ContentSecurityPolicyBypassingSchemes().get(scheme) & policyAreas) ==
425 policyAreas; 453 policyAreas;
426 } 454 }
427 455
428 void SchemeRegistry::registerURLSchemeBypassingSecureContextCheck( 456 void SchemeRegistry::registerURLSchemeBypassingSecureContextCheck(
429 const String& scheme) { 457 const String& scheme) {
458 DCHECK_EQ(scheme, scheme.lower());
430 MutexLocker locker(mutex()); 459 MutexLocker locker(mutex());
431 secureContextBypassingSchemes().add(scheme.lower()); 460 secureContextBypassingSchemes().add(scheme.lower());
432 } 461 }
433 462
434 bool SchemeRegistry::schemeShouldBypassSecureContextCheck( 463 bool SchemeRegistry::schemeShouldBypassSecureContextCheck(
435 const String& scheme) { 464 const String& scheme) {
436 if (scheme.isEmpty()) 465 if (scheme.isEmpty())
437 return false; 466 return false;
438 MutexLocker locker(mutex()); 467 MutexLocker locker(mutex());
439 return secureContextBypassingSchemes().contains(scheme.lower()); 468 return secureContextBypassingSchemes().contains(scheme.lower());
440 } 469 }
441 470
442 } // namespace blink 471 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698