Index: chrome/browser/android/safe_browsing/safe_browsing_api_handler_bridge.cc |
diff --git a/chrome/browser/android/safe_browsing/safe_browsing_api_handler_bridge.cc b/chrome/browser/android/safe_browsing/safe_browsing_api_handler_bridge.cc |
deleted file mode 100644 |
index 679521b0537c1228e2314e71b3dbf3076a336f2b..0000000000000000000000000000000000000000 |
--- a/chrome/browser/android/safe_browsing/safe_browsing_api_handler_bridge.cc |
+++ /dev/null |
@@ -1,199 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/android/safe_browsing/safe_browsing_api_handler_bridge.h" |
- |
-#include <memory> |
-#include <string> |
- |
-#include "base/android/context_utils.h" |
-#include "base/android/jni_android.h" |
-#include "base/android/jni_array.h" |
-#include "base/android/jni_string.h" |
-#include "base/metrics/histogram_macros.h" |
-#include "chrome/browser/safe_browsing/safe_browsing_util.h" |
-#include "components/safe_browsing_db/safe_browsing_api_handler_util.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "jni/SafeBrowsingApiBridge_jni.h" |
- |
-using base::android::AttachCurrentThread; |
-using base::android::ConvertJavaStringToUTF8; |
-using base::android::ConvertUTF8ToJavaString; |
-using base::android::GetApplicationContext; |
-using base::android::JavaParamRef; |
-using base::android::ScopedJavaLocalRef; |
-using base::android::ToJavaIntArray; |
-using content::BrowserThread; |
- |
-namespace safe_browsing { |
- |
-namespace { |
-// Takes ownership of callback ptr. |
-void RunCallbackOnIOThread( |
- SafeBrowsingApiHandler::URLCheckCallbackMeta* callback, |
- SBThreatType threat_type, |
- const ThreatMetadata& metadata) { |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&SafeBrowsingApiHandler::URLCheckCallbackMeta::Run, |
- base::Owned(callback), threat_type, metadata)); |
-} |
- |
-void ReportUmaResult(safe_browsing::UmaRemoteCallResult result) { |
- UMA_HISTOGRAM_ENUMERATION("SB2.RemoteCall.Result", result, |
- safe_browsing::UMA_STATUS_MAX_VALUE); |
-} |
- |
-// Convert a SBThreatType to a Java threat type. We only support a few. |
-int SBThreatTypeToJavaThreatType(const SBThreatType& sb_threat_type) { |
- switch (sb_threat_type) { |
- case SB_THREAT_TYPE_URL_PHISHING: |
- return safe_browsing::JAVA_THREAT_TYPE_SOCIAL_ENGINEERING; |
- case SB_THREAT_TYPE_URL_MALWARE: |
- return safe_browsing::JAVA_THREAT_TYPE_POTENTIALLY_HARMFUL_APPLICATION; |
- default: |
- NOTREACHED(); |
- return 0; |
- } |
-} |
- |
-// Convert a vector of SBThreatTypes to JavaIntArray of Java threat types. |
-ScopedJavaLocalRef<jintArray> SBThreatTypesToJavaArray( |
- JNIEnv* env, |
- const std::vector<SBThreatType>& threat_types) { |
- DCHECK(threat_types.size() > 0); |
- int int_threat_types[threat_types.size()]; |
- int* itr = &int_threat_types[0]; |
- for (auto threat_type : threat_types) { |
- *itr++ = SBThreatTypeToJavaThreatType(threat_type); |
- } |
- return ToJavaIntArray(env, int_threat_types, threat_types.size()); |
-} |
- |
-} // namespace |
- |
- |
-bool RegisterSafeBrowsingApiBridge(JNIEnv* env) { |
- return RegisterNativesImpl(env); |
-} |
- |
-// Java->Native call, invoked when a check is done. |
-// |callback_id| is an int form of pointer to a URLCheckCallbackMeta |
-// that will be called and then deleted here. |
-// |result_status| is one of those from SafeBrowsingApiHandler.java |
-// |metadata| is a JSON string classifying the threat if there is one. |
-void OnUrlCheckDone(JNIEnv* env, |
- const JavaParamRef<jclass>& context, |
- jlong callback_id, |
- jint result_status, |
- const JavaParamRef<jstring>& metadata) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- DCHECK(callback_id); |
- |
- const std::string metadata_str = |
- (metadata ? ConvertJavaStringToUTF8(env, metadata) : ""); |
- |
- DVLOG(1) << "OnURLCheckDone invoked for check " << callback_id |
- << " with status=" << result_status << " and metadata=[" |
- << metadata_str << "]"; |
- |
- // Convert java long long int to c++ pointer, take ownership. |
- std::unique_ptr<SafeBrowsingApiHandler::URLCheckCallbackMeta> callback( |
- reinterpret_cast<SafeBrowsingApiHandlerBridge::URLCheckCallbackMeta*>( |
- callback_id)); |
- |
- if (result_status != RESULT_STATUS_SUCCESS) { |
- // TODO(nparker): If the API is consistently failing, we might want to |
- // turn it off altogether and retest periodically. This would |
- // alleviate a bad experience if GMSCore is somehow busted. |
- if (result_status == RESULT_STATUS_TIMEOUT) { |
- ReportUmaResult(UMA_STATUS_TIMEOUT); |
- VLOG(1) << "Safe browsing API call timed-out"; |
- } else { |
- DCHECK_EQ(result_status, RESULT_STATUS_INTERNAL_ERROR); |
- ReportUmaResult(UMA_STATUS_INTERNAL_ERROR); |
- LOG(WARNING) << "Safe browsing API had internal error"; |
- } |
- RunCallbackOnIOThread(callback.release(), SB_THREAT_TYPE_SAFE, |
- ThreatMetadata()); |
- return; |
- } |
- |
- // Shortcut for safe, so we don't have to parse JSON. |
- if (metadata_str == "{}") { |
- ReportUmaResult(UMA_STATUS_SAFE); |
- RunCallbackOnIOThread(callback.release(), SB_THREAT_TYPE_SAFE, |
- ThreatMetadata()); |
- } else { |
- // Unsafe, assuming we can parse the JSON. |
- SBThreatType worst_threat; |
- ThreatMetadata threat_metadata; |
- ReportUmaResult( |
- ParseJsonFromGMSCore(metadata_str, &worst_threat, &threat_metadata)); |
- if (worst_threat != SB_THREAT_TYPE_SAFE) { |
- DVLOG(1) << "Check " << callback_id << " marked as UNSAFE"; |
- } |
- |
- RunCallbackOnIOThread(callback.release(), worst_threat, threat_metadata); |
- } |
-} |
- |
-// |
-// SafeBrowsingApiHandlerBridge |
-// |
-SafeBrowsingApiHandlerBridge::SafeBrowsingApiHandlerBridge() |
- : checked_api_support_(false) {} |
- |
-SafeBrowsingApiHandlerBridge::~SafeBrowsingApiHandlerBridge() { |
-} |
- |
-bool SafeBrowsingApiHandlerBridge::CheckApiIsSupported() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (!checked_api_support_) { |
- DVLOG(1) << "Checking API support."; |
- j_api_handler_ = Java_SafeBrowsingApiBridge_create( |
- AttachCurrentThread(), GetApplicationContext()); |
- checked_api_support_ = true; |
- } |
- return j_api_handler_.obj() != nullptr; |
-} |
- |
-void SafeBrowsingApiHandlerBridge::StartURLCheck( |
- const SafeBrowsingApiHandler::URLCheckCallbackMeta& callback, |
- const GURL& url, |
- const std::vector<SBThreatType>& threat_types) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- if (!CheckApiIsSupported()) { |
- // Mark all requests as safe. Only users who have an old, broken GMSCore or |
- // have sideloaded Chrome w/o PlayStore should land here. |
- RunCallbackOnIOThread(new URLCheckCallbackMeta(callback), |
- SB_THREAT_TYPE_SAFE, ThreatMetadata()); |
- ReportUmaResult(UMA_STATUS_UNSUPPORTED); |
- return; |
- } |
- |
- // Make copy on the heap so we can pass the pointer through JNI. |
- intptr_t callback_id = |
- reinterpret_cast<intptr_t>(new URLCheckCallbackMeta(callback)); |
- |
- DVLOG(1) << "Starting check " << callback_id << " for URL " << url; |
- |
- // Default threat types, to support upstream code that doesn't yet set them. |
- std::vector<SBThreatType> local_threat_types(threat_types); |
- if (local_threat_types.empty()) { |
- local_threat_types.push_back(SB_THREAT_TYPE_URL_PHISHING); |
- local_threat_types.push_back(SB_THREAT_TYPE_URL_MALWARE); |
- } |
- |
- JNIEnv* env = AttachCurrentThread(); |
- ScopedJavaLocalRef<jstring> j_url = ConvertUTF8ToJavaString(env, url.spec()); |
- ScopedJavaLocalRef<jintArray> j_threat_types = |
- SBThreatTypesToJavaArray(env, local_threat_types); |
- |
- Java_SafeBrowsingApiBridge_startUriLookup(env, j_api_handler_, callback_id, |
- j_url, j_threat_types); |
-} |
- |
-} // namespace safe_browsing |