summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu <boliu@chromium.org>2015-10-26 15:55:19 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-26 22:56:09 +0000
commit60df207a0e5a2f690ac2eabcc3f7eb8e5ae3d47b (patch)
tree51e1999fc20563e913ebc9aabe278c984a5fdbae /android_webview
parentb2f96a5eefb9ca66435bba93495b3cddcdcaa80d (diff)
downloadchromium_src-60df207a0e5a2f690ac2eabcc3f7eb8e5ae3d47b.zip
chromium_src-60df207a0e5a2f690ac2eabcc3f7eb8e5ae3d47b.tar.gz
chromium_src-60df207a0e5a2f690ac2eabcc3f7eb8e5ae3d47b.tar.bz2
Allow sync ipc from browser UI to renderer for Android Webview
Design doc: https://goo.gl/Tn81FW Sync IPC from browser UI thread to renderer compositor thread is required to maintain synchronous rendering requirements of Android WebView with a separate renderer process. Sync IPCs from browser on Chrome and other platforms are still banned. Sync IPCs still have bad security and stability properties even on Android WebView, but they are still strictly better than in-process renderer. Deadlock concerns: Renderer compositor thread can never (transitively) block on browser UI thread to avoid deadlocks. This is true today, as Android WebView merges the compositor and UI threads and mostly requires compositor never send sync IPCs to UI already. Note sync IPC from renderer main thread to UI thread will not cause a deadlock. Behind the android-only --ipc-sync-compositing switch. When switch is set: * Create SyncChannel from browser to renderer * Child process ensure that synchronous IPC always sends a reply. Adding a new switch instead of re-using the existing kWebViewSandboxedRenderer because IPC-based sync compositing will work and ship in in-process mode, and does not depend on having a sandboxed renderer process. Also add DEPS rules so that only UI thread can send sync IPC. BUG=526842 Review URL: https://codereview.chromium.org/1406793002 Cr-Commit-Position: refs/heads/master@{#356161}
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/DEPS4
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java5
2 files changed, 8 insertions, 1 deletions
diff --git a/android_webview/browser/DEPS b/android_webview/browser/DEPS
index a6fb034..45a102a 100644
--- a/android_webview/browser/DEPS
+++ b/android_webview/browser/DEPS
@@ -28,6 +28,10 @@ include_rules = [
"+content/public/browser",
"+content/public/test",
+ # Explicitly disallow using SyncMessageFilter to prevent browser from
+ # sending synchronous IPC messages on non-UI threads.
+ "-ipc/ipc_sync_message_filter.h",
+
"+media/base/android",
"+policy/policy_constants.h",
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 5150ba2..1f2bcfe 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
@@ -34,6 +34,7 @@ import org.chromium.content.browser.BindingManager;
import org.chromium.content.browser.ChildProcessConnection;
import org.chromium.content.browser.ChildProcessLauncher;
import org.chromium.content.browser.test.util.CallbackHelper;
+import org.chromium.content.common.ContentSwitches;
import org.chromium.content_public.browser.AccessibilitySnapshotCallback;
import org.chromium.content_public.browser.AccessibilitySnapshotNode;
import org.chromium.net.test.util.TestWebServer;
@@ -589,7 +590,9 @@ public class AwContentsTest extends AwTestBase {
@Feature({"AndroidWebView"})
@SmallTest
- @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
+ @CommandLineFlags.Add({
+ AwSwitches.WEBVIEW_SANDBOXED_RENDERER,
+ ContentSwitches.IPC_SYNC_COMPOSITING})
public void testSandboxedRendererWorks() throws Throwable {
MockBindingManager bindingManager = new MockBindingManager();
ChildProcessLauncher.setBindingManagerForTesting(bindingManager);