Simplify feature engagement tracker API.
Instead of splitting out preconditions, trigger-events and whether
a feature has been used, they are now all just events. This
simplifies the API surface quite a bit.
Whether a feature has been used will now happen by marking a
particular event as the one that signifies that a feature has been
used. This will be configured per in-product help feature.
The check for whether the in-product help should be trigger is
still a similar method that returns a boolean.
BUG=706309
Change-Id: I309f95ebc417d078e9e671b271b2d50e7e8f0fb2
Reviewed-on: https://chromium-review.googlesource.com/466586
Commit-Queue: Tommy Nyquist <nyquist@chromium.org>
Reviewed-by: David Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#461587}
diff --git a/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc
index 0354cdf..b50ecf2 100644
--- a/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc
+++ b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc
@@ -96,36 +96,23 @@
return base::android::ScopedJavaLocalRef<jobject>(java_obj_);
}
-void FeatureEngagementTrackerImplAndroid::Event(
+void FeatureEngagementTrackerImplAndroid::NotifyEvent(
JNIEnv* env,
const base::android::JavaRef<jobject>& jobj,
- const base::android::JavaParamRef<jstring>& jfeature,
- const base::android::JavaParamRef<jstring>& jprecondition) {
- std::string feature = ConvertJavaStringToUTF8(env, jfeature);
- DCHECK(features_.find(feature) != features_.end());
-
- std::string precondition = ConvertJavaStringToUTF8(env, jprecondition);
- feature_engagement_tracker_impl_->Event(*features_[feature], precondition);
+ const base::android::JavaParamRef<jstring>& jevent) {
+ std::string event = ConvertJavaStringToUTF8(env, jevent);
+ feature_engagement_tracker_impl_->NotifyEvent(event);
}
-void FeatureEngagementTrackerImplAndroid::Used(
+bool FeatureEngagementTrackerImplAndroid::ShouldTriggerHelpUI(
JNIEnv* env,
const base::android::JavaRef<jobject>& jobj,
const base::android::JavaParamRef<jstring>& jfeature) {
std::string feature = ConvertJavaStringToUTF8(env, jfeature);
DCHECK(features_.find(feature) != features_.end());
- feature_engagement_tracker_impl_->Used(*features_[feature]);
-}
-
-bool FeatureEngagementTrackerImplAndroid::Trigger(
- JNIEnv* env,
- const base::android::JavaRef<jobject>& jobj,
- const base::android::JavaParamRef<jstring>& jfeature) {
- std::string feature = ConvertJavaStringToUTF8(env, jfeature);
- DCHECK(features_.find(feature) != features_.end());
-
- return feature_engagement_tracker_impl_->Trigger(*features_[feature]);
+ return feature_engagement_tracker_impl_->ShouldTriggerHelpUI(
+ *features_[feature]);
}
void FeatureEngagementTrackerImplAndroid::Dismissed(
diff --git a/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.h b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.h
index 765f282..72aa6ea7 100644
--- a/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.h
+++ b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.h
@@ -44,16 +44,13 @@
}
// FeatureEngagementTracker JNI bridge implementation.
- virtual void Event(JNIEnv* env,
- const base::android::JavaRef<jobject>& jobj,
- const base::android::JavaParamRef<jstring>& jfeature,
- const base::android::JavaParamRef<jstring>& jprecondition);
- virtual void Used(JNIEnv* env,
- const base::android::JavaRef<jobject>& jobj,
- const base::android::JavaParamRef<jstring>& jfeature);
- virtual bool Trigger(JNIEnv* env,
- const base::android::JavaRef<jobject>& jobj,
- const base::android::JavaParamRef<jstring>& jfeature);
+ virtual void NotifyEvent(JNIEnv* env,
+ const base::android::JavaRef<jobject>& jobj,
+ const base::android::JavaParamRef<jstring>& jevent);
+ virtual bool ShouldTriggerHelpUI(
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& jobj,
+ const base::android::JavaParamRef<jstring>& jfeature);
virtual void Dismissed(JNIEnv* env,
const base::android::JavaRef<jobject>& jobj);
virtual void AddOnInitializedCallback(
diff --git a/components/feature_engagement_tracker/internal/android/java/src/org/chromium/components/feature_engagement_tracker/internal/FeatureEngagementTrackerImpl.java b/components/feature_engagement_tracker/internal/android/java/src/org/chromium/components/feature_engagement_tracker/internal/FeatureEngagementTrackerImpl.java
index c6afea4..734b5ba 100644
--- a/components/feature_engagement_tracker/internal/android/java/src/org/chromium/components/feature_engagement_tracker/internal/FeatureEngagementTrackerImpl.java
+++ b/components/feature_engagement_tracker/internal/android/java/src/org/chromium/components/feature_engagement_tracker/internal/FeatureEngagementTrackerImpl.java
@@ -30,21 +30,15 @@
}
@Override
- public void event(String feature, String precondition) {
+ public void notifyEvent(String event) {
assert mNativePtr != 0;
- nativeEvent(mNativePtr, feature, precondition);
+ nativeNotifyEvent(mNativePtr, event);
}
@Override
- public void used(String feature) {
+ public boolean shouldTriggerHelpUI(String feature) {
assert mNativePtr != 0;
- nativeUsed(mNativePtr, feature);
- }
-
- @Override
- public boolean trigger(String feature) {
- assert mNativePtr != 0;
- return nativeTrigger(mNativePtr, feature);
+ return nativeShouldTriggerHelpUI(mNativePtr, feature);
}
@Override
@@ -70,10 +64,9 @@
return mNativePtr;
}
- private native void nativeEvent(
- long nativeFeatureEngagementTrackerImplAndroid, String feature, String precondition);
- private native void nativeUsed(long nativeFeatureEngagementTrackerImplAndroid, String feature);
- private native boolean nativeTrigger(
+ private native void nativeNotifyEvent(
+ long nativeFeatureEngagementTrackerImplAndroid, String event);
+ private native boolean nativeShouldTriggerHelpUI(
long nativeFeatureEngagementTrackerImplAndroid, String feature);
private native void nativeDismissed(long nativeFeatureEngagementTrackerImplAndroid);
private native void nativeAddOnInitializedCallback(
diff --git a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.cc b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.cc
index f23db42..fa7e1bd6 100644
--- a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.cc
+++ b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.cc
@@ -26,16 +26,12 @@
FeatureEngagementTrackerImpl::~FeatureEngagementTrackerImpl() = default;
-void FeatureEngagementTrackerImpl::Event(const base::Feature& feature,
- const std::string& precondition) {
+void FeatureEngagementTrackerImpl::NotifyEvent(const std::string& event) {
// TODO(nyquist): Track this event.
}
-void FeatureEngagementTrackerImpl::Used(const base::Feature& feature) {
- // TODO(nyquist): Track this event.
-}
-
-bool FeatureEngagementTrackerImpl::Trigger(const base::Feature& feature) {
+bool FeatureEngagementTrackerImpl::ShouldTriggerHelpUI(
+ const base::Feature& feature) {
bool should_trigger =
!has_shown_enlightenment_ && base::FeatureList::IsEnabled(feature);
has_shown_enlightenment_ |= should_trigger;
diff --git a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.h b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.h
index b8fe116..c23879d0 100644
--- a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.h
+++ b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl.h
@@ -25,10 +25,8 @@
~FeatureEngagementTrackerImpl() override;
// FeatureEngagementTracker implementation.
- void Event(const base::Feature& feature,
- const std::string& precondition) override;
- void Used(const base::Feature& feature) override;
- bool Trigger(const base::Feature& feature) override;
+ void NotifyEvent(const std::string& event) override;
+ bool ShouldTriggerHelpUI(const base::Feature& feature) override;
void Dismissed() override;
void AddOnInitializedCallback(OnInitializedCallback callback) override;
diff --git a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl_unittest.cc b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl_unittest.cc
index 198238e3..2cbd89c 100644
--- a/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl_unittest.cc
+++ b/components/feature_engagement_tracker/internal/feature_engagement_tracker_impl_unittest.cc
@@ -27,9 +27,9 @@
std::vector<const base::Feature*> features = {&kTestFeatureFoo};
FeatureEngagementTrackerImpl tracker(features);
- // Only the first call to Trigger() should lead to enlightenment.
- EXPECT_TRUE(tracker.Trigger(kTestFeatureFoo));
- EXPECT_FALSE(tracker.Trigger(kTestFeatureFoo));
+ // Only the first call to ShouldTriggerHelpUI() should lead to enlightenment.
+ EXPECT_TRUE(tracker.ShouldTriggerHelpUI(kTestFeatureFoo));
+ EXPECT_FALSE(tracker.ShouldTriggerHelpUI(kTestFeatureFoo));
}
TEST(FeatureEngagementTrackerImplTest, OnlyEnabledFeaturesShouldTrigger) {
@@ -45,8 +45,8 @@
// kTestFeatureBar is disabled. Ordering disabled feature first to ensure this
// captures a different behavior than the
// OnlyOneFeatureShouldTriggerPerSession test below.
- EXPECT_FALSE(tracker.Trigger(kTestFeatureBar));
- EXPECT_TRUE(tracker.Trigger(kTestFeatureFoo));
+ EXPECT_FALSE(tracker.ShouldTriggerHelpUI(kTestFeatureBar));
+ EXPECT_TRUE(tracker.ShouldTriggerHelpUI(kTestFeatureFoo));
}
TEST(FeatureEngagementTrackerImplTest, OnlyOneFeatureShouldTriggerPerSession) {
@@ -59,8 +59,8 @@
FeatureEngagementTrackerImpl tracker(features);
// Only one feature should get to show enlightenment.
- EXPECT_TRUE(tracker.Trigger(kTestFeatureFoo));
- EXPECT_FALSE(tracker.Trigger(kTestFeatureBar));
+ EXPECT_TRUE(tracker.ShouldTriggerHelpUI(kTestFeatureFoo));
+ EXPECT_FALSE(tracker.ShouldTriggerHelpUI(kTestFeatureBar));
}
TEST(FeatureEngagementTrackerImplTest, NeverTriggerWhenAllFeaturesDisabled) {
@@ -73,8 +73,8 @@
FeatureEngagementTrackerImpl tracker(features);
// No features should get to show enlightenment.
- EXPECT_FALSE(tracker.Trigger(kTestFeatureFoo));
- EXPECT_FALSE(tracker.Trigger(kTestFeatureBar));
+ EXPECT_FALSE(tracker.ShouldTriggerHelpUI(kTestFeatureFoo));
+ EXPECT_FALSE(tracker.ShouldTriggerHelpUI(kTestFeatureBar));
}
} // namespace feature_engagement_tracker
diff --git a/components/feature_engagement_tracker/public/android/java/src/org/chromium/components/feature_engagement_tracker/FeatureEngagementTracker.java b/components/feature_engagement_tracker/public/android/java/src/org/chromium/components/feature_engagement_tracker/FeatureEngagementTracker.java
index a7173a5..36c8714 100644
--- a/components/feature_engagement_tracker/public/android/java/src/org/chromium/components/feature_engagement_tracker/FeatureEngagementTracker.java
+++ b/components/feature_engagement_tracker/public/android/java/src/org/chromium/components/feature_engagement_tracker/FeatureEngagementTracker.java
@@ -16,25 +16,19 @@
*/
public interface FeatureEngagementTracker {
/**
- * Must be called whenever an event related to a precondition happens.
+ * Must be called whenever an event happens.
*/
- void event(String feature, String precondition);
+ void notifyEvent(String event);
/**
- * Must be called whenever a feature has been used.
- */
- void used(String feature);
-
- /**
- * This function must be called whenever the triggering condition for a
- * specific feature happens. Returns true iff the display of feature
- * enlightenment must happen.
+ * This function must be called whenever the triggering condition for a specific feature
+ * happens. Returns true iff the display of the in-product help must happen.
* If {@code true} is returned, the caller *must* call {@link #dismissed()} when display
* of feature enlightenment ends.
* @return whether feature enlightenment should be displayed.
*/
@CheckResult
- boolean trigger(String feature);
+ boolean shouldTriggerHelpUI(String feature);
/**
* Must be called after display of feature enlightenment finishes.
diff --git a/components/feature_engagement_tracker/public/feature_engagement_tracker.h b/components/feature_engagement_tracker/public/feature_engagement_tracker.h
index 2d15f0f..b151dda4 100644
--- a/components/feature_engagement_tracker/public/feature_engagement_tracker.h
+++ b/components/feature_engagement_tracker/public/feature_engagement_tracker.h
@@ -47,19 +47,16 @@
const base::FilePath& storage_dir,
const scoped_refptr<base::SequencedTaskRunner>& background_task_runner);
- // Must be called whenever an event related to a precondition happens.
- virtual void Event(const base::Feature& feature,
- const std::string& precondition) = 0;
-
- // Must be called whenever a feature has been used.
- virtual void Used(const base::Feature& feature) = 0;
+ // Must be called whenever an event happens.
+ virtual void NotifyEvent(const std::string& event) = 0;
// This function must be called whenever the triggering condition for a
- // specific feature happens. Returns true iff the display of feature
- // enlightenment must happen.
+ // specific feature happens. Returns true iff the display of the in-product
+ // help must happen.
// If |true| is returned, the caller *must* call Dismissed() when display
// of feature enlightenment ends.
- virtual bool Trigger(const base::Feature& feature) WARN_UNUSED_RESULT = 0;
+ virtual bool ShouldTriggerHelpUI(const base::Feature& feature)
+ WARN_UNUSED_RESULT = 0;
// Must be called after display of feature enlightenment finishes.
virtual void Dismissed() = 0;