summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 00:31:01 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 00:31:01 +0000
commit2985ed758610fb7d6d3a8d2400328d3ad7383fca (patch)
tree5f4873df3edd23b5e46702fc758da989a62a650e /android_webview
parenta9f94bc6fc85c5d406035402e116f1ae29b0b675 (diff)
downloadchromium_src-2985ed758610fb7d6d3a8d2400328d3ad7383fca.zip
chromium_src-2985ed758610fb7d6d3a8d2400328d3ad7383fca.tar.gz
chromium_src-2985ed758610fb7d6d3a8d2400328d3ad7383fca.tar.bz2
Remove Android WebView synchronous find.
After the browser UI thread and the renderer compositor threads are merged, all synchronous calls from UI to renderer will possible deadlocks since the renderer webkit thread blocks on the compositor thread all the time. Therefore remove support for synchronous find in page which is already an deprecated API. BUG=179436 TBR=palmer@chromium.org (Only removing ipc message) Review URL: https://chromiumcodereview.appspot.com/12383030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186827 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/find_helper.cc35
-rw-r--r--android_webview/browser/find_helper.h3
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java8
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/WebViewMixedFindApisTest.java42
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/WebViewSynchronousFindApisTest.java142
-rw-r--r--android_webview/native/aw_contents.cc5
-rw-r--r--android_webview/native/aw_contents.h1
7 files changed, 5 insertions, 231 deletions
diff --git a/android_webview/browser/find_helper.cc b/android_webview/browser/find_helper.cc
index b4c7669..56dbe49d 100644
--- a/android_webview/browser/find_helper.cc
+++ b/android_webview/browser/find_helper.cc
@@ -35,41 +35,6 @@ void FindHelper::SetListener(Listener* listener) {
listener_ = listener;
}
-int FindHelper::FindAllSync(const string16& search_string) {
- sync_find_started_ = true;
- async_find_started_ = false;
-
- WebFindOptions options;
- options.forward = true;
- options.matchCase = false;
- options.findNext = false;
-
- int match_count = 0;
- int active_ordinal = 0;
-
- StartNewRequest(search_string);
-
- // Any ongoing asynchronous requests will be stopped in the renderer when
- // calling SynchronousFind. Using the asynchronous StopFinding message could
- // lead to deadblocks as the message could arrive in the middle of the
- // synchronous operation and cancel the reply back.
- ScopedAllowWaitForLegacyWebViewApi wait;
- web_contents()->GetRenderViewHost()->SynchronousFind(current_request_id_,
- search_string,
- options,
- &match_count,
- &active_ordinal);
-
- // Post the task to ourselves to prevent trigerring the notification before
- // we actually return from the request.
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&FindHelper::NotifyResults, weak_factory_.GetWeakPtr(),
- active_ordinal, match_count, true));
-
- return match_count;
-}
-
void FindHelper::FindAllAsync(const string16& search_string) {
// Stop any ongoing asynchronous request.
web_contents()->GetRenderViewHost()->StopFinding(
diff --git a/android_webview/browser/find_helper.h b/android_webview/browser/find_helper.h
index a9d7aed..7662ec5 100644
--- a/android_webview/browser/find_helper.h
+++ b/android_webview/browser/find_helper.h
@@ -31,9 +31,6 @@ class FindHelper : public content::WebContentsObserver {
// Does not own the listener and must set to NULL when invalid.
void SetListener(Listener* listener);
- // Synchronous API.
- int FindAllSync(const string16& search_string);
-
// Asynchronous API.
void FindAllAsync(const string16& search_string);
void HandleFindReply(int request_id,
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 ac01bc9..5db36f0 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -381,9 +381,12 @@ public class AwContents {
nativeEnableOnNewPicture(mNativeAwContents, enabled, invalidationOnly);
}
+ // This is no longer synchronous and just calls the Async version and return 0.
+ // TODO(boliu): Remove this method.
+ @Deprecated
public int findAllSync(String searchString) {
- if (mNativeAwContents == 0) return 0;
- return nativeFindAllSync(mNativeAwContents, searchString);
+ findAllAsync(searchString);
+ return 0;
}
public void findAllAsync(String searchString) {
@@ -1055,7 +1058,6 @@ public class AwContents {
private native void nativeAddVisitedLinks(int nativeAwContents, String[] visitedLinks);
private native void nativeSetScrollForHWFrame(int nativeAwContents, int scrollX, int scrollY);
- private native int nativeFindAllSync(int nativeAwContents, String searchString);
private native void nativeFindAllAsync(int nativeAwContents, String searchString);
private native void nativeFindNext(int nativeAwContents, boolean forward);
private native void nativeClearMatches(int nativeAwContents);
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/WebViewMixedFindApisTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/WebViewMixedFindApisTest.java
deleted file mode 100644
index b5a7313..0000000
--- a/android_webview/javatests/src/org/chromium/android_webview/test/WebViewMixedFindApisTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.android_webview.test;
-
-import android.test.suitebuilder.annotation.SmallTest;
-
-import org.chromium.base.test.util.Feature;
-
-/**
- * Tests the mixed use of synchronous and asynchronous find-in-page APIs in WebView.
- * Helps to spot race conditions or potential deadlocks caused by the renderer receiving
- * asynchronous messages while synchronous requests are being processed.
- */
-public class WebViewMixedFindApisTest extends WebViewFindApisTestBase {
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testAsyncFindOperationsMixedWithSyncFind() throws Throwable {
- clearMatchesOnUiThread();
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- clearMatchesOnUiThread();
- assertEquals(4, findAllAsyncOnUiThread("wood"));
- assertEquals(3, findNextOnUiThread(true));
- clearMatchesOnUiThread();
- assertEquals(4, findAllSyncOnUiThread("wood"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testInterleavedFinds() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(4, findAllAsyncOnUiThread("wood"));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(3, findNextOnUiThread(true));
- assertEquals(4, findAllAsyncOnUiThread("wood"));
- assertEquals(1, findNextOnUiThread(true));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- }
-}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/WebViewSynchronousFindApisTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/WebViewSynchronousFindApisTest.java
deleted file mode 100644
index d4c4859..0000000
--- a/android_webview/javatests/src/org/chromium/android_webview/test/WebViewSynchronousFindApisTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.android_webview.test;
-
-import android.test.FlakyTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import org.chromium.base.test.util.Feature;
-
-/**
- * Tests the synchronous find-in-page APIs in WebView.
- */
-public class WebViewSynchronousFindApisTest extends WebViewFindApisTestBase {
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllFinds() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllDouble() throws Throwable {
- findAllSyncOnUiThread("wood");
- assertEquals(4, findAllSyncOnUiThread("chuck"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllDoubleNext() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(2, findNextOnUiThread(true));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllDoesNotFind() throws Throwable {
- assertEquals(0, findAllSyncOnUiThread("foo"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllEmptyPage() throws Throwable {
- assertEquals(0, findAllSyncOnUiThread("foo"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllEmptyString() throws Throwable {
- assertEquals(0, findAllSyncOnUiThread(""));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindNextForward() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
-
- for (int i = 2; i <= 4; i++) {
- assertEquals(i - 1, findNextOnUiThread(true));
- }
- assertEquals(0, findNextOnUiThread(true));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindNextBackward() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
-
- for (int i = 4; i >= 1; i--) {
- assertEquals(i - 1, findNextOnUiThread(false));
- }
- assertEquals(3, findNextOnUiThread(false));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindNextBig() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
-
- assertEquals(1, findNextOnUiThread(true));
- assertEquals(0, findNextOnUiThread(false));
- assertEquals(3, findNextOnUiThread(false));
- for (int i = 1; i <= 4; i++) {
- assertEquals(i - 1, findNextOnUiThread(true));
- }
- assertEquals(0, findNextOnUiThread(true));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindAllEmptyNext() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(1, findNextOnUiThread(true));
- assertEquals(0, findAllSyncOnUiThread(""));
- assertEquals(0, findNextOnUiThread(true));
- assertEquals(0, findAllSyncOnUiThread(""));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(1, findNextOnUiThread(true));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testClearMatches() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- clearMatchesOnUiThread();
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testClearFindNext() throws Throwable {
- assertEquals(4, findAllSyncOnUiThread("wood"));
- clearMatchesOnUiThread();
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(2, findNextOnUiThread(true));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindEmptyNext() throws Throwable {
- assertEquals(0, findAllSyncOnUiThread(""));
- assertEquals(0, findNextOnUiThread(true));
- assertEquals(4, findAllSyncOnUiThread("wood"));
- }
-
- @SmallTest
- @Feature({"AndroidWebView", "FindInPage"})
- public void testFindNextFirst() throws Throwable {
- runTestOnUiThread(new Runnable() {
- @Override
- public void run() {
- contents().findNext(true);
- }
- });
- assertEquals(4, findAllSyncOnUiThread("wood"));
- assertEquals(1, findNextOnUiThread(true));
- assertEquals(0, findNextOnUiThread(false));
- assertEquals(3, findNextOnUiThread(false));
- }
-}
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 4176419..f740291 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -439,11 +439,6 @@ void AwContents::HideGeolocationPrompt(const GURL& origin) {
}
}
-jint AwContents::FindAllSync(JNIEnv* env, jobject obj, jstring search_string) {
- return GetFindHelper()->FindAllSync(
- ConvertJavaStringToUTF16(env, search_string));
-}
-
void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) {
GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string));
}
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 06698d5..a72dc32 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -138,7 +138,6 @@ class AwContents : public FindHelper::Listener,
jstring origin);
// Find-in-page API and related methods.
- jint FindAllSync(JNIEnv* env, jobject obj, jstring search_string);
void FindAllAsync(JNIEnv* env, jobject obj, jstring search_string);
void FindNext(JNIEnv* env, jobject obj, jboolean forward);
void ClearMatches(JNIEnv* env, jobject obj);