diff options
author | benm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-27 23:35:06 +0000 |
---|---|---|
committer | benm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-27 23:35:06 +0000 |
commit | 6ec278727a8860a3f411c183f6601538de540718 (patch) | |
tree | 00251994cefcd474528c9f0a3ff3ec5cd1066328 | |
parent | 6bf9fd99b7664858b4cd8841d55a2cef2eec7cc1 (diff) | |
download | chromium_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
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_; }; |