| 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
|
| deleted file mode 100644
|
| index 5bfdc99258369fb57a5b27c9db64a018ad576558..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/android/search_geolocation_disclosure_tab_helper.cc
|
| +++ /dev/null
|
| @@ -1,245 +0,0 @@
|
| -// 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/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"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/time/time.h"
|
| -#include "chrome/browser/android/search_geolocation_disclosure_infobar_delegate.h"
|
| -#include "chrome/browser/permissions/permission_manager.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/search_engines/template_url_service_factory.h"
|
| -#include "chrome/common/chrome_features.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "components/pref_registry/pref_registry_syncable.h"
|
| -#include "components/prefs/pref_service.h"
|
| -#include "components/search_engines/template_url.h"
|
| -#include "components/search_engines/template_url_service.h"
|
| -#include "components/variations/variations_associated_data.h"
|
| -#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 {
|
| -
|
| -const int kDefaultMaxShowCount = 3;
|
| -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);
|
| - int max_show;
|
| - if (!variation.empty() && base::StringToInt(variation, &max_show))
|
| - return max_show;
|
| -
|
| - return kDefaultMaxShowCount;
|
| -}
|
| -
|
| -int GetDaysPerShow() {
|
| - std::string variation = variations::GetVariationParamValueByFeature(
|
| - features::kConsistentOmniboxGeolocation, kDaysPerShowVariation);
|
| - int days_per_show;
|
| - if (!variation.empty() && base::StringToInt(variation, &days_per_show))
|
| - return days_per_show;
|
| -
|
| - return kDefaultDaysPerShow;
|
| -}
|
| -
|
| -base::Time GetTimeNow() {
|
| - return base::Time::Now() + base::TimeDelta::FromDays(gDayOffsetForTesting);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -DEFINE_WEB_CONTENTS_USER_DATA_KEY(SearchGeolocationDisclosureTabHelper);
|
| -
|
| -SearchGeolocationDisclosureTabHelper::SearchGeolocationDisclosureTabHelper(
|
| - content::WebContents* contents)
|
| - : content::WebContentsObserver(contents) {
|
| - consistent_geolocation_enabled_ =
|
| - base::FeatureList::IsEnabled(features::kConsistentOmniboxGeolocation);
|
| -}
|
| -
|
| -SearchGeolocationDisclosureTabHelper::~SearchGeolocationDisclosureTabHelper() {}
|
| -
|
| -void SearchGeolocationDisclosureTabHelper::NavigationEntryCommitted(
|
| - const content::LoadCommittedDetails& load_details) {
|
| - if (consistent_geolocation_enabled_) {
|
| - MaybeShowDefaultSearchGeolocationDisclosure(
|
| - web_contents()->GetVisibleURL());
|
| - }
|
| -}
|
| -
|
| -// static
|
| -void SearchGeolocationDisclosureTabHelper::RegisterProfilePrefs(
|
| - user_prefs::PrefRegistrySyncable* registry) {
|
| - registry->RegisterBooleanPref(prefs::kSearchGeolocationDisclosureDismissed,
|
| - false);
|
| - registry->RegisterIntegerPref(prefs::kSearchGeolocationDisclosureShownCount,
|
| - 0);
|
| - registry->RegisterInt64Pref(prefs::kSearchGeolocationDisclosureLastShowDate,
|
| - 0);
|
| - registry->RegisterBooleanPref(
|
| - prefs::kSearchGeolocationPreDisclosureMetricsRecorded, false);
|
| - registry->RegisterBooleanPref(
|
| - 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;
|
| -
|
| - if (!ShouldShowDisclosureForUrl(gurl))
|
| - return;
|
| -
|
| - // Don't show the infobar if the user has dismissed it, or they've seen it
|
| - // enough times already.
|
| - PrefService* prefs = GetProfile()->GetPrefs();
|
| - bool dismissed_already =
|
| - prefs->GetBoolean(prefs::kSearchGeolocationDisclosureDismissed);
|
| - int shown_count =
|
| - prefs->GetInteger(prefs::kSearchGeolocationDisclosureShownCount);
|
| - if (dismissed_already || shown_count >= GetMaxShowCount()) {
|
| - // Record metrics for the state of permissions after the disclosure has been
|
| - // shown. This is not done immediately after showing the last disclosure
|
| - // (i.e. at the end of this function), but on the next omnibox search, to
|
| - // allow the metric to capture changes to settings done by the user as a
|
| - // result of clicking on the Settings link in the disclosure.
|
| - RecordPostDisclosureMetrics(gurl);
|
| - return;
|
| - }
|
| -
|
| - // Or if it has been shown too recently.
|
| - base::Time last_shown = base::Time::FromInternalValue(
|
| - prefs->GetInt64(prefs::kSearchGeolocationDisclosureLastShowDate));
|
| - if (GetTimeNow() - last_shown < base::TimeDelta::FromDays(GetDaysPerShow())) {
|
| - return;
|
| - }
|
| -
|
| - // Check that the Chrome app has geolocation permission.
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - if (!Java_GeolocationHeader_hasGeolocationPermission(env))
|
| - return;
|
| -
|
| - // Record metrics for the state of permissions before the disclosure has been
|
| - // shown.
|
| - RecordPreDisclosureMetrics(gurl);
|
| -
|
| - // Only show the disclosure if the geolocation permission is set to ASK
|
| - // (i.e. has not been explicitly set or revoked).
|
| - blink::mojom::PermissionStatus status =
|
| - PermissionManager::Get(GetProfile())
|
| - ->GetPermissionStatus(content::PermissionType::GEOLOCATION, gurl,
|
| - gurl);
|
| - if (status != blink::mojom::PermissionStatus::ASK)
|
| - return;
|
| -
|
| - // All good, let's show the disclosure and increment the shown count.
|
| - SearchGeolocationDisclosureInfoBarDelegate::Create(web_contents(), gurl);
|
| - shown_count++;
|
| - prefs->SetInteger(prefs::kSearchGeolocationDisclosureShownCount, shown_count);
|
| - prefs->SetInt64(prefs::kSearchGeolocationDisclosureLastShowDate,
|
| - 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(
|
| - const GURL& gurl) {
|
| - PrefService* prefs = GetProfile()->GetPrefs();
|
| - if (!prefs->GetBoolean(
|
| - prefs::kSearchGeolocationPreDisclosureMetricsRecorded)) {
|
| - blink::mojom::PermissionStatus status =
|
| - PermissionManager::Get(GetProfile())
|
| - ->GetPermissionStatus(content::PermissionType::GEOLOCATION, gurl,
|
| - gurl);
|
| - UMA_HISTOGRAM_ENUMERATION("GeolocationDisclosure.PreDisclosurePermission",
|
| - static_cast<base::HistogramBase::Sample>(status),
|
| - static_cast<base::HistogramBase::Sample>(
|
| - blink::mojom::PermissionStatus::LAST) +
|
| - 1);
|
| - prefs->SetBoolean(prefs::kSearchGeolocationPreDisclosureMetricsRecorded,
|
| - true);
|
| - }
|
| -}
|
| -
|
| -void SearchGeolocationDisclosureTabHelper::RecordPostDisclosureMetrics(
|
| - const GURL& gurl) {
|
| - PrefService* prefs = GetProfile()->GetPrefs();
|
| - if (!prefs->GetBoolean(
|
| - prefs::kSearchGeolocationPostDisclosureMetricsRecorded)) {
|
| - blink::mojom::PermissionStatus status =
|
| - PermissionManager::Get(GetProfile())
|
| - ->GetPermissionStatus(content::PermissionType::GEOLOCATION, gurl,
|
| - gurl);
|
| - UMA_HISTOGRAM_ENUMERATION("GeolocationDisclosure.PostDisclosurePermission",
|
| - static_cast<base::HistogramBase::Sample>(status),
|
| - static_cast<base::HistogramBase::Sample>(
|
| - blink::mojom::PermissionStatus::LAST) +
|
| - 1);
|
| - prefs->SetBoolean(prefs::kSearchGeolocationPostDisclosureMetricsRecorded,
|
| - true);
|
| - }
|
| -}
|
| -
|
| -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;
|
| -}
|
|
|