Index: chrome/browser/android/contextualsearch/ctr_suppression.cc |
diff --git a/chrome/browser/android/contextualsearch/ctr_suppression.cc b/chrome/browser/android/contextualsearch/ctr_suppression.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eb86a0d4fd45030100c132877c5e6c1d522fe145 |
--- /dev/null |
+++ b/chrome/browser/android/contextualsearch/ctr_suppression.cc |
@@ -0,0 +1,109 @@ |
+// 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/contextualsearch/ctr_suppression.h> |
+#include <set> |
+ |
+#include "base/android/jni_string.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "jni/CtrSuppression_jni.h" |
+ |
+using base::android::AttachCurrentThread; |
+using base::android::ConvertUTF8ToJavaString; |
+using base::android::JavaParamRef; |
+using base::android::ScopedJavaLocalRef; |
+using contextual_search::CtrAggregator; |
+ |
+CtrSuppression::CtrSuppression(JNIEnv* env, jobject obj) |
+ : WeeklyActivityStorage(contextual_search::kNumWeeksNeededFor28DayData) { |
+ java_object_.Reset(env, obj); |
+ |
+ // NOTE: Creating the aggregator needs to be done after setting up the Java |
+ // object because the constructor will call back through the Java object |
+ // to access storage. |
+ aggregator_.reset(new CtrAggregator(*this)); |
+ DCHECK(aggregator_); |
+} |
+ |
+CtrSuppression::~CtrSuppression() { |
+ JNIEnv* env = AttachCurrentThread(); |
+ Java_CtrSuppression_clearNativePointer(env, java_object_.obj()); |
+} |
+ |
+// Java conduit |
+ |
+void CtrSuppression::RecordImpression(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj, |
+ jboolean did_click) { |
+ aggregator_->RecordImpression(did_click); |
+} |
+ |
+jint CtrSuppression::GetCurrentWeekNumber(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->GetCurrentWeekNumber(); |
+} |
+ |
+jboolean CtrSuppression::HasPreviousWeekData(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->HasPreviousWeekData(); |
+} |
+ |
+jint CtrSuppression::GetPreviousWeekImpressions( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->GetPreviousWeekImpressions(); |
+} |
+ |
+jfloat CtrSuppression::GetPreviousWeekCtr(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->GetPreviousWeekCtr(); |
+} |
+ |
+jboolean CtrSuppression::HasPrevious28DayData( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->HasPrevious28DayData(); |
+} |
+ |
+jint CtrSuppression::GetPrevious28DayImpressions( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->GetPrevious28DayImpressions(); |
+} |
+ |
+jfloat CtrSuppression::GetPrevious28DayCtr(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
+ return aggregator_->GetPrevious28DayCtr(); |
+} |
+ |
+// WeeklyActivityStorage overrides |
+ |
+int CtrSuppression::ReadStorage(std::string storage_bucket) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jstring> j_storage_bucket = |
+ ConvertUTF8ToJavaString(env, storage_bucket.c_str()); |
+ return Java_CtrSuppression_readInt(env, java_object_, j_storage_bucket); |
+} |
+ |
+void CtrSuppression::WriteStorage(std::string storage_bucket, int value) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jstring> j_storage_bucket = |
+ ConvertUTF8ToJavaString(env, storage_bucket.c_str()); |
+ Java_CtrSuppression_writeInt(env, java_object_, j_storage_bucket, value); |
+} |
+ |
+// Java wrapper boilerplate |
+ |
+void CtrSuppression::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
+ delete this; |
+} |
+ |
+bool RegisterCtrSuppression(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
+jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
+ CtrSuppression* suppression = new CtrSuppression(env, obj); |
+ return reinterpret_cast<intptr_t>(suppression); |
+} |