Commit b5f662a6 authored by Xinghui Lu's avatar Xinghui Lu Committed by Commit Bot

Add high confidence allowlist check on Android

Since high confidence allowlist is currently not available on GMSCore,
we plan to have it hardcoded in our code. This is similar to what we
have done for CSD allowlist.

Bug: 1014202
Change-Id: I5489b3d4ed56b8dd7ad7a79ea205b403b444a077
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1860980Reviewed-by: default avatarDaniel Rubery <drubery@chromium.org>
Commit-Queue: Xinghui Lu <xinghuilu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706280}
parent d4363fe3
...@@ -239,8 +239,14 @@ RemoteSafeBrowsingDatabaseManager::CheckUrlForHighConfidenceAllowlist( ...@@ -239,8 +239,14 @@ RemoteSafeBrowsingDatabaseManager::CheckUrlForHighConfidenceAllowlist(
const GURL& url, const GURL& url,
Client* client) { Client* client) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
// TODO(crbug.com/1014202): Add local high confidence allowlist.
if (!enabled_ || !CanCheckUrl(url))
return AsyncMatch::NO_MATCH; return AsyncMatch::NO_MATCH;
// TODO(crbug.com/1014202): Make this call async.
SafeBrowsingApiHandler* api_handler = SafeBrowsingApiHandler::GetInstance();
bool is_match = api_handler->StartHighConfidenceAllowlistCheck(url);
return is_match ? AsyncMatch::MATCH : AsyncMatch::NO_MATCH;
} }
bool RemoteSafeBrowsingDatabaseManager::CheckUrlForSubresourceFilter( bool RemoteSafeBrowsingDatabaseManager::CheckUrlForSubresourceFilter(
......
...@@ -28,6 +28,9 @@ class TestSafeBrowsingApiHandler : public SafeBrowsingApiHandler { ...@@ -28,6 +28,9 @@ class TestSafeBrowsingApiHandler : public SafeBrowsingApiHandler {
const GURL& url, const GURL& url,
const SBThreatTypeSet& threat_types) override {} const SBThreatTypeSet& threat_types) override {}
bool StartCSDAllowlistCheck(const GURL& url) override { return false; } bool StartCSDAllowlistCheck(const GURL& url) override { return false; }
bool StartHighConfidenceAllowlistCheck(const GURL& url) override {
return false;
}
}; };
} // namespace } // namespace
......
...@@ -38,6 +38,8 @@ class SafeBrowsingApiHandler { ...@@ -38,6 +38,8 @@ class SafeBrowsingApiHandler {
virtual bool StartCSDAllowlistCheck(const GURL& url) = 0; virtual bool StartCSDAllowlistCheck(const GURL& url) = 0;
virtual bool StartHighConfidenceAllowlistCheck(const GURL& url) = 0;
virtual ~SafeBrowsingApiHandler() {} virtual ~SafeBrowsingApiHandler() {}
private: private:
......
...@@ -65,6 +65,8 @@ int SBThreatTypeToJavaThreatType(const SBThreatType& sb_threat_type) { ...@@ -65,6 +65,8 @@ int SBThreatTypeToJavaThreatType(const SBThreatType& sb_threat_type) {
return safe_browsing::JAVA_THREAT_TYPE_UNWANTED_SOFTWARE; return safe_browsing::JAVA_THREAT_TYPE_UNWANTED_SOFTWARE;
case SB_THREAT_TYPE_CSD_WHITELIST: case SB_THREAT_TYPE_CSD_WHITELIST:
return safe_browsing::JAVA_THREAT_TYPE_CSD_ALLOWLIST; return safe_browsing::JAVA_THREAT_TYPE_CSD_ALLOWLIST;
case SB_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST:
return safe_browsing::JAVA_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST;
default: default:
NOTREACHED(); NOTREACHED();
return 0; return 0;
...@@ -214,6 +216,21 @@ bool SafeBrowsingApiHandlerBridge::CheckApiIsSupported() { ...@@ -214,6 +216,21 @@ bool SafeBrowsingApiHandlerBridge::CheckApiIsSupported() {
return j_api_handler_.obj() != nullptr; return j_api_handler_.obj() != nullptr;
} }
bool SafeBrowsingApiHandlerBridge::StartAllowlistCheck(
const GURL& url,
const SBThreatType& sb_threat_type) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (!CheckApiIsSupported()) {
return false;
}
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_url = ConvertUTF8ToJavaString(env, url.spec());
int j_threat_type = SBThreatTypeToJavaThreatType(sb_threat_type);
return Java_SafeBrowsingApiBridge_startAllowlistLookup(env, j_api_handler_,
j_url, j_threat_type);
}
std::string SafeBrowsingApiHandlerBridge::GetSafetyNetId() { std::string SafeBrowsingApiHandlerBridge::GetSafetyNetId() {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
bool feature_enabled = base::FeatureList::IsEnabled(kCaptureSafetyNetId); bool feature_enabled = base::FeatureList::IsEnabled(kCaptureSafetyNetId);
...@@ -261,18 +278,13 @@ void SafeBrowsingApiHandlerBridge::StartURLCheck( ...@@ -261,18 +278,13 @@ void SafeBrowsingApiHandlerBridge::StartURLCheck(
} }
bool SafeBrowsingApiHandlerBridge::StartCSDAllowlistCheck(const GURL& url) { bool SafeBrowsingApiHandlerBridge::StartCSDAllowlistCheck(const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); return StartAllowlistCheck(url, safe_browsing::SB_THREAT_TYPE_CSD_WHITELIST);
if (!CheckApiIsSupported()) { }
return false;
}
// TODO(crbug.com/999344): Add UMA metrics bool SafeBrowsingApiHandlerBridge::StartHighConfidenceAllowlistCheck(
JNIEnv* env = AttachCurrentThread(); const GURL& url) {
ScopedJavaLocalRef<jstring> j_url = ConvertUTF8ToJavaString(env, url.spec()); return StartAllowlistCheck(
int j_threat_type = url, safe_browsing::SB_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST);
SBThreatTypeToJavaThreatType(safe_browsing::SB_THREAT_TYPE_CSD_WHITELIST);
return Java_SafeBrowsingApiBridge_startAllowlistLookup(env, j_api_handler_,
j_url, j_threat_type);
} }
} // namespace safe_browsing } // namespace safe_browsing
...@@ -34,11 +34,15 @@ class SafeBrowsingApiHandlerBridge : public SafeBrowsingApiHandler { ...@@ -34,11 +34,15 @@ class SafeBrowsingApiHandlerBridge : public SafeBrowsingApiHandler {
bool StartCSDAllowlistCheck(const GURL& url) override; bool StartCSDAllowlistCheck(const GURL& url) override;
bool StartHighConfidenceAllowlistCheck(const GURL& url) override;
private: private:
// Creates the |j_api_handler_| if it hasn't been already. If the API is not // Creates the |j_api_handler_| if it hasn't been already. If the API is not
// supported, this will return false and j_api_handler_ will remain nullptr. // supported, this will return false and j_api_handler_ will remain nullptr.
bool CheckApiIsSupported(); bool CheckApiIsSupported();
bool StartAllowlistCheck(const GURL& url, const SBThreatType& sb_threat_type);
// The Java-side SafeBrowsingApiHandler. Must call CheckApiIsSupported first. // The Java-side SafeBrowsingApiHandler. Must call CheckApiIsSupported first.
base::android::ScopedJavaGlobalRef<jobject> j_api_handler_; base::android::ScopedJavaGlobalRef<jobject> j_api_handler_;
......
...@@ -165,6 +165,8 @@ int GetThreatSeverity(JavaThreatTypes threat_type) { ...@@ -165,6 +165,8 @@ int GetThreatSeverity(JavaThreatTypes threat_type) {
return 4; return 4;
case JAVA_THREAT_TYPE_CSD_ALLOWLIST: case JAVA_THREAT_TYPE_CSD_ALLOWLIST:
return 5; return 5;
case JAVA_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST:
return 6;
case JAVA_THREAT_TYPE_MAX_VALUE: case JAVA_THREAT_TYPE_MAX_VALUE:
return std::numeric_limits<int>::max(); return std::numeric_limits<int>::max();
} }
......
...@@ -31,6 +31,7 @@ enum JavaThreatTypes { ...@@ -31,6 +31,7 @@ enum JavaThreatTypes {
// TODO(crbug.com/999344): temp magic number, update once GMSCore is // TODO(crbug.com/999344): temp magic number, update once GMSCore is
// available. // available.
JAVA_THREAT_TYPE_CSD_ALLOWLIST = 16, JAVA_THREAT_TYPE_CSD_ALLOWLIST = 16,
JAVA_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST = 17,
JAVA_THREAT_TYPE_MAX_VALUE JAVA_THREAT_TYPE_MAX_VALUE
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment