1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/geolocation/geolocation_infobar_delegate_android.h" 6 7 #include "base/metrics/histogram.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "chrome/browser/android/google_location_settings_helper.h" 10 #include "grit/generated_resources.h" 11 #include "grit/locale_settings.h" 12 #include "grit/theme_resources.h" 13 #include "ui/base/l10n/l10n_util.h" 14 15 namespace { 16 enum GeolocationInfoBarDelegateAndroidEvent { 17 // NOTE: Do not renumber these as that would confuse interpretation of 18 // previously logged data. When making changes, also update the enum list 19 // in tools/metrics/histograms/histograms.xml to keep it in sync. 20 21 // User allowed the page to use geolocation. 22 GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_ALLOW = 0, 23 24 // User opened geolocation settings. 25 GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_SETTINGS = 1, 26 27 // NOTE: Add entries only immediately above this line. 28 GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_COUNT = 2 29 }; 30 31 void RecordUmaEvent(GeolocationInfoBarDelegateAndroidEvent event) { 32 UMA_HISTOGRAM_ENUMERATION("Geolocation.InfoBarDelegateAndroid.Event", 33 event, GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_COUNT); 34 } 35 } // namespace 36 37 GeolocationInfoBarDelegateAndroid::GeolocationInfoBarDelegateAndroid( 38 PermissionQueueController* controller, 39 const PermissionRequestID& id, 40 const GURL& requesting_frame_url, 41 int contents_unique_id, 42 const std::string& display_languages) 43 : GeolocationInfoBarDelegate(controller, id, requesting_frame_url, 44 contents_unique_id, display_languages), 45 google_location_settings_helper_( 46 GoogleLocationSettingsHelper::Create()) { 47 } 48 49 GeolocationInfoBarDelegateAndroid::~GeolocationInfoBarDelegateAndroid() { 50 } 51 52 bool GeolocationInfoBarDelegateAndroid::Accept() { 53 set_user_has_interacted(); 54 55 // Accept button text could be either 'Allow' or 'Google Location Settings'. 56 // If 'Allow' we follow the regular flow. 57 if (google_location_settings_helper_->IsGoogleAppsLocationSettingEnabled()) { 58 RecordUmaEvent(GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_ALLOW); 59 return GeolocationInfoBarDelegate::Accept(); 60 } 61 62 // If 'Google Location Settings', we need to open the system Google Location 63 // Settings activity. 64 RecordUmaEvent(GEOLOCATION_INFO_BAR_DELEGATE_ANDROID_EVENT_SETTINGS); 65 google_location_settings_helper_->ShowGoogleLocationSettings(); 66 SetPermission(false, false); 67 return true; 68 } 69 70 base::string16 GeolocationInfoBarDelegateAndroid::GetButtonLabel( 71 InfoBarButton button) const { 72 return (button == BUTTON_OK) ? 73 UTF8ToUTF16(google_location_settings_helper_->GetAcceptButtonLabel()) : 74 l10n_util::GetStringUTF16(IDS_GEOLOCATION_DENY_BUTTON); 75 } 76