Create AutocompleteMediator super class instead of patching, for capturing Android URL events in P3A
This commit is contained in:
@@ -282,6 +282,7 @@ brave_java_sources = [
|
||||
"../../brave/android/java/org/chromium/chrome/browser/omnibox/BraveLocationBarMediator.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/omnibox/BraveLocationBarQRDialogFragment.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteMediator.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteMediatorBase.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/onboarding/BraveRewardsOnboardingFragment.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/onboarding/OnViewPagerAction.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/onboarding/OnboardingActivity.java",
|
||||
|
||||
@@ -541,6 +541,10 @@
|
||||
public <init>(...);
|
||||
}
|
||||
|
||||
-keep class org.chromium.chrome.browser.omnibox.suggestions.BraveAutocompleteMediatorBase {
|
||||
public <init>(...);
|
||||
}
|
||||
|
||||
-keep class org.chromium.chrome.browser.notifications.permissions.NotificationPermissionRationaleDialogController {
|
||||
*** wrapDialogDismissalCallback(...);
|
||||
public <init>(...);
|
||||
|
||||
-17
@@ -13,7 +13,6 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import org.chromium.base.Callback;
|
||||
import org.chromium.base.supplier.Supplier;
|
||||
import org.chromium.chrome.browser.app.BraveActivity;
|
||||
import org.chromium.chrome.browser.omnibox.LocationBarDataProvider;
|
||||
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
|
||||
import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor.BookmarkState;
|
||||
@@ -24,13 +23,10 @@ import org.chromium.chrome.browser.profiles.ProfileManager;
|
||||
import org.chromium.chrome.browser.share.ShareDelegate;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.chrome.browser.tabmodel.TabWindowManager;
|
||||
import org.chromium.components.omnibox.AutocompleteMatch;
|
||||
import org.chromium.components.omnibox.OmniboxSuggestionType;
|
||||
import org.chromium.components.omnibox.action.OmniboxActionDelegate;
|
||||
import org.chromium.components.user_prefs.UserPrefs;
|
||||
import org.chromium.ui.modaldialog.ModalDialogManager;
|
||||
import org.chromium.ui.modelutil.PropertyModel;
|
||||
import org.chromium.url.GURL;
|
||||
|
||||
class BraveAutocompleteMediator extends AutocompleteMediator implements BraveSuggestionHost {
|
||||
private static final String AUTOCOMPLETE_ENABLED = "brave.autocomplete_enabled";
|
||||
@@ -78,19 +74,6 @@ class BraveAutocompleteMediator extends AutocompleteMediator implements BraveSug
|
||||
super.onUrlFocusChange(hasFocus);
|
||||
}
|
||||
|
||||
@Override
|
||||
void loadUrlForOmniboxMatch(int matchIndex, @NonNull AutocompleteMatch suggestion,
|
||||
@NonNull GURL url, long inputStart, boolean inVisibleSuggestionList) {
|
||||
super.loadUrlForOmniboxMatch(
|
||||
matchIndex, suggestion, url, inputStart, inVisibleSuggestionList);
|
||||
if (suggestion.getType() == OmniboxSuggestionType.SEARCH_WHAT_YOU_TYPED
|
||||
|| suggestion.getType() == OmniboxSuggestionType.SEARCH_SUGGEST) {
|
||||
if (mContext != null && mContext instanceof BraveActivity) {
|
||||
((BraveActivity) mContext).getMiscAndroidMetrics().recordLocationBarQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeBraveSearchSuggestion() {
|
||||
if (mDropdownViewInfoListManager instanceof BraveDropdownItemViewInfoListManager) {
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.omnibox.suggestions;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.chromium.base.BraveReflectionUtil;
|
||||
import org.chromium.chrome.browser.app.BraveActivity;
|
||||
import org.chromium.components.omnibox.AutocompleteMatch;
|
||||
import org.chromium.components.omnibox.OmniboxSuggestionType;
|
||||
import org.chromium.url.GURL;
|
||||
|
||||
class BraveAutocompleteMediatorBase {
|
||||
void loadUrlForOmniboxMatch(int matchIndex, @NonNull AutocompleteMatch suggestion,
|
||||
@NonNull GURL url, long inputStart, boolean inVisibleSuggestionList) {
|
||||
BraveReflectionUtil.InvokeMethod(AutocompleteMediator.class, this, "loadUrlForOmniboxMatch",
|
||||
int.class, matchIndex, AutocompleteMatch.class, suggestion, GURL.class, url,
|
||||
long.class, inputStart, boolean.class, inVisibleSuggestionList);
|
||||
if (suggestion.getType() == OmniboxSuggestionType.SEARCH_WHAT_YOU_TYPED
|
||||
|| suggestion.getType() == OmniboxSuggestionType.SEARCH_SUGGEST) {
|
||||
Context context = (Context) BraveReflectionUtil.getField(
|
||||
AutocompleteMediator.class, "mContext", this);
|
||||
if (context != null && context instanceof BraveActivity) {
|
||||
((BraveActivity) context).getMiscAndroidMetrics().recordLocationBarQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,11 @@
|
||||
*** createViewProvider(...);
|
||||
}
|
||||
|
||||
-keep class org.chromium.chrome.browser.omnibox.suggestions.AutocompleteMediator {
|
||||
*** mContext;
|
||||
*** loadUrlForOmniboxMatch(...);
|
||||
}
|
||||
|
||||
-keep class org.chromium.components.browser_ui.site_settings.ContentSettingsResources {
|
||||
*** getResourceItem(...);
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ import org.chromium.components.embedder_support.contextmenu.ContextMenuParams;
|
||||
import org.chromium.components.external_intents.ExternalNavigationDelegate;
|
||||
import org.chromium.components.externalauth.ExternalAuthUtils;
|
||||
import org.chromium.components.favicon.LargeIconBridge;
|
||||
import org.chromium.components.omnibox.AutocompleteMatch;
|
||||
import org.chromium.components.omnibox.action.OmniboxActionDelegate;
|
||||
import org.chromium.components.permissions.PermissionDialogController;
|
||||
import org.chromium.content_public.browser.BrowserContextHandle;
|
||||
@@ -140,6 +141,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager;
|
||||
import org.chromium.ui.modelutil.MVCListAdapter;
|
||||
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
|
||||
import org.chromium.ui.modelutil.PropertyModel;
|
||||
import org.chromium.url.GURL;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
@@ -292,6 +294,8 @@ public class BytecodeTest {
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator"));
|
||||
Assert.assertTrue(classExists(
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator"));
|
||||
Assert.assertTrue(classExists(
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteMediatorBase"));
|
||||
Assert.assertTrue(classExists(
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder"));
|
||||
Assert.assertTrue(classExists(
|
||||
@@ -534,6 +538,10 @@ public class BytecodeTest {
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator",
|
||||
"createViewProvider", true, ViewProvider.class, Context.class,
|
||||
MVCListAdapter.ModelList.class));
|
||||
Assert.assertTrue(
|
||||
methodExists("org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator",
|
||||
"loadUrlForOmniboxMatch", true, void.class, int.class,
|
||||
AutocompleteMatch.class, GURL.class, long.class, boolean.class));
|
||||
|
||||
// Check for method type declaration changes here
|
||||
Assert.assertTrue(methodExists(
|
||||
@@ -1015,6 +1023,9 @@ public class BytecodeTest {
|
||||
Assert.assertTrue(
|
||||
fieldExists("org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator",
|
||||
"mDropdownViewInfoListManager"));
|
||||
Assert.assertTrue(
|
||||
fieldExists("org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator",
|
||||
"mContext"));
|
||||
Assert.assertTrue(fieldExists(
|
||||
"org/chromium/chrome/browser/ntp/NewTabPageLayout", "mMvTilesContainerLayout"));
|
||||
Assert.assertTrue(fieldExists(
|
||||
@@ -1126,6 +1137,9 @@ public class BytecodeTest {
|
||||
Assert.assertTrue(checkSuperName(
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator",
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator"));
|
||||
Assert.assertTrue(checkSuperName(
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator",
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteMediatorBase"));
|
||||
Assert.assertTrue(checkSuperName("org/chromium/chrome/browser/omnibox/LocationBarPhone",
|
||||
"org/chromium/chrome/browser/omnibox/BraveLocationBarLayout"));
|
||||
Assert.assertTrue(checkSuperName("org/chromium/chrome/browser/omnibox/LocationBarTablet",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
#else
|
||||
#include "brave/browser/brave_shields/cookie_list_opt_in_service_factory.h"
|
||||
#include "brave/browser/brave_shields/filter_list_service_factory.h"
|
||||
#include "brave/browser/misc_metrics/misc_android_metrics_factory.h"
|
||||
#include "brave/browser/ntp_background/android/ntp_background_images_bridge.h"
|
||||
#endif
|
||||
|
||||
@@ -201,6 +202,10 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
|
||||
#if BUILDFLAG(ENABLE_SPEEDREADER)
|
||||
speedreader::SpeedreaderServiceFactory::GetInstance();
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
misc_metrics::MiscAndroidMetricsFactory::GetInstance();
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace brave
|
||||
|
||||
@@ -14,6 +14,7 @@ java_binary("java_bytecode_rewriter") {
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveAppMenuClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveApplicationImplBaseClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveAutocompleteCoordinatorClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveAutocompleteMediatorBaseClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveAutocompleteMediatorClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveAutofillPopupBridgeClassAdapter.java",
|
||||
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveBookmarkActivityClassAdapter.java",
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.brave.bytecode;
|
||||
|
||||
import org.objectweb.asm.ClassVisitor;
|
||||
|
||||
public class BraveAutocompleteMediatorBaseClassAdapter extends BraveClassVisitor {
|
||||
static String sAutocompleteMediator =
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator";
|
||||
static String sBraveAutocompleteMediatorBase =
|
||||
"org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteMediatorBase";
|
||||
|
||||
public BraveAutocompleteMediatorBaseClassAdapter(ClassVisitor visitor) {
|
||||
super(visitor);
|
||||
|
||||
changeSuperName(sAutocompleteMediator, sBraveAutocompleteMediatorBase);
|
||||
|
||||
makeProtectedField(sAutocompleteMediator, "mContext");
|
||||
changeMethodOwner(
|
||||
sAutocompleteMediator, "loadUrlForOmniboxMatch", sBraveAutocompleteMediatorBase);
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ public class BraveClassAdapter {
|
||||
chain = new BraveAppMenuClassAdapter(chain);
|
||||
chain = new BraveApplicationImplBaseClassAdapter(chain);
|
||||
chain = new BraveAutocompleteCoordinatorClassAdapter(chain);
|
||||
chain = new BraveAutocompleteMediatorBaseClassAdapter(chain);
|
||||
chain = new BraveAutocompleteMediatorClassAdapter(chain);
|
||||
chain = new BraveAutofillPopupBridgeClassAdapter(chain);
|
||||
chain = new BraveBookmarkActivityClassAdapter(chain);
|
||||
|
||||
@@ -124,7 +124,7 @@ brave_jni_headers_sources = [
|
||||
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletDataFilesInstaller.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletNativeUtils.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/informers/BraveSyncAccountDeletedInformer.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/misc_metrics/PrivacyHubMetricsFactory.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/misc_metrics/MiscAndroidMetricsFactory.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationPlatformBridge.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/ntp_background_images/NTPBackgroundImagesBridge.java",
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
|
||||
index f7bcce140aca2638651b13cfb77c2e9bf71e866a..c8b1773894aa20f27125f76d3806ba1977b002dc 100644
|
||||
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
|
||||
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
|
||||
@@ -809,7 +809,7 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener,
|
||||
* @param inputStart The timestamp the input was started.
|
||||
* @param inVisibleSuggestionList Whether the suggestion is in the visible suggestion list.
|
||||
*/
|
||||
- private void loadUrlForOmniboxMatch(int matchIndex, @NonNull AutocompleteMatch suggestion,
|
||||
+ void loadUrlForOmniboxMatch(int matchIndex, @NonNull AutocompleteMatch suggestion,
|
||||
@NonNull GURL url, long inputStart, boolean inVisibleSuggestionList) {
|
||||
try (TraceEvent e = TraceEvent.scoped("AutocompleteMediator.loadUrlFromOmniboxMatch")) {
|
||||
OmniboxMetrics.recordFocusToOpenTime(System.currentTimeMillis() - mUrlFocusTime);
|
||||
@@ -1282,6 +1282,7 @@ if (is_android) {
|
||||
"//third_party/androidx:androidx_test_runner_java",
|
||||
"//third_party/junit",
|
||||
"//ui/android:ui_no_recycler_view_java",
|
||||
"//url:gurl_java",
|
||||
"//url/mojom:url_mojom_gurl_java",
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user