Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java |
index 38881c2fcdc3a9036267a0268eadd24a39c7f0ab..5bcd70261b675ed00cb41ee4e1d46d223df19e83 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java |
@@ -25,6 +25,7 @@ import android.widget.TextView; |
import org.chromium.base.ApiCompatibilityUtils; |
import org.chromium.base.ContextUtils; |
+import org.chromium.base.Log; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.metrics.RecordUserAction; |
import org.chromium.chrome.R; |
@@ -50,6 +51,8 @@ import java.util.List; |
public class SearchEngineAdapter extends BaseAdapter |
implements TemplateUrlService.LoadListener, TemplateUrlService.TemplateUrlServiceObserver, |
OnClickListener { |
+ private static final String TAG = "cr_SearchEngines"; |
+ |
private static final int VIEW_TYPE_ITEM = 0; |
private static final int VIEW_TYPE_DIVIDER = 1; |
private static final int VIEW_TYPE_COUNT = 2; |
@@ -248,7 +251,6 @@ public class SearchEngineAdapter extends BaseAdapter |
@Override |
public View getView(int position, View convertView, ViewGroup parent) { |
View view = convertView; |
- TemplateUrl templateUrl = (TemplateUrl) getItem(position); |
int itemViewType = getItemViewType(position); |
if (convertView == null) { |
view = mLayoutInflater.inflate( |
@@ -280,6 +282,8 @@ public class SearchEngineAdapter extends BaseAdapter |
TextView description = (TextView) view.findViewById(R.id.name); |
Resources resources = mContext.getResources(); |
+ |
+ TemplateUrl templateUrl = (TemplateUrl) getItem(position); |
description.setText(templateUrl.getShortName()); |
TextView url = (TextView) view.findViewById(R.id.url); |
@@ -311,15 +315,20 @@ public class SearchEngineAdapter extends BaseAdapter |
TextView link = (TextView) view.findViewById(R.id.location_permission); |
link.setVisibility(selected ? View.VISIBLE : View.GONE); |
- if (selected) { |
- if (getLocationPermissionType(position, true) == ContentSetting.ASK) { |
+ if (TemplateUrlService.getInstance().getSearchEngineUrlFromTemplateUrl( |
+ templateUrl.getKeyword()) == null) { |
+ Log.e(TAG, "Invalid template URL found: %s", templateUrl); |
+ assert false; |
+ link.setVisibility(View.GONE); |
+ } else if (selected) { |
+ if (getLocationPermissionType(templateUrl, true) == ContentSetting.ASK) { |
link.setVisibility(View.GONE); |
} else { |
ForegroundColorSpan linkSpan = new ForegroundColorSpan( |
ApiCompatibilityUtils.getColor(resources, R.color.google_blue_700)); |
if (LocationUtils.getInstance().isSystemLocationSettingEnabled()) { |
String message = mContext.getString( |
- locationEnabled(position, true) |
+ locationEnabled(templateUrl, true) |
? R.string.search_engine_location_allowed |
: R.string.search_engine_location_blocked); |
SpannableString messageWithLink = new SpannableString(message); |
@@ -369,9 +378,10 @@ public class SearchEngineAdapter extends BaseAdapter |
SharedPreferences sharedPreferences = |
ContextUtils.getAppSharedPreferences(); |
if (sharedPreferences.getBoolean(PrefServiceBridge.LOCATION_AUTO_ALLOWED, false)) { |
- if (locationEnabled(mSelectedSearchEnginePosition, false)) { |
+ TemplateUrl templateUrl = (TemplateUrl) getItem(mSelectedSearchEnginePosition); |
+ if (locationEnabled(templateUrl, false)) { |
String url = TemplateUrlService.getInstance().getSearchEngineUrlFromTemplateUrl( |
- toKeyword(mSelectedSearchEnginePosition)); |
+ templateUrl.getKeyword()); |
WebsitePreferenceBridge.nativeSetGeolocationSettingForOrigin( |
url, url, ContentSetting.DEFAULT.toInt(), false); |
} |
@@ -404,19 +414,25 @@ public class SearchEngineAdapter extends BaseAdapter |
toKeyword(mSelectedSearchEnginePosition)); |
Bundle fragmentArgs = SingleWebsitePreferences.createFragmentArgsForSite(url); |
fragmentArgs.putBoolean(SingleWebsitePreferences.EXTRA_LOCATION, |
- locationEnabled(mSelectedSearchEnginePosition, true)); |
+ locationEnabled((TemplateUrl) getItem(mSelectedSearchEnginePosition), true)); |
settingsIntent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); |
mContext.startActivity(settingsIntent); |
} |
} |
- private ContentSetting getLocationPermissionType(int position, boolean checkGeoHeader) { |
- if (position == -1) { |
+ private ContentSetting getLocationPermissionType( |
+ TemplateUrl templateUrl, boolean checkGeoHeader) { |
+ if (templateUrl == null) { |
+ assert false; |
Theresa
2017/01/31 00:35:45
Do we want to do some logging here (and below) bef
Ted C
2017/01/31 00:54:34
Done.
|
return ContentSetting.BLOCK; |
} |
String url = TemplateUrlService.getInstance().getSearchEngineUrlFromTemplateUrl( |
- toKeyword(position)); |
+ templateUrl.getKeyword()); |
+ if (url == null) { |
+ assert false; |
+ return ContentSetting.BLOCK; |
+ } |
GeolocationInfo locationSettings = new GeolocationInfo(url, null, false); |
ContentSetting locationPermission = locationSettings.getContentSetting(); |
if (locationPermission == ContentSetting.ASK) { |
@@ -436,8 +452,8 @@ public class SearchEngineAdapter extends BaseAdapter |
return locationPermission; |
} |
- private boolean locationEnabled(int position, boolean checkGeoHeader) { |
- return getLocationPermissionType(position, checkGeoHeader) == ContentSetting.ALLOW; |
+ private boolean locationEnabled(TemplateUrl templateUrl, boolean checkGeoHeader) { |
+ return getLocationPermissionType(templateUrl, checkGeoHeader) == ContentSetting.ALLOW; |
} |
private int computeStartIndexForRecentSearchEngines() { |