Merge pull request #15063 from brave/cookie_consent_dialog_android
Block cookie consent dialog android
@@ -55,6 +55,8 @@ brave_java_resources = [
|
||||
"java/res/drawable-hdpi/ic_ad_free_videos.png",
|
||||
"java/res/drawable-hdpi/ic_brave_onboarding.png",
|
||||
"java/res/drawable-hdpi/ic_chrome.png",
|
||||
"java/res/drawable-hdpi/ic_cookie.png",
|
||||
"java/res/drawable-hdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-hdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-hdpi/ic_delete_white_24dp.png",
|
||||
"java/res/drawable-hdpi/ic_expand_less_black_24dp.png",
|
||||
@@ -138,6 +140,8 @@ brave_java_resources = [
|
||||
"java/res/drawable-mdpi/ic_ad_free_videos.png",
|
||||
"java/res/drawable-mdpi/ic_brave_onboarding.png",
|
||||
"java/res/drawable-mdpi/ic_chrome.png",
|
||||
"java/res/drawable-mdpi/ic_cookie.png",
|
||||
"java/res/drawable-mdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-mdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-mdpi/ic_delete_white_24dp.png",
|
||||
"java/res/drawable-mdpi/ic_expand_less_black_24dp.png",
|
||||
@@ -179,6 +183,11 @@ brave_java_resources = [
|
||||
"java/res/drawable-mdpi/verified_creator_large.png",
|
||||
"java/res/drawable-mdpi/verified_disclosure.png",
|
||||
"java/res/drawable-mdpi/yandex.png",
|
||||
"java/res/drawable-night-hdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-night-mdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-night-xhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-night-xxhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-night-xxxhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-nodpi/dylan_malval_sea_min.webp",
|
||||
"java/res/drawable-nodpi/eth.png",
|
||||
"java/res/drawable-nodpi/fee_icon.png",
|
||||
@@ -226,6 +235,8 @@ brave_java_resources = [
|
||||
"java/res/drawable-xhdpi/ic_ad_free_videos.png",
|
||||
"java/res/drawable-xhdpi/ic_brave_onboarding.png",
|
||||
"java/res/drawable-xhdpi/ic_chrome.png",
|
||||
"java/res/drawable-xhdpi/ic_cookie.png",
|
||||
"java/res/drawable-xhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-xhdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-xhdpi/ic_delete_white_24dp.png",
|
||||
"java/res/drawable-xhdpi/ic_expand_less_black_24dp.png",
|
||||
@@ -308,6 +319,8 @@ brave_java_resources = [
|
||||
"java/res/drawable-xxhdpi/ic_ad_free_videos.png",
|
||||
"java/res/drawable-xxhdpi/ic_brave_onboarding.png",
|
||||
"java/res/drawable-xxhdpi/ic_chrome.png",
|
||||
"java/res/drawable-xxhdpi/ic_cookie.png",
|
||||
"java/res/drawable-xxhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-xxhdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-xxhdpi/ic_delete_white_24dp.png",
|
||||
"java/res/drawable-xxhdpi/ic_expand_less_black_24dp.png",
|
||||
@@ -389,6 +402,8 @@ brave_java_resources = [
|
||||
"java/res/drawable-xxxhdpi/ic_ad_free_videos.png",
|
||||
"java/res/drawable-xxxhdpi/ic_brave_onboarding.png",
|
||||
"java/res/drawable-xxxhdpi/ic_chrome.png",
|
||||
"java/res/drawable-xxxhdpi/ic_cookie.png",
|
||||
"java/res/drawable-xxxhdpi/ic_cookie_background.png",
|
||||
"java/res/drawable-xxxhdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-xxxhdpi/ic_delete_white_24dp.png",
|
||||
"java/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png",
|
||||
@@ -482,6 +497,7 @@ brave_java_resources = [
|
||||
"java/res/drawable/brave_sync_warning.xml",
|
||||
"java/res/drawable/card_bg.xml",
|
||||
"java/res/drawable/circular_progress.xml",
|
||||
"java/res/drawable/cookie_consent_tooltip_background.xml",
|
||||
"java/res/drawable/crypto_wallet_blue_button.xml",
|
||||
"java/res/drawable/crypto_wallet_hollow_button.xml",
|
||||
"java/res/drawable/default_dot.xml",
|
||||
@@ -712,6 +728,7 @@ brave_java_resources = [
|
||||
"java/res/layout/activity_welcome_onboarding.xml",
|
||||
"java/res/layout/application_item_layout.xml",
|
||||
"java/res/layout/approve_tx_bottom_sheet.xml",
|
||||
"java/res/layout/block_cookie_consent_notices_tooltip.xml",
|
||||
"java/res/layout/bottom_toolbar.xml",
|
||||
"java/res/layout/bottom_toolbar_browsing.xml",
|
||||
"java/res/layout/bottom_toolbar_menu_button.xml",
|
||||
|
||||
@@ -303,6 +303,7 @@ brave_java_sources = [
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsMenuObserver.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/CookieListOptInServiceFactory.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/signin/BraveSigninManager.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/site_settings/BraveSiteSettingsDelegate.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/site_settings/BraveWalletEthereumConnectedSites.java",
|
||||
|
||||
@@ -44,4 +44,7 @@ public final class BravePreferenceKeys {
|
||||
"org.chromium.chrome.browser.Brave_Biometrics_For_Wallet_Encrypted";
|
||||
public static final String BRAVE_AD_FREE_CALLOUT_DIALOG = "brave_ad_free_callout_dialog";
|
||||
public static final String BRAVE_OPENED_YOUTUBE = "brave_opened_youtube";
|
||||
public static final String SHOULD_SHOW_COOKIE_CONSENT_NOTICE =
|
||||
"should_show_cookie_consent_notice";
|
||||
public static final String LOADED_SITE_COUNT = "loaded_site_count";
|
||||
}
|
||||
|
||||
@@ -15,12 +15,14 @@ import androidx.preference.PreferenceCategory;
|
||||
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.base.Log;
|
||||
import org.chromium.brave_shields.mojom.CookieListOptInPageAndroidHandler;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.BraveConfig;
|
||||
import org.chromium.chrome.browser.metrics.UmaSessionStats;
|
||||
import org.chromium.chrome.browser.preferences.BravePref;
|
||||
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
|
||||
import org.chromium.chrome.browser.preferences.Pref;
|
||||
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettings;
|
||||
import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
|
||||
import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
|
||||
@@ -29,14 +31,17 @@ import org.chromium.chrome.browser.settings.BraveDialogPreference;
|
||||
import org.chromium.chrome.browser.settings.BravePreferenceDialogFragment;
|
||||
import org.chromium.chrome.browser.settings.BraveWebrtcPolicyPreference;
|
||||
import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
|
||||
import org.chromium.chrome.browser.shields.CookieListOptInServiceFactory;
|
||||
import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference;
|
||||
import org.chromium.components.browser_ui.settings.ChromeBasePreference;
|
||||
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
|
||||
import org.chromium.components.browser_ui.settings.SettingsUtils;
|
||||
import org.chromium.components.prefs.PrefService;
|
||||
import org.chromium.components.user_prefs.UserPrefs;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
import org.chromium.mojo.system.MojoException;
|
||||
|
||||
public class BravePrivacySettings extends PrivacySettings {
|
||||
public class BravePrivacySettings extends PrivacySettings implements ConnectionErrorHandler {
|
||||
// Chromium Prefs
|
||||
private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
|
||||
private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
|
||||
@@ -64,6 +69,7 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
private static final String PREF_HTTPSE = "httpse";
|
||||
private static final String PREF_DE_AMP = "de_amp";
|
||||
private static final String PREF_IPFS_GATEWAY = "ipfs_gateway";
|
||||
private static final String PREF_BLOCK_COOKIE_CONSENT_NOTICES = "block_cookie_consent_notices";
|
||||
private static final String PREF_AD_BLOCK = "ad_block";
|
||||
private static final String PREF_BLOCK_SCRIPTS = "scripts_block";
|
||||
public static final String PREF_FINGERPRINTING_PROTECTION = "fingerprinting_protection";
|
||||
@@ -105,11 +111,11 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
PREF_OTHER_PRIVACY_SETTINGS_SECTION, // other section
|
||||
PREF_WEBRTC_POLICY, PREF_SAFE_BROWSING, PREF_INCOGNITO_LOCK, PREF_CAN_MAKE_PAYMENT,
|
||||
PREF_UNSTOPPABLE_DOMAINS, PREF_ETH_NAMED_SERVICE, PREF_IPFS_GATEWAY, PREF_SECURE_DNS,
|
||||
PREF_DO_NOT_TRACK, PREF_PHONE_AS_A_SECURITY_KEY, PREF_CLOSE_TABS_ON_EXIT, PREF_SEND_P3A,
|
||||
PREF_SEND_CRASH_REPORTS, PREF_BRAVE_STATS_USAGE_PING,
|
||||
PREF_SHOW_AUTOCOMPLETE_IN_ADDRESS_BAR, PREF_SEARCH_SUGGESTIONS,
|
||||
PREF_AUTOCOMPLETE_TOP_SITES, PREF_AUTOCOMPLETE_BRAVE_SUGGESTED_SITES, PREF_USAGE_STATS,
|
||||
PREF_PRIVACY_SANDBOX};
|
||||
PREF_BLOCK_COOKIE_CONSENT_NOTICES, PREF_DO_NOT_TRACK, PREF_PHONE_AS_A_SECURITY_KEY,
|
||||
PREF_CLOSE_TABS_ON_EXIT, PREF_SEND_P3A, PREF_SEND_CRASH_REPORTS,
|
||||
PREF_BRAVE_STATS_USAGE_PING, PREF_SHOW_AUTOCOMPLETE_IN_ADDRESS_BAR,
|
||||
PREF_SEARCH_SUGGESTIONS, PREF_AUTOCOMPLETE_TOP_SITES,
|
||||
PREF_AUTOCOMPLETE_BRAVE_SUGGESTED_SITES, PREF_USAGE_STATS, PREF_PRIVACY_SANDBOX};
|
||||
|
||||
private final int STRICT = 0;
|
||||
private final int STANDARD = 1;
|
||||
@@ -137,6 +143,7 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
private ChromeSwitchPreference mSendCrashReports;
|
||||
private ChromeSwitchPreference mBraveStatsUsagePing;
|
||||
private ChromeSwitchPreference mIpfsGatewayPref;
|
||||
private ChromeSwitchPreference mBlockCookieConsentNoticesPref;
|
||||
private PreferenceCategory mSocialBlockingCategory;
|
||||
private ChromeSwitchPreference mSocialBlockingGoogle;
|
||||
private ChromeSwitchPreference mHttpsEverywhere;
|
||||
@@ -147,6 +154,31 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
private ChromeSwitchPreference mClearBrowsingDataOnExit;
|
||||
private Preference mUstoppableDomains;
|
||||
private ChromeSwitchPreference mFingerprntLanguagePref;
|
||||
private CookieListOptInPageAndroidHandler mCookieListOptInPageAndroidHandler;
|
||||
|
||||
@Override
|
||||
public void onConnectionError(MojoException e) {
|
||||
mCookieListOptInPageAndroidHandler = null;
|
||||
initCookieListOptInPageAndroidHandler();
|
||||
}
|
||||
|
||||
private void initCookieListOptInPageAndroidHandler() {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mCookieListOptInPageAndroidHandler =
|
||||
CookieListOptInServiceFactory.getInstance().getCookieListOptInPageAndroidHandler(
|
||||
this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.close();
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
@@ -157,6 +189,8 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
|
||||
SettingsUtils.addPreferencesFromResource(this, R.xml.brave_privacy_preferences);
|
||||
|
||||
initCookieListOptInPageAndroidHandler();
|
||||
|
||||
mHttpsePref = (ChromeSwitchPreference) findPreference(PREF_HTTPSE);
|
||||
mHttpsePref.setOnPreferenceChangeListener(this);
|
||||
|
||||
@@ -178,6 +212,10 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
mIpfsGatewayPref = (ChromeSwitchPreference) findPreference(PREF_IPFS_GATEWAY);
|
||||
mIpfsGatewayPref.setOnPreferenceChangeListener(this);
|
||||
|
||||
mBlockCookieConsentNoticesPref =
|
||||
(ChromeSwitchPreference) findPreference(PREF_BLOCK_COOKIE_CONSENT_NOTICES);
|
||||
mBlockCookieConsentNoticesPref.setOnPreferenceChangeListener(this);
|
||||
|
||||
mBlockCrosssiteCookies =
|
||||
(BraveDialogPreference) findPreference(PREF_BLOCK_CROSS_SITE_COOKIES);
|
||||
mBlockCrosssiteCookies.setOnPreferenceChangeListener(this);
|
||||
@@ -245,6 +283,14 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
removePreferenceIfPresent(PREF_PRIVACY_SANDBOX);
|
||||
removePreferenceIfPresent(PREF_SAFE_BROWSING);
|
||||
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.shouldShowDialog(shouldShowDialog -> {
|
||||
if (!shouldShowDialog) {
|
||||
removePreferenceIfPresent(PREF_BLOCK_COOKIE_CONSENT_NOTICES);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateBravePreferences();
|
||||
}
|
||||
|
||||
@@ -295,6 +341,11 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
|
||||
} else if (PREF_IPFS_GATEWAY.equals(key)) {
|
||||
BravePrefServiceBridge.getInstance().setIpfsGatewayEnabled((boolean) newValue);
|
||||
} else if (PREF_BLOCK_COOKIE_CONSENT_NOTICES.equals(key)) {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.enableFilter((boolean) newValue);
|
||||
}
|
||||
|
||||
} else if (PREF_FINGERPRINTING_PROTECTION.equals(key)) {
|
||||
if (newValue instanceof String
|
||||
&& String.valueOf(newValue).equals(
|
||||
@@ -522,6 +573,10 @@ public class BravePrivacySettings extends PrivacySettings {
|
||||
mAutocompleteBraveSuggestedSites.setEnabled(autocompleteEnabled);
|
||||
mFingerprntLanguagePref.setChecked(UserPrefs.get(Profile.getLastUsedRegularProfile())
|
||||
.getBoolean(BravePref.REDUCE_LANGUAGE_ENABLED));
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.isFilterListEnabled(
|
||||
isEnabled -> { mBlockCookieConsentNoticesPref.setChecked(isEnabled); });
|
||||
}
|
||||
}
|
||||
|
||||
private void removePreferenceIfPresent(String key) {
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.shields;
|
||||
|
||||
import org.chromium.base.annotations.JNINamespace;
|
||||
import org.chromium.base.annotations.NativeMethods;
|
||||
import org.chromium.brave_shields.mojom.CookieListOptInPageAndroidHandler;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
|
||||
import org.chromium.chrome.browser.profiles.Profile;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
import org.chromium.mojo.bindings.Interface;
|
||||
import org.chromium.mojo.bindings.Interface.Proxy.Handler;
|
||||
import org.chromium.mojo.system.MessagePipeHandle;
|
||||
import org.chromium.mojo.system.impl.CoreImpl;
|
||||
|
||||
@JNINamespace("chrome::android")
|
||||
public class CookieListOptInServiceFactory {
|
||||
private static final Object lock = new Object();
|
||||
private static CookieListOptInServiceFactory instance;
|
||||
|
||||
public static CookieListOptInServiceFactory getInstance() {
|
||||
synchronized (lock) {
|
||||
if (instance == null) {
|
||||
instance = new CookieListOptInServiceFactory();
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
private CookieListOptInServiceFactory() {}
|
||||
|
||||
public CookieListOptInPageAndroidHandler getCookieListOptInPageAndroidHandler(
|
||||
ConnectionErrorHandler connectionErrorHandler) {
|
||||
Profile profile = Utils.getProfile(false); // Always use regular profile
|
||||
int nativeHandle =
|
||||
CookieListOptInServiceFactoryJni.get().getInterfaceToCookieListOptInService(
|
||||
profile);
|
||||
MessagePipeHandle handle = wrapNativeHandle(nativeHandle);
|
||||
CookieListOptInPageAndroidHandler cookieListOptInPageAndroidHandler =
|
||||
CookieListOptInPageAndroidHandler.MANAGER.attachProxy(handle, 0);
|
||||
Handler handler = ((Interface.Proxy) cookieListOptInPageAndroidHandler).getProxyHandler();
|
||||
handler.setErrorHandler(connectionErrorHandler);
|
||||
|
||||
return cookieListOptInPageAndroidHandler;
|
||||
}
|
||||
|
||||
private MessagePipeHandle wrapNativeHandle(int nativeHandle) {
|
||||
return CoreImpl.getInstance().acquireNativeHandle(nativeHandle).toMessagePipeHandle();
|
||||
}
|
||||
|
||||
@NativeMethods
|
||||
interface Natives {
|
||||
int getInterfaceToCookieListOptInService(Profile profile);
|
||||
}
|
||||
}
|
||||
@@ -53,11 +53,13 @@ import org.chromium.base.ApiCompatibilityUtils;
|
||||
import org.chromium.base.BraveFeatureList;
|
||||
import org.chromium.base.BraveReflectionUtil;
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.base.Log;
|
||||
import org.chromium.base.MathUtils;
|
||||
import org.chromium.base.ThreadUtils;
|
||||
import org.chromium.base.supplier.BooleanSupplier;
|
||||
import org.chromium.base.supplier.ObservableSupplier;
|
||||
import org.chromium.base.task.AsyncTask;
|
||||
import org.chromium.brave_shields.mojom.CookieListOptInPageAndroidHandler;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.BraveAdsNativeHelper;
|
||||
import org.chromium.chrome.browser.BraveRelaunchUtils;
|
||||
@@ -98,6 +100,7 @@ import org.chromium.chrome.browser.settings.BraveSearchEngineUtils;
|
||||
import org.chromium.chrome.browser.shields.BraveShieldsHandler;
|
||||
import org.chromium.chrome.browser.shields.BraveShieldsMenuObserver;
|
||||
import org.chromium.chrome.browser.shields.BraveShieldsUtils;
|
||||
import org.chromium.chrome.browser.shields.CookieListOptInServiceFactory;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.chrome.browser.tab.TabImpl;
|
||||
import org.chromium.chrome.browser.tab.TabSelectionType;
|
||||
@@ -123,6 +126,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities;
|
||||
import org.chromium.components.url_formatter.UrlFormatter;
|
||||
import org.chromium.components.user_prefs.UserPrefs;
|
||||
import org.chromium.content_public.browser.NavigationHandle;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
import org.chromium.mojo.system.MojoException;
|
||||
import org.chromium.ui.UiUtils;
|
||||
import org.chromium.ui.interpolators.BakedBezierInterpolator;
|
||||
import org.chromium.ui.util.ColorUtils;
|
||||
@@ -143,7 +148,8 @@ import java.util.Set;
|
||||
|
||||
public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
implements BraveToolbarLayout, OnClickListener, View.OnLongClickListener,
|
||||
BraveRewardsObserver, BraveRewardsNativeWorker.PublisherObserver {
|
||||
BraveRewardsObserver, BraveRewardsNativeWorker.PublisherObserver,
|
||||
ConnectionErrorHandler {
|
||||
private static final String JAPAN_COUNTRY_CODE = "JP";
|
||||
private static final String YOUTUBE_DOMAIN = "youtube.com";
|
||||
private static final List<String> mBraveSearchEngineDefaultRegions =
|
||||
@@ -181,6 +187,7 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
private boolean mIsInitialNotificationPosted; // initial red circle notification
|
||||
|
||||
private PopupWindowTooltip mShieldsPopupWindowTooltip;
|
||||
private PopupWindowTooltip mCookieConsentTooltip;
|
||||
|
||||
private boolean mIsBottomToolbarVisible;
|
||||
|
||||
@@ -190,6 +197,8 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
private final Set<Integer> mTabsWithWalletIcon =
|
||||
Collections.synchronizedSet(new HashSet<Integer>());
|
||||
|
||||
private CookieListOptInPageAndroidHandler mCookieListOptInPageAndroidHandler;
|
||||
|
||||
private enum BIGTECH_COMPANY { Google, Facebook, Amazon }
|
||||
|
||||
public BraveToolbarLayoutImpl(Context context, AttributeSet attrs) {
|
||||
@@ -201,8 +210,10 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
if (mBraveShieldsContentSettings != null) {
|
||||
mBraveShieldsContentSettings.removeObserver(mBraveShieldsContentSettingsObserver);
|
||||
}
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.close();
|
||||
}
|
||||
super.destroy();
|
||||
|
||||
if (mBraveRewardsNativeWorker != null) {
|
||||
mBraveRewardsNativeWorker.RemoveObserver(this);
|
||||
mBraveRewardsNativeWorker.RemovePublisherObserver(this);
|
||||
@@ -336,9 +347,26 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionError(MojoException e) {
|
||||
mCookieListOptInPageAndroidHandler = null;
|
||||
initCookieListOptInPageAndroidHandler();
|
||||
}
|
||||
|
||||
private void initCookieListOptInPageAndroidHandler() {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mCookieListOptInPageAndroidHandler =
|
||||
CookieListOptInServiceFactory.getInstance().getCookieListOptInPageAndroidHandler(
|
||||
this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNativeLibraryReady() {
|
||||
super.onNativeLibraryReady();
|
||||
initCookieListOptInPageAndroidHandler();
|
||||
mBraveShieldsContentSettings = BraveShieldsContentSettings.getInstance();
|
||||
mBraveShieldsContentSettings.addObserver(mBraveShieldsContentSettingsObserver);
|
||||
|
||||
@@ -409,6 +437,17 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
&& mBraveShieldsHandler != null && !mBraveShieldsHandler.isShowing()) {
|
||||
checkForTooltip(tab);
|
||||
}
|
||||
if (mBraveShieldsButton != null && mBraveShieldsButton.isShown()
|
||||
&& mBraveShieldsHandler != null && !mBraveShieldsHandler.isShowing()
|
||||
&& !url.getSpec().startsWith(UrlConstants.CHROME_SCHEME)
|
||||
&& !UrlUtilities.isNTPUrl(url.getSpec())) {
|
||||
SharedPreferencesManager.getInstance().writeInt(
|
||||
BravePreferenceKeys.LOADED_SITE_COUNT,
|
||||
SharedPreferencesManager.getInstance().readInt(
|
||||
BravePreferenceKeys.LOADED_SITE_COUNT, 0)
|
||||
+ 1);
|
||||
maybeShowCookieConsentTooltip();
|
||||
}
|
||||
}
|
||||
|
||||
String countryCode = Locale.getDefault().getCountry();
|
||||
@@ -581,6 +620,72 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
}
|
||||
}
|
||||
|
||||
private void maybeShowCookieConsentTooltip() {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.shouldShowDialog(shouldShowDialog -> {
|
||||
mCookieListOptInPageAndroidHandler.isFilterListEnabled(isEnabled -> {
|
||||
if (!isEnabled && shouldShowDialog
|
||||
&& SharedPreferencesManager.getInstance().readBoolean(
|
||||
BravePreferenceKeys.SHOULD_SHOW_COOKIE_CONSENT_NOTICE, true)
|
||||
&& SharedPreferencesManager.getInstance().readInt(
|
||||
BravePreferenceKeys.LOADED_SITE_COUNT, 0)
|
||||
> 5) {
|
||||
showCookieConsentTooltip();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void showCookieConsentTooltip() {
|
||||
ViewGroup viewGroup =
|
||||
BraveActivity.getBraveActivity().getWindow().getDecorView().findViewById(
|
||||
android.R.id.content);
|
||||
float padding = (float) dpToPx(getContext(), 20);
|
||||
mCookieConsentTooltip = new PopupWindowTooltip.Builder(getContext())
|
||||
.anchorView(mBraveShieldsButton)
|
||||
.arrowColor(ContextCompat.getColor(
|
||||
getContext(), R.color.cookie_consent_tooltip_color))
|
||||
.gravity(Gravity.BOTTOM)
|
||||
.dismissOnOutsideTouch(true)
|
||||
.dismissOnInsideTouch(false)
|
||||
.backgroundDimDisabled(false)
|
||||
.padding(padding)
|
||||
.parentPaddingHorizontal(dpToPx(getContext(), 10))
|
||||
.modal(true)
|
||||
.onDismissListener(tooltip
|
||||
-> {
|
||||
|
||||
})
|
||||
.contentView(R.layout.block_cookie_consent_notices_tooltip)
|
||||
.build();
|
||||
|
||||
Button btnAction = mCookieConsentTooltip.findViewById(R.id.btn_action);
|
||||
btnAction.setOnClickListener((new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mCookieListOptInPageAndroidHandler != null) {
|
||||
mCookieListOptInPageAndroidHandler.enableFilter(true);
|
||||
}
|
||||
mCookieConsentTooltip.dismiss();
|
||||
}
|
||||
}));
|
||||
|
||||
TextView txtNoThanks = mCookieConsentTooltip.findViewById(R.id.txt_no_thanks);
|
||||
txtNoThanks.setOnClickListener((new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mCookieConsentTooltip.dismiss();
|
||||
}
|
||||
}));
|
||||
|
||||
if (mBraveShieldsButton != null && mBraveShieldsButton.isShown()) {
|
||||
mCookieConsentTooltip.show();
|
||||
SharedPreferencesManager.getInstance().writeBoolean(
|
||||
BravePreferenceKeys.SHOULD_SHOW_COOKIE_CONSENT_NOTICE, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void dismissShieldsTooltip() {
|
||||
if (mShieldsPopupWindowTooltip != null && mShieldsPopupWindowTooltip.isShowing()) {
|
||||
mShieldsPopupWindowTooltip.dismiss();
|
||||
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 34 KiB |
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item android:drawable="@drawable/ic_cookie_background" />
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<corners android:radius="8dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/shields_tooltip_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/cookie_consent_tooltip_background"
|
||||
android:fadeScrollbars="false">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
app:srcCompat="@drawable/ic_cookie"
|
||||
android:contentDescription="@null" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="24sp"
|
||||
android:layout_marginTop="22dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/block_cookie_notices_title"
|
||||
android:textColor="@color/cookie_consent_text_color"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/block_cookie_notices_text"
|
||||
android:textColor="@color/cookie_consent_text_color"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btn_action"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/crypto_wallet_blue_button"
|
||||
android:text="@string/block_cookie_notices_action_text"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="14sp"
|
||||
android:paddingVertical="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:textColor="@android:color/white"
|
||||
style="?android:attr/borderlessButtonStyle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txt_no_thanks"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="30dp"
|
||||
android:text="@string/no_thanks"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/cookie_consent_action_color"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
@@ -120,4 +120,8 @@
|
||||
|
||||
<!-- Brave Wallet DApp -->
|
||||
<color name="brave_wallet_dapp_text_color">@android:color/white</color>
|
||||
|
||||
<color name="cookie_consent_action_color">@android:color/white</color>
|
||||
<color name="cookie_consent_text_color">#F0F2FF</color>
|
||||
<color name="cookie_consent_tooltip_color">#1E2029</color>
|
||||
</resources>
|
||||
|
||||
@@ -212,4 +212,8 @@
|
||||
|
||||
<!-- Brave Wallet DApp -->
|
||||
<color name="brave_wallet_dapp_text_color">#171919</color>
|
||||
|
||||
<color name="cookie_consent_action_color">@color/brave_action_color</color>
|
||||
<color name="cookie_consent_text_color">#212529</color>
|
||||
<color name="cookie_consent_tooltip_color">@android:color/white</color>
|
||||
</resources>
|
||||
|
||||
@@ -108,6 +108,12 @@
|
||||
android:title="@string/ipfs_gateway_title"
|
||||
android:summary="@string/ipfs_gateway_summary"
|
||||
android:defaultValue="true" />
|
||||
<org.chromium.components.browser_ui.settings.ChromeSwitchPreference
|
||||
android:key="block_cookie_consent_notices"
|
||||
android:order="25"
|
||||
android:title="@string/block_cookie_consent_notices_title"
|
||||
android:summary="@string/block_cookie_consent_notices_summary"
|
||||
android:defaultValue="false" />
|
||||
<Preference
|
||||
android:fragment="org.chromium.chrome.browser.decentralized_dns.settings.UnstoppableDomainsSettingsFragment"
|
||||
android:key="unstoppable_domains"
|
||||
|
||||
@@ -563,7 +563,8 @@ constexpr char kBraveVerticalTabsDescription[] =
|
||||
{"brave-adblock-cookie-list-opt-in", \
|
||||
flag_descriptions::kBraveAdblockCookieListOptInName, \
|
||||
flag_descriptions::kBraveAdblockCookieListOptInDescription, \
|
||||
kOsDesktop, FEATURE_VALUE_TYPE(kBraveAdblockCookieListOptIn)}, \
|
||||
kOsDesktop | kOsAndroid, \
|
||||
FEATURE_VALUE_TYPE(kBraveAdblockCookieListOptIn)}, \
|
||||
{"brave-adblock-cosmetic-filtering", \
|
||||
flag_descriptions::kBraveAdblockCosmeticFilteringName, \
|
||||
flag_descriptions::kBraveAdblockCosmeticFilteringDescription, kOsAll, \
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
#include "base/android/jni_android.h"
|
||||
#include "brave/browser/brave_shields/cookie_list_opt_in_service_factory.h"
|
||||
#include "brave/build/android/jni_headers/CookieListOptInServiceFactory_jni.h"
|
||||
#include "chrome/browser/profiles/profile.h"
|
||||
#include "chrome/browser/profiles/profile_android.h"
|
||||
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
||||
|
||||
namespace chrome {
|
||||
namespace android {
|
||||
static jint
|
||||
JNI_CookieListOptInServiceFactory_GetInterfaceToCookieListOptInService(
|
||||
JNIEnv* env,
|
||||
const base::android::JavaParamRef<jobject>& profile_android) {
|
||||
auto* profile = ProfileAndroid::FromProfileAndroid(profile_android);
|
||||
auto pending = brave_shields::CookieListOptInServiceFactory::GetInstance()
|
||||
->GetForContext(profile);
|
||||
|
||||
return static_cast<jint>(pending.PassPipe().release().value());
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
} // namespace chrome
|
||||
@@ -0,0 +1,66 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "brave/browser/brave_shields/cookie_list_opt_in_service_factory.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "brave/browser/brave_browser_process.h"
|
||||
#include "brave/components/brave_shields/browser/cookie_list_opt_in_service.h"
|
||||
#include "chrome/browser/profiles/incognito_helpers.h"
|
||||
#include "components/keyed_service/content/browser_context_dependency_manager.h"
|
||||
|
||||
namespace brave_shields {
|
||||
|
||||
// static
|
||||
CookieListOptInServiceFactory* CookieListOptInServiceFactory::GetInstance() {
|
||||
return base::Singleton<CookieListOptInServiceFactory>::get();
|
||||
}
|
||||
|
||||
// static
|
||||
mojo::PendingRemote<mojom::CookieListOptInPageAndroidHandler>
|
||||
CookieListOptInServiceFactory::GetForContext(content::BrowserContext* context) {
|
||||
return static_cast<CookieListOptInService*>(
|
||||
GetInstance()->GetServiceForBrowserContext(context, true))
|
||||
->MakeRemote();
|
||||
}
|
||||
|
||||
// static
|
||||
CookieListOptInService* CookieListOptInServiceFactory::GetServiceForContext(
|
||||
content::BrowserContext* context) {
|
||||
return static_cast<CookieListOptInService*>(
|
||||
GetInstance()->GetServiceForBrowserContext(context, true));
|
||||
}
|
||||
|
||||
// static
|
||||
void CookieListOptInServiceFactory::BindForContext(
|
||||
content::BrowserContext* context,
|
||||
mojo::PendingReceiver<mojom::CookieListOptInPageAndroidHandler> receiver) {
|
||||
auto* cookie_list_opt_in_service =
|
||||
CookieListOptInServiceFactory::GetServiceForContext(context);
|
||||
if (cookie_list_opt_in_service) {
|
||||
cookie_list_opt_in_service->Bind(std::move(receiver));
|
||||
}
|
||||
}
|
||||
|
||||
CookieListOptInServiceFactory::CookieListOptInServiceFactory()
|
||||
: BrowserContextKeyedServiceFactory(
|
||||
"CookieListOptInService",
|
||||
BrowserContextDependencyManager::GetInstance()) {}
|
||||
|
||||
CookieListOptInServiceFactory::~CookieListOptInServiceFactory() = default;
|
||||
|
||||
KeyedService* CookieListOptInServiceFactory::BuildServiceInstanceFor(
|
||||
content::BrowserContext* context) const {
|
||||
auto* ad_block_service = g_brave_browser_process->ad_block_service();
|
||||
return new CookieListOptInService(ad_block_service);
|
||||
}
|
||||
|
||||
content::BrowserContext* CookieListOptInServiceFactory::GetBrowserContextToUse(
|
||||
content::BrowserContext* context) const {
|
||||
return chrome::GetBrowserContextRedirectedInIncognito(context);
|
||||
}
|
||||
|
||||
} // namespace brave_shields
|
||||
@@ -0,0 +1,49 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef BRAVE_BROWSER_BRAVE_SHIELDS_COOKIE_LIST_OPT_IN_SERVICE_FACTORY_H_
|
||||
#define BRAVE_BROWSER_BRAVE_SHIELDS_COOKIE_LIST_OPT_IN_SERVICE_FACTORY_H_
|
||||
|
||||
#include "base/memory/singleton.h"
|
||||
#include "brave/components/brave_shields/common/cookie_list_opt_in.mojom.h"
|
||||
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
|
||||
#include "components/keyed_service/core/keyed_service.h"
|
||||
#include "content/public/browser/browser_context.h"
|
||||
#include "mojo/public/cpp/bindings/pending_remote.h"
|
||||
|
||||
namespace brave_shields {
|
||||
|
||||
class CookieListOptInService;
|
||||
|
||||
class CookieListOptInServiceFactory : public BrowserContextKeyedServiceFactory {
|
||||
public:
|
||||
CookieListOptInServiceFactory(const CookieListOptInServiceFactory&) = delete;
|
||||
CookieListOptInServiceFactory& operator=(
|
||||
const CookieListOptInServiceFactory&) = delete;
|
||||
|
||||
static mojo::PendingRemote<mojom::CookieListOptInPageAndroidHandler>
|
||||
GetForContext(content::BrowserContext* context);
|
||||
static CookieListOptInService* GetServiceForContext(
|
||||
content::BrowserContext* context);
|
||||
static CookieListOptInServiceFactory* GetInstance();
|
||||
static void BindForContext(
|
||||
content::BrowserContext* context,
|
||||
mojo::PendingReceiver<mojom::CookieListOptInPageAndroidHandler> receiver);
|
||||
|
||||
private:
|
||||
friend struct base::DefaultSingletonTraits<CookieListOptInServiceFactory>;
|
||||
|
||||
CookieListOptInServiceFactory();
|
||||
~CookieListOptInServiceFactory() override;
|
||||
|
||||
KeyedService* BuildServiceInstanceFor(
|
||||
content::BrowserContext* context) const override;
|
||||
content::BrowserContext* GetBrowserContextToUse(
|
||||
content::BrowserContext* context) const override;
|
||||
};
|
||||
|
||||
} // namespace brave_shields
|
||||
|
||||
#endif // BRAVE_BROWSER_BRAVE_SHIELDS_COOKIE_LIST_OPT_IN_SERVICE_FACTORY_H_
|
||||
@@ -10,6 +10,8 @@ brave_browser_brave_shields_sources = [
|
||||
"//brave/browser/brave_shields/ad_block_subscription_download_manager_getter.h",
|
||||
"//brave/browser/brave_shields/brave_shields_web_contents_observer.cc",
|
||||
"//brave/browser/brave_shields/brave_shields_web_contents_observer.h",
|
||||
"//brave/browser/brave_shields/cookie_list_opt_in_service_factory.cc",
|
||||
"//brave/browser/brave_shields/cookie_list_opt_in_service_factory.h",
|
||||
"//brave/browser/brave_shields/https_everywhere_component_installer.cc",
|
||||
"//brave/browser/brave_shields/https_everywhere_component_installer.h",
|
||||
]
|
||||
@@ -34,7 +36,12 @@ brave_browser_brave_shields_deps = [
|
||||
]
|
||||
|
||||
if (is_android) {
|
||||
brave_browser_brave_shields_sources += [ "//brave/browser/brave_shields/brave_shields_web_contents_observer_android.cc" ]
|
||||
brave_browser_brave_shields_deps +=
|
||||
[ "//brave/browser/android:android_browser_process" ]
|
||||
brave_browser_brave_shields_sources += [
|
||||
"//brave/browser/brave_shields/android/cookie_list_opt_in_service_factory_android.cc",
|
||||
"//brave/browser/brave_shields/brave_shields_web_contents_observer_android.cc",
|
||||
]
|
||||
brave_browser_brave_shields_deps += [
|
||||
"//brave/browser/android:android_browser_process",
|
||||
"//brave/build/android:jni_headers",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -212,6 +212,12 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
|
||||
<message name="IDS_IPFS_GATEWAY_SUMMARY" desc="Summary for IPFS gateway setting.">
|
||||
Allows for navigation to IPFS resources through an IPFS Gateway
|
||||
</message>
|
||||
<message name="IDS_BLOCK_COOKIE_CONSENT_NOTICES_TITLE" desc="Title for Block cookie consent notices setting.">
|
||||
Block cookie consent notices
|
||||
</message>
|
||||
<message name="IDS_BLOCK_COOKIE_CONSENT_NOTICES_SUMMARY" desc="Summary for Block cookie consent notices setting.">
|
||||
Blocks website pop-ups that ask you to accept / decline cookies on their site
|
||||
</message>
|
||||
<message name="IDS_UNSTOPPABLE_DOMAINS_TITLE" desc="Title for Unstoppable Domains settings.">
|
||||
Unstoppable Domains
|
||||
</message>
|
||||
@@ -2947,6 +2953,15 @@ If you don't accept this request, VPN will not reconnect and your internet conne
|
||||
<message name="IDS_BACKUP_WALLET_PASSWORD" desc="Brave Wallet prompt to enter a password">
|
||||
Enter your Brave Wallet password
|
||||
</message>
|
||||
<message name="IDS_BLOCK_COOKIE_NOTICES_ACTION_TEXT" desc="Block cookie consent notices action text">
|
||||
Block cookie notices
|
||||
</message>
|
||||
<message name="IDS_BLOCK_COOKIE_NOTICES_TITLE" desc="Block cookie consent notices title">
|
||||
Tired of cookie consent notices?
|
||||
</message>
|
||||
<message name="IDS_BLOCK_COOKIE_NOTICES_TEXT" desc="Block cookie consent notices text">
|
||||
Brave already blocks third-party cookies. We can block cookie consent notices, too.
|
||||
</message>
|
||||
</messages>
|
||||
</release>
|
||||
</grit>
|
||||
|
||||
@@ -198,6 +198,7 @@ generate_jni("jni_headers") {
|
||||
"//brave/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettings.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/shields/CookieListOptInServiceFactory.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/signin/BraveSigninManager.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/sync/BraveSyncDevices.java",
|
||||
"//brave/android/java/org/chromium/chrome/browser/vpn/BraveVpnNativeWorker.java",
|
||||
|
||||
@@ -20,6 +20,7 @@ brave_chrome_java_deps = [
|
||||
"//brave/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/settings:java",
|
||||
"//brave/browser/ui/android/omnibox:java",
|
||||
"//brave/browser/ui/android/theme:java",
|
||||
"//brave/components/brave_shields/common:mojom_java",
|
||||
"//brave/components/brave_today/common:mojom_java",
|
||||
"//brave/components/brave_wallet/common:mojom_java",
|
||||
"//brave/components/browser_ui/site_settings/android:java",
|
||||
|
||||
@@ -42,6 +42,8 @@ if (!is_ios) {
|
||||
"brave_shields_p3a.h",
|
||||
"brave_shields_util.cc",
|
||||
"brave_shields_util.h",
|
||||
"cookie_list_opt_in_service.cc",
|
||||
"cookie_list_opt_in_service.h",
|
||||
"domain_block_controller_client.cc",
|
||||
"domain_block_controller_client.h",
|
||||
"domain_block_navigation_throttle.cc",
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "brave/components/brave_shields/browser/cookie_list_opt_in_service.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "base/feature_list.h"
|
||||
#include "brave/components/brave_shields/browser/ad_block_regional_service_manager.h"
|
||||
#include "brave/components/brave_shields/browser/ad_block_service.h"
|
||||
#include "brave/components/brave_shields/common/brave_shield_constants.h"
|
||||
#include "brave/components/brave_shields/common/cookie_list_opt_in.mojom-forward.h"
|
||||
#include "brave/components/brave_shields/common/cookie_list_opt_in.mojom-shared.h"
|
||||
#include "brave/components/brave_shields/common/features.h"
|
||||
|
||||
namespace brave_shields {
|
||||
CookieListOptInService::CookieListOptInService(AdBlockService* ad_block_service)
|
||||
: ad_block_service_(ad_block_service) {}
|
||||
|
||||
CookieListOptInService::~CookieListOptInService() = default;
|
||||
|
||||
mojo::PendingRemote<mojom::CookieListOptInPageAndroidHandler>
|
||||
CookieListOptInService::MakeRemote() {
|
||||
mojo::PendingRemote<mojom::CookieListOptInPageAndroidHandler> remote;
|
||||
receivers_.Add(this, remote.InitWithNewPipeAndPassReceiver());
|
||||
return remote;
|
||||
}
|
||||
|
||||
void CookieListOptInService::Bind(
|
||||
mojo::PendingReceiver<mojom::CookieListOptInPageAndroidHandler> receiver) {
|
||||
receivers_.Add(this, std::move(receiver));
|
||||
}
|
||||
|
||||
void CookieListOptInService::ShouldShowDialog(
|
||||
ShouldShowDialogCallback callback) {
|
||||
bool should_show_dialog =
|
||||
base::FeatureList::IsEnabled(
|
||||
brave_shields::features::kBraveAdblockCookieListOptIn) &&
|
||||
ad_block_service_->regional_service_manager()->IsFilterListAvailable(
|
||||
brave_shields::kCookieListUuid);
|
||||
std::move(callback).Run(should_show_dialog);
|
||||
}
|
||||
|
||||
void CookieListOptInService::IsFilterListEnabled(
|
||||
IsFilterListEnabledCallback callback) {
|
||||
std::move(callback).Run(
|
||||
ad_block_service_->regional_service_manager()->IsFilterListEnabled(
|
||||
brave_shields::kCookieListUuid));
|
||||
}
|
||||
|
||||
void CookieListOptInService::EnableFilter(bool shouldEnableFilter) {
|
||||
ad_block_service_->regional_service_manager()->EnableFilterList(
|
||||
brave_shields::kCookieListUuid, shouldEnableFilter);
|
||||
}
|
||||
|
||||
} // namespace brave_shields
|
||||
@@ -0,0 +1,46 @@
|
||||
/* Copyright (c) 2022 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 http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef BRAVE_COMPONENTS_BRAVE_SHIELDS_BROWSER_COOKIE_LIST_OPT_IN_SERVICE_H_
|
||||
#define BRAVE_COMPONENTS_BRAVE_SHIELDS_BROWSER_COOKIE_LIST_OPT_IN_SERVICE_H_
|
||||
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "brave/components/brave_shields/common/cookie_list_opt_in.mojom-forward.h"
|
||||
#include "brave/components/brave_shields/common/cookie_list_opt_in.mojom.h"
|
||||
#include "components/keyed_service/core/keyed_service.h"
|
||||
#include "mojo/public/cpp/bindings/pending_remote.h"
|
||||
#include "mojo/public/cpp/bindings/receiver_set.h"
|
||||
#include "mojo/public/cpp/bindings/remote_set.h"
|
||||
|
||||
namespace brave_shields {
|
||||
class AdBlockService;
|
||||
|
||||
// This class is not thread-safe and should have single owner
|
||||
class CookieListOptInService : public KeyedService,
|
||||
public mojom::CookieListOptInPageAndroidHandler {
|
||||
public:
|
||||
explicit CookieListOptInService(AdBlockService* ad_block_service);
|
||||
~CookieListOptInService() override;
|
||||
|
||||
mojo::PendingRemote<mojom::CookieListOptInPageAndroidHandler> MakeRemote();
|
||||
void Bind(
|
||||
mojo::PendingReceiver<mojom::CookieListOptInPageAndroidHandler> receiver);
|
||||
|
||||
void ShouldShowDialog(ShouldShowDialogCallback callback) override;
|
||||
void IsFilterListEnabled(IsFilterListEnabledCallback callback) override;
|
||||
void EnableFilter(bool shouldEnableFilter) override;
|
||||
|
||||
private:
|
||||
raw_ptr<AdBlockService> ad_block_service_ = nullptr;
|
||||
mojo::ReceiverSet<mojom::CookieListOptInPageAndroidHandler> receivers_;
|
||||
base::WeakPtrFactory<CookieListOptInService> discovery_weak_factory_{this};
|
||||
|
||||
CookieListOptInService(const CookieListOptInService&) = delete;
|
||||
CookieListOptInService& operator=(const CookieListOptInService&) = delete;
|
||||
};
|
||||
|
||||
} // namespace brave_shields
|
||||
|
||||
#endif // BRAVE_COMPONENTS_BRAVE_SHIELDS_BROWSER_COOKIE_LIST_OPT_IN_SERVICE_H_
|
||||
@@ -27,6 +27,7 @@ static_library("common") {
|
||||
}
|
||||
|
||||
mojom("mojom") {
|
||||
generate_java = true
|
||||
sources = [
|
||||
"brave_shields.mojom",
|
||||
"brave_shields_panel.mojom",
|
||||
|
||||
@@ -14,3 +14,9 @@ interface CookieListOptInPageHandler {
|
||||
CloseUI();
|
||||
EnableFilter();
|
||||
};
|
||||
|
||||
interface CookieListOptInPageAndroidHandler {
|
||||
ShouldShowDialog() => (bool should_show_dialog);
|
||||
IsFilterListEnabled() => (bool is_enabled);
|
||||
EnableFilter(bool should_enable_filter);
|
||||
};
|
||||
|
||||