diff --git a/android/java/AndroidManifest_intent_filters.xml b/android/java/AndroidManifest_intent_filters.xml
new file mode 100644
index 000000000000..48d72ce04414
--- /dev/null
+++ b/android/java/AndroidManifest_intent_filters.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/java/org/chromium/chrome/browser/BraveIntentHandler.java b/android/java/org/chromium/chrome/browser/BraveIntentHandler.java
index 1258c7ed3d98..0317a921158f 100644
--- a/android/java/org/chromium/chrome/browser/BraveIntentHandler.java
+++ b/android/java/org/chromium/chrome/browser/BraveIntentHandler.java
@@ -6,13 +6,22 @@
package org.chromium.chrome.browser;
import android.app.Activity;
+import android.app.SearchManager;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import org.chromium.base.IntentUtils;
+import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
public class BraveIntentHandler extends IntentHandler {
+ private static final String TAG = "BraveIntentHandler";
+
private static final String CONNECTION_INFO_HELP_URL =
"https://support.google.com/chrome?p=android_connection_info";
private static final String BRAVE_CONNECTION_INFO_HELP_URL =
@@ -45,6 +54,7 @@ protected static String extractUrlFromIntent(Intent intent) {
if (url == null) url = getUrlForWebapp(intent);
if (url == null) url = intent.getDataString();
if (url == null) url = getUrlFromText(intent);
+ if (url == null) url = getWebSearchUrl(intent);
if (url == null) return null;
url = url.trim();
return TextUtils.isEmpty(url) ? null : url;
@@ -56,6 +66,30 @@ protected static String getUrlFromText(Intent intent) {
return (text == null || isJavascriptSchemeOrInvalidUrl(text)) ? null : text;
}
+ protected static String getWebSearchUrl(Intent intent) {
+ final String action = intent.getAction();
+ if (!Intent.ACTION_WEB_SEARCH.equals(action)) {
+ return null;
+ }
+
+ String query = IntentUtils.safeGetStringExtra(intent, SearchManager.QUERY);
+ if (query == null || TextUtils.isEmpty(query)) {
+ return null;
+ }
+
+ try {
+ return ThreadUtils.runOnUiThreadBlocking(new Callable() {
+ @Override
+ public String call() {
+ return TemplateUrlServiceFactory.get().getUrlForSearchQuery(query);
+ }
+ });
+ } catch (ExecutionException e) {
+ Log.e(TAG, "Could not retrieve search query: " + e);
+ }
+ return null;
+ }
+
private static String getUrlForCustomTab(Intent intent) {
assert (false);
return null;
diff --git a/build/android/config.gni b/build/android/config.gni
index c8e22aae8f88..37227fa1abb8 100644
--- a/build/android/config.gni
+++ b/build/android/config.gni
@@ -6,7 +6,10 @@ declare_args() {
brave_android_manifest_includes = []
}
-brave_android_manifest_includes = [ "//brave/android/java/AndroidManifest.xml" ]
+brave_android_manifest_includes = [
+ "//brave/android/java/AndroidManifest.xml",
+ "//brave/android/java/AndroidManifest_intent_filters.xml",
+]
brave_chrome_java_deps = [
"//brave/android/java/org/chromium/chrome/browser/search_engines/settings:java",
diff --git a/patches/chrome-android-java-AndroidManifest.xml.patch b/patches/chrome-android-java-AndroidManifest.xml.patch
index dd4cd11b82b9..169a39cb7ca1 100644
--- a/patches/chrome-android-java-AndroidManifest.xml.patch
+++ b/patches/chrome-android-java-AndroidManifest.xml.patch
@@ -1,5 +1,5 @@
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
-index 64bea5349783a7a0b13540bd40662b4575437ca3..9c88e501f0a1b953fce8183fa2b4ad3eb697738e 100644
+index 64bea5349783a7a0b13540bd40662b4575437ca3..146b7f2349ef1cf494786c922266bdfbc74bdd0e 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -59,7 +59,9 @@ by a child template that "extends" this file.
@@ -61,7 +61,7 @@ index 64bea5349783a7a0b13540bd40662b4575437ca3..9c88e501f0a1b953fce8183fa2b4ad3e
-+
++ {% include "//brave/android/java/AndroidManifest_intent_filters.xml" %}