Skip to main content
Sign in
Snippets Groups Projects
Verified Commit 379a2960 authored by cypherpunks1's avatar cypherpunks1 Committed by Pier Angelo Vendrame
Browse files

fixup! Bug 40925: Implemented the Security Level component

Bug 43128: Use DuckDuckGo HTML on the Safest security level for Android
parent bed52c3f
Branches
No related tags found
No related merge requests found
......@@ -13,6 +13,8 @@ import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.Settings
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.feature.search.ext.buildSearchUrl
import mozilla.components.feature.session.SessionUseCases
import mozilla.components.feature.tabs.TabsUseCases
......@@ -25,6 +27,7 @@ class SearchUseCases(
store: BrowserStore,
tabsUseCases: TabsUseCases,
sessionUseCases: SessionUseCases,
settings: Settings? = null,
) {
interface SearchUseCase {
/**
......@@ -41,6 +44,7 @@ class SearchUseCases(
private val store: BrowserStore,
private val tabsUseCases: TabsUseCases,
private val sessionUseCases: SessionUseCases,
private val settings: Settings? = null,
) : SearchUseCase {
private val logger = Logger("DefaultSearchUseCase")
......@@ -72,9 +76,15 @@ class SearchUseCases(
flags: EngineSession.LoadUrlFlags = EngineSession.LoadUrlFlags.none(),
additionalHeaders: Map<String, String>? = null,
) {
var securityLevel: Int
try {
securityLevel = settings?.torSecurityLevel ?: 0
} catch (e: UnsupportedSettingException) {
securityLevel = 0
}
val searchUrl = searchEngine?.let {
searchEngine.buildSearchUrl(searchTerms)
} ?: store.state.search.selectedOrDefaultSearchEngine?.buildSearchUrl(searchTerms)
searchEngine.buildSearchUrl(searchTerms, securityLevel)
} ?: store.state.search.selectedOrDefaultSearchEngine?.buildSearchUrl(searchTerms, securityLevel)
if (searchUrl == null) {
logger.warn("No default search engine available to perform search")
......@@ -124,6 +134,7 @@ class SearchUseCases(
private val store: BrowserStore,
private val tabsUseCases: TabsUseCases,
private val isPrivate: Boolean,
private val settings: Settings? = null,
) : SearchUseCase {
private val logger = Logger("NewTabSearchUseCase")
......@@ -161,9 +172,15 @@ class SearchUseCases(
flags: EngineSession.LoadUrlFlags = EngineSession.LoadUrlFlags.none(),
additionalHeaders: Map<String, String>? = null,
) {
var securityLevel: Int
try {
securityLevel = settings?.torSecurityLevel ?: 0
} catch (e: UnsupportedSettingException) {
securityLevel = 0
}
val searchUrl = searchEngine?.let {
searchEngine.buildSearchUrl(searchTerms)
} ?: store.state.search.selectedOrDefaultSearchEngine?.buildSearchUrl(searchTerms)
searchEngine.buildSearchUrl(searchTerms, securityLevel)
} ?: store.state.search.selectedOrDefaultSearchEngine?.buildSearchUrl(searchTerms, securityLevel)
if (searchUrl == null) {
logger.warn("No default search engine available to perform search")
......@@ -310,15 +327,15 @@ class SearchUseCases(
}
val defaultSearch: DefaultSearchUseCase by lazy {
DefaultSearchUseCase(store, tabsUseCases, sessionUseCases)
DefaultSearchUseCase(store, tabsUseCases, sessionUseCases, settings)
}
val newTabSearch: NewTabSearchUseCase by lazy {
NewTabSearchUseCase(store, tabsUseCases, false)
NewTabSearchUseCase(store, tabsUseCases, false, settings)
}
val newPrivateTabSearch: NewTabSearchUseCase by lazy {
NewTabSearchUseCase(store, tabsUseCases, true)
NewTabSearchUseCase(store, tabsUseCases, true, settings)
}
val addSearchEngine: AddNewSearchEngineUseCase by lazy {
......
......
......@@ -85,9 +85,9 @@ fun SearchEngine.buildSuggestionsURL(query: String): String? {
/**
* Builds a URL to search for the given search terms with this search engine.
*/
fun SearchEngine.buildSearchUrl(searchTerm: String): String {
fun SearchEngine.buildSearchUrl(searchTerm: String, securityLevel: Int = 0): String {
val builder = SearchUrlBuilder(this)
return builder.buildSearchUrl(searchTerm)
return builder.buildSearchUrl(searchTerm, securityLevel)
}
/**
......
......
......@@ -28,9 +28,12 @@ private const val OS_PARAM_OPTIONAL = "\\{" + "(?:\\w+:)?\\w+?" + "\\}"
internal class SearchUrlBuilder(
private val searchEngine: SearchEngine,
) {
fun buildSearchUrl(searchTerms: String): String {
fun buildSearchUrl(searchTerms: String, securityLevel: Int): String {
// The parser should have put the best URL for this device at the beginning of the list.
val template = searchEngine.resultUrls[0]
var template = searchEngine.resultUrls[0]
if (securityLevel == 1 && (searchEngine.id == "ddg" || searchEngine.id == "ddg-onion")) {
template = template.replaceFirst("/?", "/html/?")
}
return buildUrl(template, searchTerms)
}
......
......
......@@ -73,6 +73,7 @@ class UseCases(
store,
tabsUseCases,
sessionUseCases,
engine.settings,
)
}
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment