Index: chrome/browser/android/search_geolocation_disclosure_tab_helper.cc |
diff --git a/chrome/browser/android/search_geolocation_disclosure_tab_helper.cc b/chrome/browser/android/search_geolocation_disclosure_tab_helper.cc |
index 82942d1b19893444835be1d0c20694626e245dbb..5bfdc99258369fb57a5b27c9db64a018ad576558 100644 |
--- a/chrome/browser/android/search_geolocation_disclosure_tab_helper.cc |
+++ b/chrome/browser/android/search_geolocation_disclosure_tab_helper.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/android/search_geolocation_disclosure_tab_helper.h" |
+#include "base/android/jni_android.h" |
+#include "base/android/jni_string.h" |
#include "base/feature_list.h" |
#include "base/logging.h" |
#include "base/metrics/histogram_macros.h" |
@@ -23,6 +25,7 @@ |
#include "content/public/browser/permission_type.h" |
#include "content/public/browser/web_contents.h" |
#include "jni/GeolocationHeader_jni.h" |
+#include "jni/SearchGeolocationDisclosureTabHelper_jni.h" |
#include "third_party/WebKit/public/platform/modules/permissions/permission_status.mojom.h" |
namespace { |
@@ -32,6 +35,9 @@ const int kDefaultDaysPerShow = 1; |
const char kMaxShowCountVariation[] = "MaxShowCount"; |
const char kDaysPerShowVariation[] = "DaysPerShow"; |
+bool gIgnoreUrlChecksForTesting = false; |
+int gDayOffsetForTesting = 0; |
+ |
int GetMaxShowCount() { |
std::string variation = variations::GetVariationParamValueByFeature( |
features::kConsistentOmniboxGeolocation, kMaxShowCountVariation); |
@@ -52,6 +58,10 @@ int GetDaysPerShow() { |
return kDefaultDaysPerShow; |
} |
+base::Time GetTimeNow() { |
+ return base::Time::Now() + base::TimeDelta::FromDays(gDayOffsetForTesting); |
+} |
+ |
} // namespace |
DEFINE_WEB_CONTENTS_USER_DATA_KEY(SearchGeolocationDisclosureTabHelper); |
@@ -88,29 +98,19 @@ void SearchGeolocationDisclosureTabHelper::RegisterProfilePrefs( |
prefs::kSearchGeolocationPostDisclosureMetricsRecorded, false); |
} |
+// static |
+bool SearchGeolocationDisclosureTabHelper::Register(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
void SearchGeolocationDisclosureTabHelper:: |
MaybeShowDefaultSearchGeolocationDisclosure(const GURL& gurl) { |
// Don't show in incognito. |
if (GetProfile()->IsOffTheRecord()) |
return; |
- // Only show the disclosure for default search navigations from the omnibox. |
- TemplateURLService* template_url_service = |
- TemplateURLServiceFactory::GetForProfile(GetProfile()); |
- bool is_search_url = |
- template_url_service->IsSearchResultsPageFromDefaultSearchProvider( |
- gurl); |
- if (!is_search_url) |
- return; |
- |
- // Only show the disclosure if Google is the default search engine. |
- TemplateURL* default_search = |
- template_url_service->GetDefaultSearchProvider(); |
- if (!default_search || |
- !default_search->url_ref().HasGoogleBaseURLs( |
- template_url_service->search_terms_data())) { |
+ if (!ShouldShowDisclosureForUrl(gurl)) |
return; |
- } |
// Don't show the infobar if the user has dismissed it, or they've seen it |
// enough times already. |
@@ -132,8 +132,7 @@ void SearchGeolocationDisclosureTabHelper:: |
// Or if it has been shown too recently. |
base::Time last_shown = base::Time::FromInternalValue( |
prefs->GetInt64(prefs::kSearchGeolocationDisclosureLastShowDate)); |
- if (base::Time::Now() - last_shown < |
- base::TimeDelta::FromDays(GetDaysPerShow())) { |
+ if (GetTimeNow() - last_shown < base::TimeDelta::FromDays(GetDaysPerShow())) { |
return; |
} |
@@ -160,7 +159,33 @@ void SearchGeolocationDisclosureTabHelper:: |
shown_count++; |
prefs->SetInteger(prefs::kSearchGeolocationDisclosureShownCount, shown_count); |
prefs->SetInt64(prefs::kSearchGeolocationDisclosureLastShowDate, |
- base::Time::Now().ToInternalValue()); |
+ GetTimeNow().ToInternalValue()); |
+} |
+ |
+bool SearchGeolocationDisclosureTabHelper::ShouldShowDisclosureForUrl( |
+ const GURL& gurl) { |
+ if (gIgnoreUrlChecksForTesting) |
+ return true; |
+ |
+ // Only show the disclosure for default search navigations from the omnibox. |
+ TemplateURLService* template_url_service = |
+ TemplateURLServiceFactory::GetForProfile(GetProfile()); |
+ bool is_search_url = |
+ template_url_service->IsSearchResultsPageFromDefaultSearchProvider( |
+ gurl); |
+ if (!is_search_url) |
+ return false; |
+ |
+ // Only show the disclosure if Google is the default search engine. |
+ TemplateURL* default_search = |
+ template_url_service->GetDefaultSearchProvider(); |
+ if (!default_search || |
+ !default_search->url_ref().HasGoogleBaseURLs( |
+ template_url_service->search_terms_data())) { |
+ return false; |
+ } |
+ |
+ return true; |
} |
void SearchGeolocationDisclosureTabHelper::RecordPreDisclosureMetrics( |
@@ -204,3 +229,17 @@ void SearchGeolocationDisclosureTabHelper::RecordPostDisclosureMetrics( |
Profile* SearchGeolocationDisclosureTabHelper::GetProfile() { |
return Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
} |
+ |
+// static |
+void SetIgnoreUrlChecksForTesting( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jclass>& clazz) { |
+ gIgnoreUrlChecksForTesting = true; |
+} |
+ |
+// static |
+void SetDayOffsetForTesting(JNIEnv* env, |
+ const base::android::JavaParamRef<jclass>& clazz, |
+ jint days) { |
+ gDayOffsetForTesting = days; |
+} |