diff options
author | kristianm@chromium.org <kristianm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-12 07:22:47 +0000 |
---|---|---|
committer | kristianm@chromium.org <kristianm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-12 07:22:47 +0000 |
commit | 4436338f8e182423048f3bd31c46e42d35161b26 (patch) | |
tree | ebd2f9b93a9f5455f5b8a0618401bdbb5f016dbf | |
parent | 910334c2b6fc0a2f5edaacb15170ea51977fa555 (diff) | |
download | chromium_src-4436338f8e182423048f3bd31c46e42d35161b26.zip chromium_src-4436338f8e182423048f3bd31c46e42d35161b26.tar.gz chromium_src-4436338f8e182423048f3bd31c46e42d35161b26.tar.bz2 |
Implementing pauseTimers for chromium webview
Moving this into content/ so it can be used by android_webview. After
landing will remove the downstream uses of the chrome/ implementation
and later remove the chrome/ implementation.
BUG=
Review URL: https://chromiumcodereview.appspot.com/12374099
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187533 0039d316-1c4b-4281-b951-d872f2087c98
7 files changed, 59 insertions, 2 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java index b860687..6cfea36 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java @@ -6,6 +6,8 @@ package org.chromium.android_webview; import android.content.SharedPreferences; +import org.chromium.content.browser.ContentViewStatics; + /** * Java side of the Browser Context: contains all the java side objects needed to host one * browing session (i.e. profile). @@ -39,4 +41,18 @@ public class AwBrowserContext { } return mCookieManager; } + + /** + * @see android.webkit.WebView#pauseTimers() + */ + public void pauseTimers() { + ContentViewStatics.setWebKitSharedTimersSuspended(true); + } + + /** + * @see android.webkit.WebView#resumeTimers() + */ + public void resumeTimers() { + ContentViewStatics.setWebKitSharedTimersSuspended(false); + } }
\ No newline at end of file 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 01927a9..b82efc9 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -34,6 +34,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.content.browser.ContentSettings; import org.chromium.content.browser.ContentVideoView; import org.chromium.content.browser.ContentViewCore; +import org.chromium.content.browser.ContentViewStatics; import org.chromium.content.browser.LoadUrlParams; import org.chromium.content.browser.NavigationHistory; import org.chromium.content.browser.PageTransitionTypes; @@ -652,15 +653,17 @@ public class AwContents { /** * @see android.webkit.WebView#pauseTimers() */ + // TODO(kristianm): Remove public void pauseTimers() { - mContentViewCore.onActivityPause(); + ContentViewStatics.setWebKitSharedTimersSuspended(true); } /** * @see android.webkit.WebView#resumeTimers() */ + // TODO(kristianm): Remove public void resumeTimers() { - mContentViewCore.onActivityResume(); + ContentViewStatics.setWebKitSharedTimersSuspended(false); } /** diff --git a/content/browser/android/content_view_statics.cc b/content/browser/android/content_view_statics.cc index b3537ef9..0fb0896 100644 --- a/content/browser/android/content_view_statics.cc +++ b/content/browser/android/content_view_statics.cc @@ -11,6 +11,9 @@ #include "base/logging.h" #include "content/browser/android/content_view_statics.h" #include "content/common/android/address_parser.h" +#include "content/common/view_messages.h" +#include "content/public/browser/render_process_host.h" + #include "jni/ContentViewStatics_jni.h" using base::android::ConvertJavaStringToUTF16; @@ -27,6 +30,18 @@ static jstring FindAddress(JNIEnv* env, jclass clazz, jstring addr) { return NULL; } +static void SetWebKitSharedTimersSuspended(JNIEnv* env, + jclass obj, + jboolean suspend) { + for (content::RenderProcessHost::iterator i = + content::RenderProcessHost::AllHostsIterator(); + !i.IsAtEnd(); + i.Advance()) { + content::RenderProcessHost* host = i.GetCurrentValue(); + host->Send(new ViewMsg_SetWebKitSharedTimersSuspended(suspend)); + } +} + namespace content { bool RegisterWebViewStatics(JNIEnv* env) { diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 480c08c..c10f4aa 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -1312,6 +1312,10 @@ IPC_MESSAGE_ROUTED3(ViewMsg_WindowSnapshotCompleted, gfx::Size /* size */, std::vector<unsigned char> /* png */) +// Tells the renderer to suspend/resume the webkit timers. +IPC_MESSAGE_CONTROL1(ViewMsg_SetWebKitSharedTimersSuspended, + bool /* suspend */) + #if defined(OS_ANDROID) // Sent when the user clicks on the find result bar to activate a find result. // The point (x,y) is in fractions of the content document's width and height. diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewStatics.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewStatics.java index 3241314..68215b9 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewStatics.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewStatics.java @@ -27,6 +27,17 @@ public class ContentViewStatics { } /** + * Suspends Webkit timers in all renderers. + * New renderers created after this call will be created with the + * default options. + * + * @param suspend true if timers should be suspended. + */ + public static void setWebKitSharedTimersSuspended(boolean suspend) { + nativeSetWebKitSharedTimersSuspended(suspend); + } + + /** * Enables platform notifications of data state and proxy changes. * Notifications are enabled by default. */ @@ -46,4 +57,5 @@ public class ContentViewStatics { private static native String nativeFindAddress(String addr); + private static native void nativeSetWebKitSharedTimersSuspended(boolean suspend); } diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 6d05f9b..58cd3f7 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -1123,6 +1123,8 @@ bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewMsg_PurgePluginListCache, OnPurgePluginListCache) IPC_MESSAGE_HANDLER(ViewMsg_NetworkStateChanged, OnNetworkStateChanged) IPC_MESSAGE_HANDLER(ViewMsg_TempCrashWithData, OnTempCrashWithData) + IPC_MESSAGE_HANDLER(ViewMsg_SetWebKitSharedTimersSuspended, + OnSetWebKitSharedTimersSuspended) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -1255,6 +1257,10 @@ void RenderThreadImpl::OnTempCrashWithData(const GURL& data) { CHECK(false); } +void RenderThreadImpl::OnSetWebKitSharedTimersSuspended(bool suspend) { + ToggleWebKitSharedTimer(suspend); +} + scoped_refptr<base::MessageLoopProxy> RenderThreadImpl::GetFileThreadMessageLoopProxy() { DCHECK(message_loop() == MessageLoop::current()); diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index c5e11d0..048c9db 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h @@ -360,6 +360,7 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread, void OnNetworkStateChanged(bool online); void OnGetAccessibilityTree(); void OnTempCrashWithData(const GURL& data); + void OnSetWebKitSharedTimersSuspended(bool suspend); void IdleHandlerInForegroundTab(); |