OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.webview_shell; | 5 package org.chromium.webview_shell; |
6 | 6 |
7 import android.Manifest; | 7 import android.Manifest; |
8 import android.app.Activity; | 8 import android.app.Activity; |
9 import android.app.AlertDialog; | 9 import android.app.AlertDialog; |
10 import android.content.Context; | 10 import android.content.Context; |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 private void requestPermissionsForPage(PermissionRequest request) { | 231 private void requestPermissionsForPage(PermissionRequest request) { |
232 // Deny any unrecognized permissions. | 232 // Deny any unrecognized permissions. |
233 for (String webkitPermission : request.getResources()) { | 233 for (String webkitPermission : request.getResources()) { |
234 if (!sPermissions.containsKey(webkitPermission)) { | 234 if (!sPermissions.containsKey(webkitPermission)) { |
235 Log.w(TAG, "Unrecognized WebKit permission: " + webkitPermission
); | 235 Log.w(TAG, "Unrecognized WebKit permission: " + webkitPermission
); |
236 request.deny(); | 236 request.deny(); |
237 return; | 237 return; |
238 } | 238 } |
239 } | 239 } |
240 | 240 |
| 241 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { |
| 242 request.grant(request.getResources()); |
| 243 return; |
| 244 } |
| 245 |
241 // Find what Android permissions we need before we can grant these WebKi
t permissions. | 246 // Find what Android permissions we need before we can grant these WebKi
t permissions. |
242 ArrayList<String> androidPermissionsNeeded = new ArrayList<String>(); | 247 ArrayList<String> androidPermissionsNeeded = new ArrayList<String>(); |
243 for (String webkitPermission : request.getResources()) { | 248 for (String webkitPermission : request.getResources()) { |
244 if (!canGrant(webkitPermission)) { | 249 if (!canGrant(webkitPermission)) { |
245 // We already checked for unrecognized permissions, and canGrant
will skip over | 250 // We already checked for unrecognized permissions, and canGrant
will skip over |
246 // NO_ANDROID_PERMISSION cases, so this is guaranteed to be a re
gular Android | 251 // NO_ANDROID_PERMISSION cases, so this is guaranteed to be a re
gular Android |
247 // permission. | 252 // permission. |
248 String androidPermission = sPermissions.get(webkitPermission); | 253 String androidPermission = sPermissions.get(webkitPermission); |
249 androidPermissionsNeeded.add(androidPermission); | 254 androidPermissionsNeeded.add(androidPermission); |
250 } | 255 } |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 | 364 |
360 // Returns true is a method has no arguments and returns either a boolean or
a String. | 365 // Returns true is a method has no arguments and returns either a boolean or
a String. |
361 private boolean methodIsSimpleInspector(Method method) { | 366 private boolean methodIsSimpleInspector(Method method) { |
362 Class<?> returnType = method.getReturnType(); | 367 Class<?> returnType = method.getReturnType(); |
363 return ((returnType.equals(boolean.class) || returnType.equals(String.cl
ass)) | 368 return ((returnType.equals(boolean.class) || returnType.equals(String.cl
ass)) |
364 && method.getParameterTypes().length == 0); | 369 && method.getParameterTypes().length == 0); |
365 } | 370 } |
366 | 371 |
367 private void loadUrl(String url) { | 372 private void loadUrl(String url) { |
368 // Request read access if necessary | 373 // Request read access if necessary |
369 if ("file".equals(Uri.parse(url).getScheme())) { | 374 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M |
370 if (PackageManager.PERMISSION_DENIED | 375 && "file".equals(Uri.parse(url).getScheme()) |
371 == checkSelfPermission(Manifest.permission.READ_EXTERNAL_STO
RAGE)) { | 376 && PackageManager.PERMISSION_DENIED |
372 requestPermissionsForPage(new FilePermissionRequest(url)); | 377 == checkSelfPermission(Manifest.permission.READ_EXTERNAL
_STORAGE)) { |
373 } | 378 requestPermissionsForPage(new FilePermissionRequest(url)); |
374 } | 379 } |
375 | 380 |
376 // If it is file:// and we don't have permission, they'll get the "Webpa
ge not available" | 381 // If it is file:// and we don't have permission, they'll get the "Webpa
ge not available" |
377 // "net::ERR_ACCESS_DENIED" page. When we get permission, FilePermission
Request.grant() | 382 // "net::ERR_ACCESS_DENIED" page. When we get permission, FilePermission
Request.grant() |
378 // will reload. | 383 // will reload. |
379 mWebView.loadUrl(url); | 384 mWebView.loadUrl(url); |
380 mWebView.requestFocus(); | 385 mWebView.requestFocus(); |
381 } | 386 } |
382 | 387 |
383 private void setUrlBarText(String url) { | 388 private void setUrlBarText(String url) { |
(...skipping 12 matching lines...) Expand all Loading... |
396 private static boolean hideKeyboard(View view) { | 401 private static boolean hideKeyboard(View view) { |
397 InputMethodManager imm = (InputMethodManager) view.getContext().getSyste
mService( | 402 InputMethodManager imm = (InputMethodManager) view.getContext().getSyste
mService( |
398 Context.INPUT_METHOD_SERVICE); | 403 Context.INPUT_METHOD_SERVICE); |
399 return imm.hideSoftInputFromWindow(view.getWindowToken(), 0); | 404 return imm.hideSoftInputFromWindow(view.getWindowToken(), 0); |
400 } | 405 } |
401 | 406 |
402 private static String getUrlFromIntent(Intent intent) { | 407 private static String getUrlFromIntent(Intent intent) { |
403 return intent != null ? intent.getDataString() : null; | 408 return intent != null ? intent.getDataString() : null; |
404 } | 409 } |
405 } | 410 } |
OLD | NEW |