summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbenm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-27 23:35:06 +0000
committerbenm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-27 23:35:06 +0000
commit6ec278727a8860a3f411c183f6601538de540718 (patch)
tree00251994cefcd474528c9f0a3ff3ec5cd1066328
parent6bf9fd99b7664858b4cd8841d55a2cef2eec7cc1 (diff)
downloadchromium_src-6ec278727a8860a3f411c183f6601538de540718.zip
chromium_src-6ec278727a8860a3f411c183f6601538de540718.tar.gz
chromium_src-6ec278727a8860a3f411c183f6601538de540718.tar.bz2
[Android WebView] Add an API to toggle the JS navigator.online property
BUG=279929 Review URL: https://chromiumcodereview.appspot.com/22986033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219854 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.cc4
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.h1
-rw-r--r--android_webview/common/render_view_messages.h4
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java7
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java25
-rw-r--r--android_webview/native/aw_contents.cc6
-rw-r--r--android_webview/native/aw_contents.h3
-rw-r--r--android_webview/renderer/aw_render_process_observer.cc7
-rw-r--r--android_webview/renderer/aw_render_process_observer.h1
9 files changed, 57 insertions, 1 deletions
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
index 95f2358..78d6cf4 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
@@ -96,6 +96,10 @@ void AwRenderViewHostExt::SetBackgroundColor(SkColor c) {
}
}
+void AwRenderViewHostExt::SetJsOnlineProperty(bool network_up) {
+ Send(new AwViewMsg_SetJsOnlineProperty(network_up));
+}
+
void AwRenderViewHostExt::RenderViewCreated(
content::RenderViewHost* render_view_host) {
Send(new AwViewMsg_SetBackgroundColor(web_contents()->GetRoutingID(),
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.h b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
index da9bcac..3007f15 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.h
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
@@ -72,6 +72,7 @@ class AwRenderViewHostExt : public content::WebContentsObserver,
// the meta viewport tag.
void SetInitialPageScale(double page_scale_factor);
void SetBackgroundColor(SkColor c);
+ void SetJsOnlineProperty(bool network_up);
private:
// content::WebContentsObserver implementation.
diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h
index 69f826c..96d1758 100644
--- a/android_webview/common/render_view_messages.h
+++ b/android_webview/common/render_view_messages.h
@@ -71,6 +71,9 @@ IPC_MESSAGE_ROUTED1(AwViewMsg_SetInitialPageScale,
IPC_MESSAGE_ROUTED1(AwViewMsg_SetBackgroundColor,
SkColor);
+IPC_MESSAGE_CONTROL1(AwViewMsg_SetJsOnlineProperty,
+ bool /* network_up */)
+
//-----------------------------------------------------------------------------
// RenderView messages
// These are messages sent from the renderer to the browser process.
@@ -87,4 +90,3 @@ IPC_MESSAGE_ROUTED1(AwViewHostMsg_UpdateHitTestData,
// Sent whenever the page scale factor (as seen by RenderView) is changed.
IPC_MESSAGE_ROUTED1(AwViewHostMsg_PageScaleFactorChanged,
float /* page_scale_factor */)
-
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index df560c4..18ba0cca 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1639,6 +1639,11 @@ public class AwContents {
mAwAutofillManagerDelegate.hideAutofillPopup();
}
+ public void setNetworkAvailable(boolean networkUp) {
+ if (mNativeAwContents == 0) return;
+ nativeSetJsOnlineProperty(mNativeAwContents, networkUp);
+ }
+
//--------------------------------------------------------------------------------------------
// Methods called from native via JNI
//--------------------------------------------------------------------------------------------
@@ -1917,4 +1922,6 @@ public class AwContents {
private native void nativeInvokeGeolocationCallback(
int nativeAwContents, boolean value, String requestingFrame);
+
+ private native void nativeSetJsOnlineProperty(int nativeAwContents, boolean networkUp);
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
index 455d30b..6d508ed 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -392,4 +392,29 @@ public class AwContentsTest extends AwTestBase {
if (webServer != null) webServer.shutdown();
}
}
+
+ @Feature({"AndroidWebView", "setNetworkAvailable"})
+ @SmallTest
+ public void testSetNetworkAvailable() throws Throwable {
+ AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
+ AwContents awContents = testView.getAwContents();
+ String SCRIPT = "navigator.onLine";
+
+ enableJavaScriptOnUiThread(awContents);
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), "about:blank");
+
+ // Default to "online".
+ assertEquals("true", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
+ SCRIPT));
+
+ // Forcing "offline".
+ awContents.setNetworkAvailable(false);
+ assertEquals("false", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
+ SCRIPT));
+
+ // Forcing "online".
+ awContents.setNetworkAvailable(true);
+ assertEquals("true", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
+ SCRIPT));
+ }
}
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index e6cf841..dd8db0a 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -780,4 +780,10 @@ void AwContents::EnableOnNewPicture(JNIEnv* env,
browser_view_renderer_->EnableOnNewPicture(enabled);
}
+void AwContents::SetJsOnlineProperty(JNIEnv* env,
+ jobject obj,
+ jboolean network_up) {
+ render_view_host_ext_->SetJsOnlineProperty(network_up);
+}
+
} // namespace android_webview
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 24dff4f..272f0ae 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -173,6 +173,9 @@ class AwContents : public FindHelper::Listener,
// Sets the java delegate
void SetAwAutofillManagerDelegate(jobject delegate);
+
+ void SetJsOnlineProperty(JNIEnv* env, jobject obj, jboolean network_up);
+
private:
void InitAutofillIfNecessary(bool enabled);
diff --git a/android_webview/renderer/aw_render_process_observer.cc b/android_webview/renderer/aw_render_process_observer.cc
index 5e3ecca..561580c 100644
--- a/android_webview/renderer/aw_render_process_observer.cc
+++ b/android_webview/renderer/aw_render_process_observer.cc
@@ -7,6 +7,7 @@
#include "android_webview/common/render_view_messages.h"
#include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/web/WebCache.h"
+#include "third_party/WebKit/public/web/WebNetworkStateNotifier.h"
namespace android_webview {
@@ -22,6 +23,7 @@ bool AwRenderProcessObserver::OnControlMessageReceived(
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AwRenderProcessObserver, message)
IPC_MESSAGE_HANDLER(AwViewMsg_ClearCache, OnClearCache)
+ IPC_MESSAGE_HANDLER(AwViewMsg_SetJsOnlineProperty, OnSetJsOnlineProperty)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -36,4 +38,9 @@ void AwRenderProcessObserver::OnClearCache() {
WebKit::WebCache::clear();
}
+void AwRenderProcessObserver::OnSetJsOnlineProperty(bool network_up) {
+ if (webkit_initialized_)
+ WebKit::WebNetworkStateNotifier::setOnLine(network_up);
+}
+
} // nanemspace android_webview
diff --git a/android_webview/renderer/aw_render_process_observer.h b/android_webview/renderer/aw_render_process_observer.h
index 5a5a8f9..2cb4d2f 100644
--- a/android_webview/renderer/aw_render_process_observer.h
+++ b/android_webview/renderer/aw_render_process_observer.h
@@ -24,6 +24,7 @@ class AwRenderProcessObserver : public content::RenderProcessObserver {
private:
void OnClearCache();
+ void OnSetJsOnlineProperty(bool network_up);
bool webkit_initialized_;
};