summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkristianm@chromium.org <kristianm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-12 07:22:47 +0000
committerkristianm@chromium.org <kristianm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-12 07:22:47 +0000
commit4436338f8e182423048f3bd31c46e42d35161b26 (patch)
treeebd2f9b93a9f5455f5b8a0618401bdbb5f016dbf
parent910334c2b6fc0a2f5edaacb15170ea51977fa555 (diff)
downloadchromium_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
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java16
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java7
-rw-r--r--content/browser/android/content_view_statics.cc15
-rw-r--r--content/common/view_messages.h4
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentViewStatics.java12
-rw-r--r--content/renderer/render_thread_impl.cc6
-rw-r--r--content/renderer/render_thread_impl.h1
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();