| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_PAYMENTS_CONTENT_ANDROID_CSP_CHECKER_ANDROID_H_ |
| #define COMPONENTS_PAYMENTS_CONTENT_ANDROID_CSP_CHECKER_ANDROID_H_ |
| |
| #include <jni.h> |
| #include <map> |
| |
| #include "base/android/scoped_java_ref.h" |
| #include "base/functional/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "components/payments/core/csp_checker.h" |
| |
| namespace payments { |
| |
| // Forwarding calls to a Java implementation. |
| class CSPCheckerAndroid : public CSPChecker { |
| public: |
| explicit CSPCheckerAndroid( |
| const base::android::JavaParamRef<jobject>& jbridge); |
| ~CSPCheckerAndroid() override; |
| |
| CSPCheckerAndroid(const CSPCheckerAndroid&) = delete; |
| CSPCheckerAndroid& operator=(const CSPCheckerAndroid&) = delete; |
| |
| // Message from Java to destroy this object. |
| void Destroy(JNIEnv* env); |
| |
| // Message from Java to return the result. |
| void OnResult(JNIEnv* env, jint result_id, jboolean result); |
| |
| // Convert a Java-owned CSPCheckerAndroid* pointer into a weak pointer. |
| static base::WeakPtr<CSPCheckerAndroid> GetWeakPtr( |
| jlong native_csp_checker_android); |
| |
| private: |
| // CSPChecker implementation. |
| void AllowConnectToSource( |
| const GURL& url, |
| const GURL& url_before_redirects, |
| bool did_follow_redirect, |
| base::OnceCallback<void(bool)> result_callback) override; |
| |
| base::android::ScopedJavaGlobalRef<jobject> jbridge_; |
| std::map<int, base::OnceCallback<void(bool)>> result_callbacks_; |
| int callback_counter_ = 0; |
| |
| base::WeakPtrFactory<CSPCheckerAndroid> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace payments |
| |
| #endif // COMPONENTS_PAYMENTS_CONTENT_ANDROID_CSP_CHECKER_ANDROID_H_ |