Skip to content

Commit 95f34a0

Browse files
committed
Merge branch 'hotfix/5.268.1'
2 parents b72f988 + fdfbff2 commit 95f34a0

File tree

3 files changed

+68
-102
lines changed

3 files changed

+68
-102
lines changed

app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt

Lines changed: 67 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,6 @@ class BrowserTabViewModel @Inject constructor(
607607
private var isProcessingTrackingLink = false
608608
private var isLinkOpenedInNewTab = false
609609
private var allowlistRefreshTriggerJob: Job? = null
610-
private var submitQueryJob: Job? = null
611610
private var isCustomTabScreen: Boolean = false
612611
private var alreadyShownKeyboard: Boolean = false
613612
private var pendingDuckChatAuthUpdate: Boolean = false
@@ -1038,7 +1037,6 @@ class BrowserTabViewModel @Inject constructor(
10381037
public override fun onCleared() {
10391038
buildingSiteFactoryJob?.cancel()
10401039
autoCompleteJob.cancel()
1041-
submitQueryJob?.cancel()
10421040
fireproofWebsiteState.removeObserver(fireproofWebsitesObserver)
10431041
navigationAwareLoginDetector.loginEventLiveData.removeObserver(loginDetectionObserver)
10441042
fireproofDialogsEventHandler.event.removeObserver(fireproofDialogEventObserver)
@@ -1244,104 +1242,86 @@ class BrowserTabViewModel @Inject constructor(
12441242
searchCountDao.incrementSearchCount()
12451243
}
12461244

1247-
val currentUrl = url
1248-
val shouldCloseTabForPrivacyPro = webNavigationState?.hasNavigationHistory != true
1245+
val verticalParameter = extractVerticalParameter(url)
1246+
var urlToNavigate = queryUrlConverter.convertQueryToUrl(trimmedInput, verticalParameter, queryOrigin)
12491247

1250-
submitQueryJob?.cancel()
1251-
submitQueryJob =
1252-
viewModelScope.launch(dispatchers.main()) {
1253-
val verticalParameter = extractVerticalParameter(currentUrl)
1254-
var urlToNavigate =
1255-
withContext(dispatchers.io()) {
1256-
queryUrlConverter.convertQueryToUrl(trimmedInput, verticalParameter, queryOrigin)
1248+
when (val type = specialUrlDetector.determineType(trimmedInput)) {
1249+
is ShouldLaunchDuckChatLink -> {
1250+
runCatching {
1251+
logcat { "Duck.ai: ShouldLaunchDuckChatLink $urlToNavigate" }
1252+
val queryParameter = urlToNavigate.toUri().getQueryParameter(QUERY)
1253+
if (queryParameter != null) {
1254+
duckChat.openDuckChatWithPrefill(queryParameter)
1255+
} else {
1256+
duckChat.openDuckChat()
12571257
}
1258-
if (currentGlobalLayoutState() is Invalidated) {
1259-
recoverTabWithQuery(query)
1260-
return@launch
1258+
return
12611259
}
1260+
}
12621261

1263-
when (val type = specialUrlDetector.determineType(trimmedInput)) {
1264-
is ShouldLaunchDuckChatLink -> {
1265-
runCatching {
1266-
logcat { "Duck.ai: ShouldLaunchDuckChatLink $urlToNavigate" }
1267-
val queryParameter = urlToNavigate.toUri().getQueryParameter(QUERY)
1268-
if (queryParameter != null) {
1269-
duckChat.openDuckChatWithPrefill(queryParameter)
1270-
} else {
1271-
duckChat.openDuckChat()
1272-
}
1273-
return@launch
1274-
}
1275-
}
1276-
1277-
is ShouldLaunchPrivacyProLink -> {
1278-
if (shouldCloseTabForPrivacyPro) {
1279-
closeCurrentTab()
1280-
}
1281-
command.value = LaunchPrivacyPro(urlToNavigate.toUri())
1282-
return@launch
1283-
}
1262+
is ShouldLaunchPrivacyProLink -> {
1263+
if (webNavigationState == null || webNavigationState?.hasNavigationHistory == false) {
1264+
closeCurrentTab()
1265+
}
1266+
command.value = LaunchPrivacyPro(urlToNavigate.toUri())
1267+
return
1268+
}
12841269

1285-
is NonHttpAppLink -> {
1286-
nonHttpAppLinkClicked(type)
1287-
}
1270+
is NonHttpAppLink -> {
1271+
nonHttpAppLinkClicked(type)
1272+
}
12881273

1289-
is SpecialUrlDetector.UrlType.CloakedAmpLink -> {
1290-
handleCloakedAmpLink(type.ampUrl)
1291-
}
1274+
is SpecialUrlDetector.UrlType.CloakedAmpLink -> {
1275+
handleCloakedAmpLink(type.ampUrl)
1276+
}
12921277

1293-
else -> {
1294-
if (type is SpecialUrlDetector.UrlType.ExtractedAmpLink) {
1295-
logcat { "AMP link detection: Using extracted URL: ${type.extractedUrl}" }
1296-
urlToNavigate = type.extractedUrl
1297-
} else if (type is SpecialUrlDetector.UrlType.TrackingParameterLink) {
1298-
logcat { "Loading parameter cleaned URL: ${type.cleanedUrl}" }
1299-
urlToNavigate = type.cleanedUrl
1300-
}
1278+
else -> {
1279+
if (type is SpecialUrlDetector.UrlType.ExtractedAmpLink) {
1280+
logcat { "AMP link detection: Using extracted URL: ${type.extractedUrl}" }
1281+
urlToNavigate = type.extractedUrl
1282+
} else if (type is SpecialUrlDetector.UrlType.TrackingParameterLink) {
1283+
logcat { "Loading parameter cleaned URL: ${type.cleanedUrl}" }
1284+
urlToNavigate = type.cleanedUrl
1285+
}
13011286

1302-
if (shouldClearHistoryOnNewQuery()) {
1303-
returnedHomeAfterSiteLoaded = false
1304-
command.value = ResetHistory
1305-
}
1287+
if (shouldClearHistoryOnNewQuery()) {
1288+
returnedHomeAfterSiteLoaded = false
1289+
command.value = ResetHistory
1290+
}
13061291

1307-
fireQueryChangedPixel(trimmedInput)
1292+
fireQueryChangedPixel(trimmedInput)
13081293

1309-
if (!appSettingsPreferencesStore.showAppLinksPrompt) {
1310-
appLinksHandler.updatePreviousUrl(urlToNavigate)
1311-
appLinksHandler.setUserQueryState(true)
1312-
} else {
1313-
clearPreviousUrl()
1314-
}
1315-
1316-
site?.nextUrl = urlToNavigate
1317-
command.value = NavigationCommand.Navigate(urlToNavigate, getUrlHeaders(urlToNavigate))
1318-
}
1294+
if (!appSettingsPreferencesStore.showAppLinksPrompt) {
1295+
appLinksHandler.updatePreviousUrl(urlToNavigate)
1296+
appLinksHandler.setUserQueryState(true)
1297+
} else {
1298+
clearPreviousUrl()
13191299
}
13201300

1321-
globalLayoutState.value = Browser(isNewTabState = false)
1322-
findInPageViewState.value = FindInPageViewState(visible = false)
1323-
omnibarViewState.value =
1324-
currentOmnibarViewState().copy(
1325-
omnibarText = if (isFullUrlEnabled.value) trimmedInput else addressDisplayFormatter.getShortUrl(trimmedInput),
1326-
queryOrFullUrl = trimmedInput,
1327-
forceExpand = true,
1328-
)
1329-
browserViewState.value =
1330-
currentBrowserViewState().copy(
1331-
browserShowing = true,
1332-
browserError = OMITTED,
1333-
sslError = NONE,
1334-
maliciousSiteBlocked = false,
1335-
maliciousSiteStatus = null,
1336-
lastQueryOrigin = queryOrigin,
1337-
)
1338-
autoCompleteViewState.value =
1339-
currentAutoCompleteViewState().copy(
1340-
showSuggestions = false,
1341-
showFavorites = false,
1342-
searchResults = AutoCompleteResult("", emptyList()),
1343-
)
1301+
site?.nextUrl = urlToNavigate
1302+
command.value = NavigationCommand.Navigate(urlToNavigate, getUrlHeaders(urlToNavigate))
13441303
}
1304+
}
1305+
1306+
globalLayoutState.value = Browser(isNewTabState = false)
1307+
findInPageViewState.value = FindInPageViewState(visible = false)
1308+
omnibarViewState.value =
1309+
currentOmnibarViewState().copy(
1310+
omnibarText = if (isFullUrlEnabled.value) trimmedInput else addressDisplayFormatter.getShortUrl(trimmedInput),
1311+
queryOrFullUrl = trimmedInput,
1312+
forceExpand = true,
1313+
)
1314+
browserViewState.value =
1315+
currentBrowserViewState().copy(
1316+
browserShowing = true,
1317+
browserError = OMITTED,
1318+
sslError = NONE,
1319+
maliciousSiteBlocked = false,
1320+
maliciousSiteStatus = null,
1321+
lastQueryOrigin = queryOrigin,
1322+
)
1323+
autoCompleteViewState.value =
1324+
currentAutoCompleteViewState().copy(showSuggestions = false, showFavorites = false, searchResults = AutoCompleteResult("", emptyList()))
13451325
}
13461326

13471327
private fun getUrlHeaders(url: String?): Map<String, String> = url?.let { customHeadersProvider.getCustomHeaders(it) } ?: emptyMap()

app/src/test/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,20 +1439,6 @@ class BrowserTabViewModelTest {
14391439
}
14401440
}
14411441

1442-
@Test
1443-
fun whenGlobalLayoutInvalidatedDuringQueryConversionThenOpenInNewTabAndStateRemainsInvalidated() {
1444-
givenOneActiveTabSelected()
1445-
whenever(mockOmnibarConverter.convertQueryToUrl(any(), anyOrNull(), any(), any())).thenAnswer {
1446-
testee.recoverFromRenderProcessGone()
1447-
"foo.com"
1448-
}
1449-
1450-
testee.onUserSubmittedQuery("foo")
1451-
1452-
assertCommandIssued<Command.OpenInNewTab>()
1453-
assertTrue(testee.globalLayoutState.value is GlobalLayoutViewState.Invalidated)
1454-
}
1455-
14561442
@Test
14571443
fun whenBrowsingAndUrlLoadedThenSiteVisitedEntryAddedToLeaderboardDao() =
14581444
runTest {

app/version/version.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION=5.268.0
1+
VERSION=5.268.1

0 commit comments

Comments
 (0)