diff options
author | boliu <boliu@chromium.org> | 2015-10-26 15:55:19 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-26 22:56:09 +0000 |
commit | 60df207a0e5a2f690ac2eabcc3f7eb8e5ae3d47b (patch) | |
tree | 51e1999fc20563e913ebc9aabe278c984a5fdbae /android_webview | |
parent | b2f96a5eefb9ca66435bba93495b3cddcdcaa80d (diff) | |
download | chromium_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/DEPS | 4 | ||||
-rw-r--r-- | android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java | 5 |
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); |