summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/ChromeWebContentsDelegateAndroid.java34
-rw-r--r--chrome/browser/android/chrome_web_contents_delegate_android.cc135
2 files changed, 82 insertions, 87 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeWebContentsDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeWebContentsDelegateAndroid.java
index f7abbc8..546f302 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeWebContentsDelegateAndroid.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeWebContentsDelegateAndroid.java
@@ -4,6 +4,9 @@
package org.chromium.chrome.browser;
+import android.graphics.Rect;
+import android.graphics.RectF;
+
import org.chromium.base.CalledByNative;
import org.chromium.components.web_contents_delegate_android.WebContentsDelegateAndroid;
@@ -22,4 +25,35 @@ public class ChromeWebContentsDelegateAndroid extends WebContentsDelegateAndroid
@CalledByNative
public void onFindMatchRectsAvailable(FindMatchRectsDetails result) {
}
+
+ // Helper functions used to create types that are part of the public interface
+ @CalledByNative
+ private static Rect createRect(int x, int y, int right, int bottom) {
+ return new Rect(x, y, right, bottom);
+ }
+
+ @CalledByNative
+ private static RectF createRectF(float x, float y, float right, float bottom) {
+ return new RectF(x, y, right, bottom);
+ }
+
+ @CalledByNative
+ private static FindNotificationDetails createFindNotificationDetails(
+ int numberOfMatches, Rect rendererSelectionRect,
+ int activeMatchOrdinal, boolean finalUpdate) {
+ return new FindNotificationDetails(numberOfMatches, rendererSelectionRect,
+ activeMatchOrdinal, finalUpdate);
+ }
+
+ @CalledByNative
+ private static FindMatchRectsDetails createFindMatchRectsDetails(
+ int version, int numRects, RectF activeRect) {
+ return new FindMatchRectsDetails(version, new RectF[numRects], activeRect);
+ }
+
+ @CalledByNative
+ private static void setMatchRectByIndex(
+ FindMatchRectsDetails findMatchRectsDetails, int index, RectF rect) {
+ findMatchRectsDetails.rects[index] = rect;
+ }
}
diff --git a/chrome/browser/android/chrome_web_contents_delegate_android.cc b/chrome/browser/android/chrome_web_contents_delegate_android.cc
index 4ed5621..56f993d 100644
--- a/chrome/browser/android/chrome_web_contents_delegate_android.cc
+++ b/chrome/browser/android/chrome_web_contents_delegate_android.cc
@@ -33,9 +33,6 @@
#include "chrome/browser/pepper_broker_infobar_delegate.h"
#endif
-using base::android::AttachCurrentThread;
-using base::android::GetClass;
-using base::android::MethodID;
using base::android::ScopedJavaLocalRef;
using content::FileChooserParams;
using content::NavigationController;
@@ -44,28 +41,6 @@ using content::WebContents;
namespace {
-// Convenience method to create Android rects.
-// RectType should be either gfx::Rect or gfx::RectF.
-template <typename RectType>
-ScopedJavaLocalRef<jobject> CreateAndroidRect(
- JNIEnv* env,
- const ScopedJavaLocalRef<jclass>& clazz,
- const jmethodID& constructor,
- const RectType& rect) {
-
- ScopedJavaLocalRef<jobject> rect_object(
- env,
- env->NewObject(clazz.obj(),
- constructor,
- rect.x(),
- rect.y(),
- rect.right(),
- rect.bottom()));
-
- DCHECK(!rect_object.is_null());
- return rect_object;
-}
-
NavigationEntry* GetActiveEntry(WebContents* web_contents) {
return web_contents->GetController().GetActiveEntry();
}
@@ -82,6 +57,29 @@ bool IsActiveNavigationGoogleSearch(WebContents* web_contents) {
return StartsWithASCII(entry->GetURL().spec(), search_url.spec(), false);
}
+ScopedJavaLocalRef<jobject> CreateJavaRectF(
+ JNIEnv* env,
+ const gfx::RectF& rect) {
+ return ScopedJavaLocalRef<jobject>(
+ Java_ChromeWebContentsDelegateAndroid_createRectF(env,
+ rect.x(),
+ rect.y(),
+ rect.right(),
+ rect.bottom()));
+}
+
+ScopedJavaLocalRef<jobject> CreateJavaRect(
+ JNIEnv* env,
+ const gfx::Rect& rect) {
+ return ScopedJavaLocalRef<jobject>(
+ Java_ChromeWebContentsDelegateAndroid_createRect(
+ env,
+ static_cast<int>(rect.x()),
+ static_cast<int>(rect.y()),
+ static_cast<int>(rect.right()),
+ static_cast<int>(rect.bottom())));
+}
+
} // anonymous namespace
namespace chrome {
@@ -163,37 +161,22 @@ void ChromeWebContentsDelegateAndroid::FindReply(
void ChromeWebContentsDelegateAndroid::OnFindResultAvailable(
WebContents* web_contents,
const FindNotificationDetails* find_result) {
- JNIEnv* env = AttachCurrentThread();
+ JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return;
- // Create the selection rect.
- ScopedJavaLocalRef<jclass> rect_clazz =
- GetClass(env, "android/graphics/Rect");
-
- jmethodID rect_constructor = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, rect_clazz.obj(), "<init>", "(IIII)V");
-
- ScopedJavaLocalRef<jobject> selection_rect = CreateAndroidRect(
- env, rect_clazz, rect_constructor, find_result->selection_rect());
+ ScopedJavaLocalRef<jobject> selection_rect = CreateJavaRect(
+ env, find_result->selection_rect());
// Create the details object.
- ScopedJavaLocalRef<jclass> details_clazz =
- GetClass(env, "org/chromium/chrome/browser/FindNotificationDetails");
-
- jmethodID details_constructor = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, details_clazz.obj(), "<init>", "(ILandroid/graphics/Rect;IZ)V");
-
- ScopedJavaLocalRef<jobject> details_object(
- env,
- env->NewObject(details_clazz.obj(),
- details_constructor,
- find_result->number_of_matches(),
- selection_rect.obj(),
- find_result->active_match_ordinal(),
- find_result->final_update()));
- DCHECK(!details_object.is_null());
+ ScopedJavaLocalRef<jobject> details_object =
+ Java_ChromeWebContentsDelegateAndroid_createFindNotificationDetails(
+ env,
+ find_result->number_of_matches(),
+ selection_rect.obj(),
+ find_result->active_match_ordinal(),
+ find_result->final_update());
Java_ChromeWebContentsDelegateAndroid_onFindResultAvailable(
env,
@@ -212,50 +195,28 @@ void ChromeWebContentsDelegateAndroid::FindMatchRectsReply(
content::Source<WebContents>(web_contents),
content::Details<FindMatchRectsDetails>(&match_rects));
- JNIEnv* env = AttachCurrentThread();
+ JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return;
- // Create the rects.
- ScopedJavaLocalRef<jclass> rect_clazz =
- GetClass(env, "android/graphics/RectF");
-
- jmethodID rect_constructor = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, rect_clazz.obj(), "<init>", "(FFFF)V");
-
- ScopedJavaLocalRef<jobjectArray> jrects(env, env->NewObjectArray(
- match_rects.rects().size(), rect_clazz.obj(), NULL));
-
+ // Create the details object.
+ ScopedJavaLocalRef<jobject> details_object =
+ Java_ChromeWebContentsDelegateAndroid_createFindMatchRectsDetails(
+ env,
+ match_rects.version(),
+ match_rects.rects().size(),
+ CreateJavaRectF(env, match_rects.active_rect()).obj());
+
+ // Add the rects
for (size_t i = 0; i < match_rects.rects().size(); ++i) {
- env->SetObjectArrayElement(
- jrects.obj(), i,
- CreateAndroidRect(env,
- rect_clazz,
- rect_constructor,
- match_rects.rects()[i]).obj());
+ Java_ChromeWebContentsDelegateAndroid_setMatchRectByIndex(
+ env,
+ details_object.obj(),
+ i,
+ CreateJavaRectF(env, match_rects.rects()[i]).obj());
}
- ScopedJavaLocalRef<jobject> jactive_rect = CreateAndroidRect(
- env, rect_clazz, rect_constructor, match_rects.active_rect());
-
- // Create the details object.
- ScopedJavaLocalRef<jclass> details_clazz =
- GetClass(env, "org/chromium/chrome/browser/FindMatchRectsDetails");
-
- jmethodID details_constructor = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, details_clazz.obj(), "<init>",
- "(I[Landroid/graphics/RectF;Landroid/graphics/RectF;)V");
-
- ScopedJavaLocalRef<jobject> details_object(
- env,
- env->NewObject(details_clazz.obj(),
- details_constructor,
- match_rects.version(),
- jrects.obj(),
- jactive_rect.obj()));
- DCHECK(!details_object.is_null());
-
Java_ChromeWebContentsDelegateAndroid_onFindMatchRectsAvailable(
env,
obj.obj(),