SimpleURIUnknownSchemes.cpp (2434B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=4 sw=2 sts=2 et cin: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "SimpleURIUnknownSchemes.h" 8 #include "mozilla/StaticPrefs_network.h" 9 10 static mozilla::LazyLogModule gURLLog("URL"); 11 12 namespace mozilla::net { 13 14 nsTArray<nsCString> ParseUriSchemes(const nsCString& inputStrList) { 15 nsTArray<nsCString> result; 16 for (const auto& scheme : inputStrList.Split(',')) { 17 nsCString* str = result.AppendElement(scheme); 18 str->StripWhitespace(); 19 } 20 return result; 21 } 22 23 void SimpleURIUnknownSchemes::ParseAndMergePrefSchemes() { 24 AutoWriteLock lock(mSchemeLock); 25 ParseAndMergePrefSchemesLocked(); 26 } 27 28 void SimpleURIUnknownSchemes::ParseAndMergePrefSchemesLocked() { 29 nsAutoCString prefListStr; 30 Preferences::GetCString(SIMPLE_URI_SCHEMES_PREF, prefListStr); 31 nsTArray<nsCString> prefSchemes = ParseUriSchemes(prefListStr); 32 MergeSimpleURISchemes(prefSchemes, mRemoteSettingsURISchemes); 33 } 34 35 void SimpleURIUnknownSchemes::SetAndMergeRemoteSchemes( 36 const nsTArray<nsCString>& remoteSettingsList) { 37 MOZ_LOG(gURLLog, LogLevel::Debug, 38 ("SimpleURIUnknownSchemes::SetAndMergeRemoteSchemes()")); 39 AutoWriteLock lock(mSchemeLock); 40 41 // update the local copy of remote settings schemes in case of pref-update 42 mRemoteSettingsURISchemes = remoteSettingsList.Clone(); 43 44 // update the merged list with the new remote settings schemes 45 ParseAndMergePrefSchemesLocked(); 46 } 47 48 void SimpleURIUnknownSchemes::MergeSimpleURISchemes( 49 const nsTArray<nsCString>& prefList, 50 const nsTArray<nsCString>& remoteSettingsList) { 51 mSimpleURISchemes.Clear(); 52 for (const nsCString& scheme : prefList) { 53 mSimpleURISchemes.Insert(scheme); 54 } 55 for (const nsCString& scheme : remoteSettingsList) { 56 mSimpleURISchemes.Insert(scheme); 57 } 58 } 59 60 bool SimpleURIUnknownSchemes::IsSimpleURIUnknownScheme( 61 const nsACString& aScheme) { 62 AutoReadLock lock(mSchemeLock); 63 return mSimpleURISchemes.Contains(aScheme); 64 } 65 66 void SimpleURIUnknownSchemes::GetRemoteSchemes(nsTArray<nsCString>& aArray) { 67 aArray.Clear(); 68 AutoReadLock lock(mSchemeLock); 69 for (const auto& uri : mRemoteSettingsURISchemes) { 70 aArray.AppendElement(uri); 71 } 72 } 73 74 } // namespace mozilla::net