OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.chrome.browser.webapps; | 5 package org.chromium.chrome.browser.webapps; |
6 | 6 |
7 import android.content.Intent; | 7 import android.content.Intent; |
8 import android.os.Bundle; | 8 import android.os.Bundle; |
9 import android.os.SystemClock; | 9 import android.os.SystemClock; |
10 | 10 |
11 import org.chromium.base.ContextUtils; | 11 import org.chromium.base.ContextUtils; |
12 import org.chromium.base.library_loader.LibraryProcessType; | 12 import org.chromium.base.library_loader.LibraryProcessType; |
13 import org.chromium.base.metrics.RecordHistogram; | 13 import org.chromium.base.metrics.RecordHistogram; |
14 import org.chromium.base.process_launcher.ChildProcessCreationParams; | 14 import org.chromium.base.process_launcher.ChildProcessCreationParams; |
15 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; | 15 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; |
16 import org.chromium.chrome.browser.metrics.WebApkUma; | 16 import org.chromium.chrome.browser.metrics.WebApkUma; |
17 import org.chromium.chrome.browser.tab.BrowserControlsVisibilityDelegate; | 17 import org.chromium.chrome.browser.tab.BrowserControlsVisibilityDelegate; |
18 import org.chromium.chrome.browser.tab.InterceptNavigationDelegateImpl; | 18 import org.chromium.chrome.browser.tab.InterceptNavigationDelegateImpl; |
19 import org.chromium.chrome.browser.tab.Tab; | 19 import org.chromium.chrome.browser.tab.Tab; |
20 import org.chromium.chrome.browser.tab.TabDelegateFactory; | 20 import org.chromium.chrome.browser.tab.TabDelegateFactory; |
21 import org.chromium.chrome.browser.tab.TabRedirectHandler; | 21 import org.chromium.chrome.browser.tab.TabRedirectHandler; |
| 22 import org.chromium.chrome.browser.util.UrlUtilities; |
22 import org.chromium.components.navigation_interception.NavigationParams; | 23 import org.chromium.components.navigation_interception.NavigationParams; |
23 import org.chromium.webapk.lib.client.WebApkServiceConnectionManager; | 24 import org.chromium.webapk.lib.client.WebApkServiceConnectionManager; |
24 | 25 |
25 import java.util.concurrent.TimeUnit; | 26 import java.util.concurrent.TimeUnit; |
26 | 27 |
27 /** | 28 /** |
28 * An Activity is designed for WebAPKs (native Android apps) and displays a weba
pp in a nearly | 29 * An Activity is designed for WebAPKs (native Android apps) and displays a weba
pp in a nearly |
29 * UI-less Chrome. | 30 * UI-less Chrome. |
30 */ | 31 */ |
31 public class WebApkActivity extends WebappActivity { | 32 public class WebApkActivity extends WebappActivity { |
(...skipping 18 matching lines...) Expand all Loading... |
50 protected void initializeUI(Bundle savedInstance) { | 51 protected void initializeUI(Bundle savedInstance) { |
51 super.initializeUI(savedInstance); | 52 super.initializeUI(savedInstance); |
52 getActivityTab().setWebappManifestScope(mWebappInfo.scopeUri().toString(
)); | 53 getActivityTab().setWebappManifestScope(mWebappInfo.scopeUri().toString(
)); |
53 } | 54 } |
54 | 55 |
55 @Override | 56 @Override |
56 protected TabDelegateFactory createTabDelegateFactory() { | 57 protected TabDelegateFactory createTabDelegateFactory() { |
57 return new WebappDelegateFactory(this) { | 58 return new WebappDelegateFactory(this) { |
58 @Override | 59 @Override |
59 public InterceptNavigationDelegateImpl createInterceptNavigationDele
gate(Tab tab) { | 60 public InterceptNavigationDelegateImpl createInterceptNavigationDele
gate(Tab tab) { |
60 return new InterceptNavigationDelegateImpl(tab) { | 61 return new WebappInterceptNavigationDelegate(WebApkActivity.this
, tab) { |
61 @Override | 62 @Override |
62 public ExternalNavigationParams.Builder buildExternalNavigat
ionParams( | 63 public ExternalNavigationParams.Builder buildExternalNavigat
ionParams( |
63 NavigationParams navigationParams, | 64 NavigationParams navigationParams, |
64 TabRedirectHandler tabRedirectHandler, boolean shoul
dCloseTab) { | 65 TabRedirectHandler tabRedirectHandler, boolean shoul
dCloseTab) { |
65 ExternalNavigationParams.Builder builder = | 66 ExternalNavigationParams.Builder builder = |
66 super.buildExternalNavigationParams( | 67 super.buildExternalNavigationParams( |
67 navigationParams, tabRedirectHandler, sh
ouldCloseTab); | 68 navigationParams, tabRedirectHandler, sh
ouldCloseTab); |
68 builder.setWebApkPackageName(getWebApkPackageName()); | 69 builder.setWebApkPackageName(getWebApkPackageName()); |
69 return builder; | 70 return builder; |
70 } | 71 } |
| 72 |
| 73 @Override |
| 74 protected boolean isUrlOutsideWebappScope(WebappInfo info, S
tring url) { |
| 75 return !UrlUtilities.isUrlWithinScope(url, info.scopeUri
().toString()); |
| 76 } |
71 }; | 77 }; |
72 } | 78 } |
73 | 79 |
74 @Override | 80 @Override |
75 public boolean canShowAppBanners(Tab tab) { | 81 public boolean canShowAppBanners(Tab tab) { |
76 // Do not show app banners for WebAPKs regardless of the current
page URL. | 82 // Do not show app banners for WebAPKs regardless of the current
page URL. |
77 // A WebAPK can display a page outside of its WebAPK scope if a
page within the | 83 // A WebAPK can display a page outside of its WebAPK scope if a
page within the |
78 // WebAPK scope navigates via JavaScript while the WebAPK is in
the background. | 84 // WebAPK scope navigates via JavaScript while the WebAPK is in
the background. |
79 return false; | 85 return false; |
80 } | 86 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 } | 208 } |
203 | 209 |
204 @Override | 210 @Override |
205 protected void onDestroyInternal() { | 211 protected void onDestroyInternal() { |
206 if (mUpdateManager != null) { | 212 if (mUpdateManager != null) { |
207 mUpdateManager.destroy(); | 213 mUpdateManager.destroy(); |
208 } | 214 } |
209 super.onDestroyInternal(); | 215 super.onDestroyInternal(); |
210 } | 216 } |
211 } | 217 } |
OLD | NEW |