Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java |
index 49d3decbda66eac6bd81e878614b9976b5518d03..2bebd710a4028bfbbba10d03983d6852b823b825 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java |
@@ -25,6 +25,7 @@ import android.util.Log; |
import org.chromium.base.ApplicationState; |
import org.chromium.base.ApplicationStatus; |
+import org.chromium.base.PathUtils; |
import org.chromium.base.ThreadUtils; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ChromeActivity; |
@@ -281,10 +282,17 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat |
} |
@Override |
- public boolean shouldRequestFileAccess(Tab tab) { |
+ public boolean shouldRequestFileAccess(String url, Tab tab) { |
// If the tab is null, then do not attempt to prompt for access. |
if (tab == null) return false; |
+ // If the url points inside of Chromium's data directory, no permissions are necessary. |
+ // This is required to prevent permission prompt when uses wants to access offline pages. |
+ if (url.startsWith("file://" + PathUtils.getDataDirectory( |
+ mActivity.getApplicationContext()))) { |
+ return false; |
+ } |
+ |
return !tab.getWindowAndroid().hasPermission(permission.WRITE_EXTERNAL_STORAGE) |
&& tab.getWindowAndroid().canRequestPermission(permission.WRITE_EXTERNAL_STORAGE); |
} |