summaryrefslogtreecommitdiffstats
path: root/android_webview/glue
diff options
context:
space:
mode:
authortimvolodine <timvolodine@chromium.org>2016-03-02 11:58:47 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-02 20:00:43 +0000
commitbbaeb5b26d3ba544e801a2ad9f31955eb2309d89 (patch)
treeffcfaf91390fd6e3afb476e69cc616b9e5c6b13d /android_webview/glue
parent079c5d7d27110eeb18e0ead0d49327ee04a0321d (diff)
downloadchromium_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.gni1
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java15
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);