summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-15 16:03:24 +0000
committerjdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-15 16:03:24 +0000
commit07dd227b3795124f7c4d085535713765580d2504 (patch)
tree8a5563e532ef8ad180f3a59da20e046b4d087f5d
parentaedc715faccbe4151dc23d8ad5b657d26dbcd113 (diff)
downloadchromium_src-07dd227b3795124f7c4d085535713765580d2504.zip
chromium_src-07dd227b3795124f7c4d085535713765580d2504.tar.gz
chromium_src-07dd227b3795124f7c4d085535713765580d2504.tar.bz2
Merge 284018 "[Android] Add meta-data to point to implementation..."
> [Android] Add meta-data to point to implementations of SmartClipProvider > > Also enhance SmartClipProviderTest to emulate what OEM will do. > > BUG=388961 > TEST=passed SmartClipProviderTest > > Review URL: https://codereview.chromium.org/391813006 TBR=changwan@chromium.org Review URL: https://codereview.chromium.org/477923002 git-svn-id: svn://svn.chromium.org/chrome/branches/2062/src@289890 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java (renamed from chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java)73
-rw-r--r--chrome/android/shell/java/AndroidManifest.xml3
-rw-r--r--content/shell/android/shell_apk/AndroidManifest.xml2
3 files changed, 71 insertions, 7 deletions
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java
index abfb652..c9a3bde 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
diff --git a/chrome/android/shell/java/AndroidManifest.xml b/chrome/android/shell/java/AndroidManifest.xml
index 476deb9..3499dd3 100644
--- a/chrome/android/shell/java/AndroidManifest.xml
+++ b/chrome/android/shell/java/AndroidManifest.xml
@@ -198,5 +198,8 @@
<action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
</intent-filter>
</receiver>
+ <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER"
+ android:value="org.chromium.content.browser.SmartClipProvider" />
+
</application>
</manifest>
diff --git a/content/shell/android/shell_apk/AndroidManifest.xml b/content/shell/android/shell_apk/AndroidManifest.xml
index 3cd5a12..83f50e8 100644
--- a/content/shell/android/shell_apk/AndroidManifest.xml
+++ b/content/shell/android/shell_apk/AndroidManifest.xml
@@ -95,6 +95,8 @@
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
+ <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER"
+ android:value="org.chromium.content.browser.SmartClipProvider" />
</application>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />