Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
index 044f6053657d5cfd3182c53690d1b98a7a55b5e5..2b29bcbdc228be35f29a89ebe71d8e53b0c25641 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
@@ -22,6 +22,7 @@ import org.chromium.chrome.browser.ChromeActivity; |
import org.chromium.chrome.browser.ChromeSwitches; |
import org.chromium.chrome.browser.IntentHandler; |
import org.chromium.chrome.browser.UrlConstants; |
+import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; |
import org.chromium.chrome.browser.util.IntentUtils; |
import org.chromium.chrome.browser.util.UrlUtilities; |
import org.chromium.ui.base.PageTransition; |
@@ -172,12 +173,16 @@ public class ExternalNavigationHandler { |
// If accessing a file URL, ensure that the user has granted the necessary file access |
// to Chrome. This check should happen for reloads, navigations, etc..., which is why |
// it occurs before the subsequent blocks. |
- if (params.getUrl().startsWith("file:") |
- && mDelegate.shouldRequestFileAccess(params.getTab())) { |
- mDelegate.startFileIntent( |
- intent, params.getReferrerUrl(), params.getTab(), |
- params.shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent()); |
- return OverrideUrlLoadingResult.OVERRIDE_WITH_ASYNC_ACTION; |
+ if (params.getUrl().startsWith("file:")) { |
+ // If accessing a file URL, which points to inside of an offline copy archive, there |
+ // is no need to override the navigation. |
+ if (OfflinePageUtils.isOfflineUrlForStoragePermissionCheck(params.getUrl())) { |
+ return OverrideUrlLoadingResult.NO_OVERRIDE; |
+ } else if (mDelegate.shouldRequestFileAccess(params.getTab())) { |
+ mDelegate.startFileIntent(intent, params.getReferrerUrl(), params.getTab(), |
+ params.shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent()); |
+ return OverrideUrlLoadingResult.OVERRIDE_WITH_ASYNC_ACTION; |
+ } |
} |
// http://crbug/331571 : Do not override a navigation started from user typing. |