Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2362)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java

Issue 391813006: [Android] Add meta-data to point to implementations of SmartClipProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed "_VIEW" Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java
similarity index 52%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java
rename to chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java
index abfb6524e92efb28c7a469c4ceec5464c597f6d4..c9a3bde05f7034771bf50067c9aa8bb4990da7b2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java
@@ -4,26 +4,36 @@
package org.chromium.chrome.browser;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.test.suitebuilder.annotation.MediumTest;
+import android.view.View;
+import android.view.ViewGroup;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.shell.ChromeShellActivity;
import org.chromium.chrome.shell.ChromeShellTestBase;
-import org.chromium.content.browser.ContentView;
+import org.chromium.chrome.shell.R;
import org.chromium.content.browser.test.util.CallbackHelper;
+import java.lang.reflect.Method;
import java.util.concurrent.TimeoutException;
/**
- * Tests for the ContentView.
+ * Tests for the SmartClipProvider.
*/
-public class ContentViewTest extends ChromeShellTestBase implements Handler.Callback {
+public class SmartClipProviderTest extends ChromeShellTestBase implements Handler.Callback {
+ // This is a key for meta-data in the package manifest. It should NOT
+ // change, as OEMs will use it when they look for the SmartClipProvider
+ // interface.
+ private static final String SMART_CLIP_PROVIDER_KEY =
+ "org.chromium.content.browser.SMART_CLIP_PROVIDER";
private static class MyCallbackHelper extends CallbackHelper {
public String getTitle() {
@@ -66,6 +76,9 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call
private MyCallbackHelper mCallbackHelper;
private HandlerThread mHandlerThread;
private Handler mHandler;
+ private Class<?> mSmartClipProviderClass;
+ private Method mSetSmartClipResultHandlerMethod;
+ private Method mExtractSmartClipDataMethod;
@Override
public void setUp() throws Exception {
@@ -75,6 +88,14 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call
mHandlerThread = new HandlerThread("ContentViewTest thread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper(), this);
+
+ mSmartClipProviderClass = getSmartClipProviderClass();
+ assertNotNull(mSmartClipProviderClass);
+ mSetSmartClipResultHandlerMethod = mSmartClipProviderClass.getDeclaredMethod(
+ "setSmartClipResultHandler", new Class[] { Handler.class });
+ mExtractSmartClipDataMethod = mSmartClipProviderClass.getDeclaredMethod(
+ "extractSmartClipData",
+ new Class[] { Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE });
}
@Override
@@ -101,16 +122,54 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call
return true;
}
+ // Create SmartClipProvider interface from package meta-data.
+ private Class<?> getSmartClipProviderClass() throws Exception {
+ ApplicationInfo ai = mActivity.getPackageManager().getApplicationInfo(
+ mActivity.getPackageName(), PackageManager.GET_META_DATA);
+ Bundle bundle = ai.metaData;
+ String className = bundle.getString(SMART_CLIP_PROVIDER_KEY);
+ assertNotNull(className);
+ return Class.forName(className);
+ }
+
+ // Returns the first smart clip provider under the root view using DFS.
+ private Object findSmartClipProvider(View v) {
+ if (mSmartClipProviderClass.isInstance(v)) {
+ return v;
+ } else if (v instanceof ViewGroup) {
+ ViewGroup viewGroup = (ViewGroup) v;
+ int count = viewGroup.getChildCount();
+ for (int i = 0; i < count; ++i) {
+ View c = viewGroup.getChildAt(i);
+ Object found = findSmartClipProvider(c);
+ if (found != null)
+ return found;
+ }
+ }
+ return null;
+ }
+
@MediumTest
@Feature({"SmartClip"})
public void testSmartClipDataCallback() throws InterruptedException, TimeoutException {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- ContentView cv = (ContentView) getActivity().getActiveTab().getView();
- assertNotNull(cv);
- cv.setSmartClipResultHandler(mHandler);
- cv.extractSmartClipData(10, 20, 100, 70);
+ // This emulates what OEM will be doing when they want to call
+ // functions on SmartClipProvider through view hierarchy.
+
+ // Implementation of SmartClipProvider such as ContentView or
+ // JellyBeanContentView can be found somewhere under content_container.
+ Object scp = findSmartClipProvider(
+ getActivity().findViewById(R.id.content_container));
+ assertNotNull(scp);
+ try {
+ mSetSmartClipResultHandlerMethod.invoke(scp, mHandler);
+ mExtractSmartClipDataMethod.invoke(scp, 10, 20, 100, 70);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
}
});
mCallbackHelper.waitForCallback(0, 1); // call count: 0 --> 1

Powered by Google App Engine
This is Rietveld 408576698