Commit c13ab13e authored by newt's avatar newt Committed by Commit bot

Work around a location-related crash on OnePlus2 devices.

On OnePlus2 Lollipop devices, the network location provider incorrectly
requires the FINE_LOCATION permission, instead of just the
COARSE_LOCATION permission. Those devices also allow users to disable
location on a per-app basis, which leads to crashes when users disable
fine location for Chrome, but not coarse location. This CL avoids a
crash by checking both permissions on pre-M devices.

BUG=580733

Review URL: https://codereview.chromium.org/1626403003

Cr-Commit-Position: refs/heads/master@{#371409}
parent 6ae6611d
......@@ -9,6 +9,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.net.Uri;
import android.os.Build;
import android.os.Process;
import android.util.Base64;
......@@ -145,9 +146,23 @@ public class GeolocationHeader {
}
static boolean hasGeolocationPermission(Context context) {
return context.checkPermission(
Manifest.permission.ACCESS_COARSE_LOCATION, Process.myPid(), Process.myUid())
== PackageManager.PERMISSION_GRANTED;
int pid = Process.myPid();
int uid = Process.myUid();
if (context.checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, pid, uid)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
// Work around a bug in OnePlus2 devices running Lollipop, where the NETWORK_PROVIDER
// incorrectly requires FINE_LOCATION permission (it should only require COARSE_LOCATION
// permission). http://crbug.com/580733
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M
&& context.checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, pid, uid)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
return true;
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment