Index: chrome/browser/chromeos/hats/hats_notification_controller.cc |
diff --git a/chrome/browser/chromeos/hats/hats_notification_controller.cc b/chrome/browser/chromeos/hats/hats_notification_controller.cc |
index 8ec8e18e9febb01fdf1d9bc88c26a7a417cecda8..461f2acbea0ff8c24d05e5a67535962c4ce9c7de 100644 |
--- a/chrome/browser/chromeos/hats/hats_notification_controller.cc |
+++ b/chrome/browser/chromeos/hats/hats_notification_controller.cc |
@@ -8,6 +8,7 @@ |
#include "base/feature_list.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/hats/hats_dialog.h" |
+#include "chrome/browser/chromeos/login/startup_utils.h" |
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/notifications/notification_ui_manager.h" |
@@ -29,15 +30,23 @@ namespace { |
// Returns true if the given |profile| interacted with HaTS by either |
// dismissing the notification or taking the survey within a given threshold |
-// time delta |threshold|. |
-bool DidShowSurveyToProfileRecently(Profile* profile, |
- base::TimeDelta threshold) { |
+// days |threshold_days|. |
+bool DidShowSurveyToProfileRecently(Profile* profile, int threshold_days) { |
int64_t serialized_timestamp = |
profile->GetPrefs()->GetInt64(prefs::kHatsLastInteractionTimestamp); |
base::Time previous_interaction_timestamp = |
base::Time::FromInternalValue(serialized_timestamp); |
- return (previous_interaction_timestamp + threshold) > base::Time::Now(); |
+ return (previous_interaction_timestamp + |
+ base::TimeDelta::FromDays(threshold_days)) > base::Time::Now(); |
+} |
+ |
+// Returns true if at least |threshold_days| days have passed since OOBE. This |
+// is an indirect measure of whether the owner has used the device for at least |
+// |threshold_days| days. |
+bool IsNewDevice(int threshold_days) { |
+ return chromeos::StartupUtils::GetTimeSinceOobeFlagFileCreation() <= |
+ base::TimeDelta::FromDays(threshold_days); |
} |
} // namespace |
@@ -51,24 +60,43 @@ const char HatsNotificationController::kDelegateId[] = "hats_delegate"; |
const char HatsNotificationController::kNotificationId[] = "hats_notification"; |
// static |
-const base::TimeDelta HatsNotificationController::kHatsThresholdTime = |
- base::TimeDelta::FromDays(90); |
+const int HatsNotificationController::kHatsThresholdDays = 90; |
+ |
+// static |
+const int HatsNotificationController::kHatsNewDeviceThresholdDays = 7; |
HatsNotificationController::HatsNotificationController(Profile* profile) |
- : profile_(profile) { |
- // Add self as an observer to be notified when an internet connection is |
- // available. |
- network_portal_detector::GetInstance()->AddAndFireObserver(this); |
+ : profile_(profile), weak_pointer_factory_(this) { |
+ base::PostTaskAndReplyWithResult( |
+ content::BrowserThread::GetBlockingPool(), FROM_HERE, |
+ base::Bind(&IsNewDevice, kHatsNewDeviceThresholdDays), |
+ base::Bind(&HatsNotificationController::Initialize, |
+ weak_pointer_factory_.GetWeakPtr())); |
} |
HatsNotificationController::~HatsNotificationController() { |
network_portal_detector::GetInstance()->RemoveObserver(this); |
} |
+void HatsNotificationController::Initialize(bool is_new_device) { |
+ if (is_new_device) { |
+ // This device has been chosen for a survey, but it is too new. Instead |
+ // of showing the user the survey, just mark it as completed. |
+ UpdateLastInteractionTime(); |
+ return; |
+ } |
+ |
+ // Add self as an observer to be notified when an internet connection is |
+ // available. |
+ network_portal_detector::GetInstance()->AddAndFireObserver(this); |
+} |
+ |
// static |
// TODO(malaykeshav): Add check for @google accounts. |
bool HatsNotificationController::ShouldShowSurveyToProfile(Profile* profile) { |
- // Do not show the survey if the HaTS feature is disabled for the device. |
+ // Do not show the survey if the HaTS feature is disabled for the device. This |
+ // flag is controlled by finch and is enabled only when the device has been |
+ // selected for the survey. |
if (!base::FeatureList::IsEnabled(features::kHappininessTrackingSystem)) |
return false; |
@@ -91,7 +119,7 @@ bool HatsNotificationController::ShouldShowSurveyToProfile(Profile* profile) { |
// Do not show survey to user if user has interacted with HaTS within the past |
// |kHatsThresholdTime| time delta. |
- if (DidShowSurveyToProfileRecently(profile, kHatsThresholdTime)) |
+ if (DidShowSurveyToProfileRecently(profile, kHatsThresholdDays)) |
return false; |
return true; |