OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "url/url_util.h" | 5 #include "url/url_util.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "base/debug/leak_annotations.h" | 10 #include "base/debug/leak_annotations.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
74 | 74 |
75 const char* kWebStorageSchemes[] = { | 75 const char* kWebStorageSchemes[] = { |
76 kHttpScheme, | 76 kHttpScheme, |
77 kHttpsScheme, | 77 kHttpsScheme, |
78 kFileScheme, | 78 kFileScheme, |
79 kFtpScheme, | 79 kFtpScheme, |
80 kWsScheme, | 80 kWsScheme, |
81 kWssScheme, | 81 kWssScheme, |
82 }; | 82 }; |
83 | 83 |
84 const char* kEmptyDocumentSchemes[] = { | |
85 kAboutScheme, | |
brettw
2017/03/23 22:02:13
Indenting.
jam
2017/03/23 22:36:04
I'll do this in a followup if you don't mind, just
| |
86 }; | |
87 | |
84 bool initialized = false; | 88 bool initialized = false; |
85 | 89 |
86 // Lists of the currently installed standard and referrer schemes. These lists | 90 // Lists of the currently installed standard and referrer schemes. These lists |
87 // are lazily initialized by Initialize and are leaked on shutdown to prevent | 91 // are lazily initialized by Initialize and are leaked on shutdown to prevent |
88 // any destructors from being called that will slow us down or cause problems. | 92 // any destructors from being called that will slow us down or cause problems. |
89 std::vector<SchemeWithType>* standard_schemes = nullptr; | 93 std::vector<SchemeWithType>* standard_schemes = nullptr; |
90 std::vector<SchemeWithType>* referrer_schemes = nullptr; | 94 std::vector<SchemeWithType>* referrer_schemes = nullptr; |
91 | 95 |
92 // Similar to above, initialized by the Init*Schemes methods. | 96 // Similar to above, initialized by the Init*Schemes methods. |
93 std::vector<std::string>* secure_schemes = nullptr; | 97 std::vector<std::string>* secure_schemes = nullptr; |
94 std::vector<std::string>* local_schemes = nullptr; | 98 std::vector<std::string>* local_schemes = nullptr; |
95 std::vector<std::string>* no_access_schemes = nullptr; | 99 std::vector<std::string>* no_access_schemes = nullptr; |
96 std::vector<std::string>* cors_enabled_schemes = nullptr; | 100 std::vector<std::string>* cors_enabled_schemes = nullptr; |
97 std::vector<std::string>* web_storage_schemes = nullptr; | 101 std::vector<std::string>* web_storage_schemes = nullptr; |
98 std::vector<std::string>* csp_bypassing_schemes = nullptr; | 102 std::vector<std::string>* csp_bypassing_schemes = nullptr; |
103 std::vector<std::string>* empty_document_schemes = nullptr; | |
99 | 104 |
100 // See the LockSchemeRegistries declaration in the header. | 105 // See the LockSchemeRegistries declaration in the header. |
101 bool scheme_registries_locked = false; | 106 bool scheme_registries_locked = false; |
102 | 107 |
103 // This template converts a given character type to the corresponding | 108 // This template converts a given character type to the corresponding |
104 // StringPiece type. | 109 // StringPiece type. |
105 template<typename CHAR> struct CharToStringPiece { | 110 template<typename CHAR> struct CharToStringPiece { |
106 }; | 111 }; |
107 template<> struct CharToStringPiece<char> { | 112 template<> struct CharToStringPiece<char> { |
108 typedef base::StringPiece Piece; | 113 typedef base::StringPiece Piece; |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
518 arraysize(kReferrerURLSchemes)); | 523 arraysize(kReferrerURLSchemes)); |
519 InitSchemes(&secure_schemes, kSecureSchemes, arraysize(kSecureSchemes)); | 524 InitSchemes(&secure_schemes, kSecureSchemes, arraysize(kSecureSchemes)); |
520 InitSchemes(&local_schemes, kLocalSchemes, arraysize(kLocalSchemes)); | 525 InitSchemes(&local_schemes, kLocalSchemes, arraysize(kLocalSchemes)); |
521 InitSchemes(&no_access_schemes, kNoAccessSchemes, | 526 InitSchemes(&no_access_schemes, kNoAccessSchemes, |
522 arraysize(kNoAccessSchemes)); | 527 arraysize(kNoAccessSchemes)); |
523 InitSchemes(&cors_enabled_schemes, kCORSEnabledSchemes, | 528 InitSchemes(&cors_enabled_schemes, kCORSEnabledSchemes, |
524 arraysize(kCORSEnabledSchemes)); | 529 arraysize(kCORSEnabledSchemes)); |
525 InitSchemes(&web_storage_schemes, kWebStorageSchemes, | 530 InitSchemes(&web_storage_schemes, kWebStorageSchemes, |
526 arraysize(kWebStorageSchemes)); | 531 arraysize(kWebStorageSchemes)); |
527 InitSchemes(&csp_bypassing_schemes, nullptr, 0); | 532 InitSchemes(&csp_bypassing_schemes, nullptr, 0); |
533 InitSchemes(&empty_document_schemes, kEmptyDocumentSchemes, | |
534 arraysize(kEmptyDocumentSchemes)); | |
528 initialized = true; | 535 initialized = true; |
529 } | 536 } |
530 | 537 |
531 void Shutdown() { | 538 void Shutdown() { |
532 initialized = false; | 539 initialized = false; |
533 delete standard_schemes; | 540 delete standard_schemes; |
534 standard_schemes = nullptr; | 541 standard_schemes = nullptr; |
535 delete referrer_schemes; | 542 delete referrer_schemes; |
536 referrer_schemes = nullptr; | 543 referrer_schemes = nullptr; |
537 delete secure_schemes; | 544 delete secure_schemes; |
538 secure_schemes = nullptr; | 545 secure_schemes = nullptr; |
539 delete local_schemes; | 546 delete local_schemes; |
540 local_schemes = nullptr; | 547 local_schemes = nullptr; |
541 delete no_access_schemes; | 548 delete no_access_schemes; |
542 no_access_schemes = nullptr; | 549 no_access_schemes = nullptr; |
543 delete cors_enabled_schemes; | 550 delete cors_enabled_schemes; |
544 cors_enabled_schemes = nullptr; | 551 cors_enabled_schemes = nullptr; |
545 delete web_storage_schemes; | 552 delete web_storage_schemes; |
546 web_storage_schemes = nullptr; | 553 web_storage_schemes = nullptr; |
547 delete csp_bypassing_schemes; | 554 delete csp_bypassing_schemes; |
548 csp_bypassing_schemes = nullptr; | 555 csp_bypassing_schemes = nullptr; |
556 delete empty_document_schemes; | |
557 empty_document_schemes = nullptr; | |
549 } | 558 } |
550 | 559 |
551 void AddStandardScheme(const char* new_scheme, SchemeType type) { | 560 void AddStandardScheme(const char* new_scheme, SchemeType type) { |
552 Initialize(); | 561 Initialize(); |
553 DoAddSchemeWithType(new_scheme, type, standard_schemes); | 562 DoAddSchemeWithType(new_scheme, type, standard_schemes); |
554 } | 563 } |
555 | 564 |
556 void AddReferrerScheme(const char* new_scheme, SchemeType type) { | 565 void AddReferrerScheme(const char* new_scheme, SchemeType type) { |
557 Initialize(); | 566 Initialize(); |
558 DoAddSchemeWithType(new_scheme, type, referrer_schemes); | 567 DoAddSchemeWithType(new_scheme, type, referrer_schemes); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
611 void AddCSPBypassingScheme(const char* new_scheme) { | 620 void AddCSPBypassingScheme(const char* new_scheme) { |
612 Initialize(); | 621 Initialize(); |
613 DoAddScheme(new_scheme, csp_bypassing_schemes); | 622 DoAddScheme(new_scheme, csp_bypassing_schemes); |
614 } | 623 } |
615 | 624 |
616 const std::vector<std::string>& GetCSPBypassingSchemes() { | 625 const std::vector<std::string>& GetCSPBypassingSchemes() { |
617 Initialize(); | 626 Initialize(); |
618 return *csp_bypassing_schemes; | 627 return *csp_bypassing_schemes; |
619 } | 628 } |
620 | 629 |
630 void AddEmptyDocumentScheme(const char* new_scheme) { | |
631 Initialize(); | |
632 DoAddScheme(new_scheme, empty_document_schemes); | |
633 } | |
634 | |
635 const std::vector<std::string>& GetEmptyDocumentSchemes() { | |
636 Initialize(); | |
637 return *empty_document_schemes; | |
638 } | |
639 | |
621 void LockSchemeRegistries() { | 640 void LockSchemeRegistries() { |
622 scheme_registries_locked = true; | 641 scheme_registries_locked = true; |
623 } | 642 } |
624 | 643 |
625 bool IsStandard(const char* spec, const Component& scheme) { | 644 bool IsStandard(const char* spec, const Component& scheme) { |
626 SchemeType unused_scheme_type; | 645 SchemeType unused_scheme_type; |
627 return DoIsStandard(spec, scheme, &unused_scheme_type); | 646 return DoIsStandard(spec, scheme, &unused_scheme_type); |
628 } | 647 } |
629 | 648 |
630 bool GetStandardSchemeType(const char* spec, | 649 bool GetStandardSchemeType(const char* spec, |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
837 return DoCompareSchemeComponent(spec, component, compare_to); | 856 return DoCompareSchemeComponent(spec, component, compare_to); |
838 } | 857 } |
839 | 858 |
840 bool CompareSchemeComponent(const base::char16* spec, | 859 bool CompareSchemeComponent(const base::char16* spec, |
841 const Component& component, | 860 const Component& component, |
842 const char* compare_to) { | 861 const char* compare_to) { |
843 return DoCompareSchemeComponent(spec, component, compare_to); | 862 return DoCompareSchemeComponent(spec, component, compare_to); |
844 } | 863 } |
845 | 864 |
846 } // namespace url | 865 } // namespace url |
OLD | NEW |