diff options
author | timvolodine <timvolodine@chromium.org> | 2016-03-02 11:58:47 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-02 20:00:43 +0000 |
commit | bbaeb5b26d3ba544e801a2ad9f31955eb2309d89 (patch) | |
tree | ffcfaf91390fd6e3afb476e69cc616b9e5c6b13d /android_webview/glue | |
parent | 079c5d7d27110eeb18e0ead0d49327ee04a0321d (diff) | |
download | chromium_src-bbaeb5b26d3ba544e801a2ad9f31955eb2309d89.zip chromium_src-bbaeb5b26d3ba544e801a2ad9f31955eb2309d89.tar.gz chromium_src-bbaeb5b26d3ba544e801a2ad9f31955eb2309d89.tar.bz2 |
[Android WebView] Implement support for Network Information API and enable it.
Currently Network Information API and everything related to the
NetworkChangeNotifier is disabled in WebView. This patch implements
the required parts to enable Network Information API in WebView.
The WebView implementation is based on NetworkChangeNotifier,
similar to chrome for Android. However the registration policy
is different:
1. whether we listen to network changes depends on the presence
of live WebView instances,
2. both the band-width and connectivity changes are propagated,
but a reduced network stack is involved as compared to the chrome
for android implementation,
3. for backward compatibility invoking setNetworkAvailable() on a
webview disables network information api.
4. The embedding application needs to have ACCESS_NETWORK_STATE
permission at the time webview process is initialized for the Network
Information API to work.
BUG=520088, 590383
Committed: https://crrev.com/3673455317898f450211636919c2bef7a8e3fe0f
Cr-Commit-Position: refs/heads/master@{#376975}
Review URL: https://codereview.chromium.org/1659363003
Cr-Commit-Position: refs/heads/master@{#378807}
Diffstat (limited to 'android_webview/glue')
-rw-r--r-- | android_webview/glue/glue.gni | 1 | ||||
-rw-r--r-- | android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/android_webview/glue/glue.gni b/android_webview/glue/glue.gni index fc9c65a..e49cd3d 100644 --- a/android_webview/glue/glue.gni +++ b/android_webview/glue/glue.gni @@ -11,6 +11,7 @@ glue_library_deps = [ "//content/public/android:content_java", "//content/public/android:content_java_resources", "//components/web_contents_delegate_android:web_contents_delegate_android_java_resources", + "//net/android:net_java", "//ui/android:ui_java", "//ui/android:ui_java_resources", ] diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java index 13a9b0f..8770d3a 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java @@ -4,15 +4,18 @@ package com.android.webview.chromium; +import android.Manifest; import android.app.ActivityManager; import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Looper; +import android.os.Process; import android.os.StrictMode; import android.util.Log; import android.webkit.CookieManager; @@ -34,6 +37,7 @@ import org.chromium.android_webview.AwContentsStatics; import org.chromium.android_webview.AwCookieManager; import org.chromium.android_webview.AwDataReductionProxyManager; import org.chromium.android_webview.AwDevToolsServer; +import org.chromium.android_webview.AwNetworkChangeNotifierRegistrationPolicy; import org.chromium.android_webview.AwQuotaManagerBridge; import org.chromium.android_webview.AwResource; import org.chromium.android_webview.AwSettings; @@ -50,6 +54,7 @@ import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.ProcessInitException; import org.chromium.content.browser.ContentViewStatics; +import org.chromium.net.NetworkChangeNotifier; import org.chromium.ui.base.ResourceBundle; import java.io.File; @@ -171,6 +176,15 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { AwContents.setAwDrawGLFunctionTable(GraphicsUtils.getDrawGLFunctionTable()); } + private void initNetworkChangeNotifier(Context applicationContext) { + if (applicationContext.checkPermission(Manifest.permission.ACCESS_NETWORK_STATE, + Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED) { + NetworkChangeNotifier.init(applicationContext); + NetworkChangeNotifier.setAutoDetectConnectivityState( + new AwNetworkChangeNotifierRegistrationPolicy()); + } + } + private void ensureChromiumStartedLocked(boolean onMainThread) { assert Thread.holdsLock(mLock); @@ -241,6 +255,7 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { setUpResources(webViewPackageName, context); ResourceBundle.initializeLocalePaks(context, R.array.locale_paks); initPlatSupportLibrary(); + initNetworkChangeNotifier(context); final int extraBindFlags = 0; AwBrowserProcess.configureChildProcessLauncher(webViewPackageName, extraBindFlags); AwBrowserProcess.start(context); |