Added Shred settings UI modifications and an additional element to manage the browsing history shredding flag. Resolves: https://github.com/brave/brave-browser/issues/55005 --------- Signed-off-by: Vadym Struts <vstruts@brave.com>
400 lines
16 KiB
C++
400 lines
16 KiB
C++
/* Copyright (c) 2019 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/android/brave_shields_content_settings.h"
|
|
|
|
#include <string>
|
|
|
|
#include "base/android/jni_android.h"
|
|
#include "base/android/jni_string.h"
|
|
#include "base/check.h"
|
|
#include "brave/browser/brave_browser_process.h"
|
|
#include "brave/browser/brave_shields/brave_shields_settings_service_factory.h"
|
|
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
|
|
#include "brave/components/brave_shields/core/browser/brave_shields_settings_service.h"
|
|
#include "brave/components/brave_shields/core/browser/brave_shields_utils.h"
|
|
#include "brave/components/brave_shields/core/common/brave_shields_settings_values.h"
|
|
#include "chrome/android/chrome_jni_headers/BraveShieldsContentSettings_jni.h"
|
|
#include "chrome/browser/browser_process.h"
|
|
#include "chrome/browser/content_settings/cookie_settings_factory.h"
|
|
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
|
|
#include "chrome/browser/profiles/profile.h"
|
|
#include "chrome/browser/profiles/profile_manager.h"
|
|
#include "components/content_settings/core/browser/content_settings_utils.h"
|
|
#include "components/content_settings/core/browser/cookie_settings.h"
|
|
#include "components/content_settings/core/browser/host_content_settings_map.h"
|
|
#include "url/gurl.h"
|
|
|
|
namespace chrome {
|
|
namespace android {
|
|
|
|
|
|
// That class is linked to a global toolbar. It's a one instance on Android
|
|
BraveShieldsContentSettings* g_brave_shields_content_settings = nullptr;
|
|
|
|
static void JNI_BraveShieldsContentSettings_Init(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jobject>& jcaller) {
|
|
g_brave_shields_content_settings =
|
|
new BraveShieldsContentSettings(env, jcaller);
|
|
}
|
|
|
|
BraveShieldsContentSettings::BraveShieldsContentSettings(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jobject>& obj)
|
|
: jobj_(base::android::ScopedJavaGlobalRef<jobject>(obj)) {
|
|
Java_BraveShieldsContentSettings_setNativePtr(env, obj,
|
|
reinterpret_cast<intptr_t>(this));
|
|
}
|
|
|
|
BraveShieldsContentSettings::~BraveShieldsContentSettings() {
|
|
}
|
|
|
|
void BraveShieldsContentSettings::Destroy(JNIEnv* env) {
|
|
g_brave_shields_content_settings = nullptr;
|
|
delete this;
|
|
}
|
|
|
|
void BraveShieldsContentSettings::DispatchBlockedEventToJava(int tab_id,
|
|
const std::string& block_type, const std::string& subresource) {
|
|
JNIEnv* env = base::android::AttachCurrentThread();
|
|
Java_BraveShieldsContentSettings_blockedEvent(
|
|
env, jobj_, tab_id,
|
|
base::android::ConvertUTF8ToJavaString(env, block_type),
|
|
base::android::ConvertUTF8ToJavaString(env, subresource));
|
|
}
|
|
|
|
void BraveShieldsContentSettings::DispatchSavedBandwidthToJava(
|
|
uint64_t savings) {
|
|
JNIEnv* env = base::android::AttachCurrentThread();
|
|
Java_BraveShieldsContentSettings_savedBandwidth(env, jobj_, savings);
|
|
}
|
|
|
|
void BraveShieldsContentSettings::DispatchSavedBandwidth(uint64_t savings) {
|
|
DCHECK(g_brave_shields_content_settings);
|
|
if (!g_brave_shields_content_settings) {
|
|
return;
|
|
}
|
|
g_brave_shields_content_settings->DispatchSavedBandwidthToJava(savings);
|
|
}
|
|
|
|
// static
|
|
void BraveShieldsContentSettings::DispatchBlockedEvent(int tab_id,
|
|
const std::string& block_type, const std::string& subresource) {
|
|
DCHECK(g_brave_shields_content_settings);
|
|
if (!g_brave_shields_content_settings) {
|
|
return;
|
|
}
|
|
g_brave_shields_content_settings->DispatchBlockedEventToJava(tab_id,
|
|
block_type, subresource);
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetBraveShieldsEnabled(
|
|
JNIEnv* env,
|
|
jboolean enabled,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetBraveShieldsEnabled(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
enabled, GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
jboolean JNI_BraveShieldsContentSettings_GetBraveShieldsEnabled(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
return brave_shields::GetBraveShieldsEnabled(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetAdControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetAdControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetAdControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType control_type = brave_shields::GetAdControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(env,
|
|
brave_shields::ControlTypeToString(control_type));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetCookieControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetCookieControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
Profile::FromJavaObject(j_profile)->GetPrefs(),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetCosmeticFilteringControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetCosmeticFilteringControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state(),
|
|
Profile::FromJavaObject(j_profile)->GetPrefs());
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_ResetCosmeticFilter(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url) {
|
|
g_brave_browser_process->ad_block_service()->ResetCosmeticFilter(
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)).host());
|
|
}
|
|
|
|
jboolean JNI_BraveShieldsContentSettings_AreAnyBlockedElementsPresent(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url) {
|
|
return g_brave_browser_process->ad_block_service()
|
|
->AreAnyBlockedElementsPresent(
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)).host());
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetCookieControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType control_type = brave_shields::GetCookieControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
CookieSettingsFactory::GetForProfile(Profile::FromJavaObject(j_profile))
|
|
.get(),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(env,
|
|
brave_shields::ControlTypeToString(control_type));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetFingerprintingControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetFingerprintingControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state(),
|
|
Profile::FromJavaObject(j_profile)->GetPrefs());
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetFingerprintingControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType control_type =
|
|
brave_shields::GetFingerprintingControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(
|
|
env, brave_shields::ControlTypeToString(control_type));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetHttpsUpgradeControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetHttpsUpgradeControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetHttpsUpgradeControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType control_type =
|
|
brave_shields::GetHttpsUpgradeControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(env,
|
|
brave_shields::ControlTypeToString(control_type));
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetCosmeticFilteringControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType cosmetic_type =
|
|
brave_shields::GetCosmeticFilteringControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(
|
|
env, brave_shields::ControlTypeToString(cosmetic_type));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetNoScriptControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& type,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::SetNoScriptControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
brave_shields::ControlTypeFromString(
|
|
base::android::ConvertJavaStringToUTF8(env, type)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)),
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
base::android::ScopedJavaLocalRef<jstring>
|
|
JNI_BraveShieldsContentSettings_GetNoScriptControlType(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
brave_shields::ControlType control_type =
|
|
brave_shields::GetNoScriptControlType(
|
|
HostContentSettingsMapFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile)),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return base::android::ConvertUTF8ToJavaString(env,
|
|
brave_shields::ControlTypeToString(control_type));
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetForgetFirstPartyStorageEnabled(
|
|
JNIEnv* env,
|
|
jboolean enabled,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
brave_shields_settings->SetForgetFirstPartyStorageEnabled(
|
|
enabled, GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
}
|
|
|
|
jboolean JNI_BraveShieldsContentSettings_GetForgetFirstPartyStorageEnabled(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
return brave_shields_settings->GetForgetFirstPartyStorageEnabled(
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
}
|
|
|
|
jboolean
|
|
JNI_BraveShieldsContentSettings_GetAllowElementBlockerInPrivateModeEnabled(
|
|
JNIEnv* env) {
|
|
return brave_shields::GetAllowElementBlockerInPrivateModeEnabled(
|
|
g_browser_process->local_state());
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetAllowElementBlockerInPrivateModeEnabled(
|
|
JNIEnv* env,
|
|
jboolean enabled) {
|
|
brave_shields::SetAllowElementBlockerInPrivateModeEnabled(
|
|
g_browser_process->local_state(), enabled);
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetAutoShredMode(
|
|
JNIEnv* env,
|
|
jint mode,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
std::optional<brave_shields::mojom::AutoShredMode> maybe_mode =
|
|
brave_shields::traits::SettingTraits<
|
|
brave_shields::mojom::AutoShredMode>::From(mode);
|
|
CHECK(maybe_mode.has_value());
|
|
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
brave_shields_settings->SetAutoShredMode(
|
|
maybe_mode.value(),
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
}
|
|
|
|
jint JNI_BraveShieldsContentSettings_GetAutoShredMode(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jstring>& url,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
const auto mode = brave_shields_settings->GetAutoShredMode(
|
|
GURL(base::android::ConvertJavaStringToUTF8(env, url)));
|
|
|
|
return brave_shields::traits::SettingTraits<
|
|
brave_shields::mojom::AutoShredMode>::To(mode);
|
|
}
|
|
|
|
bool JNI_BraveShieldsContentSettings_IsShredBrowsingHistoryEnabled(
|
|
JNIEnv* env,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
return brave_shields_settings->IsShredBrowsingHistoryEnabled();
|
|
}
|
|
|
|
void JNI_BraveShieldsContentSettings_SetShredBrowsingHistory(
|
|
JNIEnv* env,
|
|
bool enabled,
|
|
const base::android::JavaRef<jobject>& j_profile) {
|
|
auto* brave_shields_settings =
|
|
BraveShieldsSettingsServiceFactory::GetForProfile(
|
|
Profile::FromJavaObject(j_profile));
|
|
brave_shields_settings->SetShredBrowsingHistory(enabled);
|
|
}
|
|
|
|
} // namespace android
|
|
} // namespace chrome
|
|
|
|
DEFINE_JNI(BraveShieldsContentSettings)
|