Merge branch 'froyo' into froyo-release
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index b377a71..2c25534 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -117,6 +117,11 @@
         mVoiceSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
         mVoiceSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                 RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
+        // This extra tells voice search not to send the application id in its
+        // results intent - http://b/2546173
+        //
+        // TODO: Make a constant for this extra.
+        mVoiceSearchIntent.putExtra("android.speech.extras.SEND_APPLICATION_ID_EXTRA", false);
         PackageManager pm = context.getPackageManager();
         ResolveInfo ri = pm.resolveActivity(mVoiceSearchIntent,
                 PackageManager.MATCH_DEFAULT_ONLY);
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 51715a9..cb1ffc7 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -34,4 +34,9 @@
                      android:targetPackage="com.android.browser"
                      android:label="Tests for Browser."/>
 
+    <instrumentation android:name="com.android.browser.BrowserLaunchPerformance"
+        android:targetPackage="com.android.browser"
+        android:label="Browser Launch Performance">
+    </instrumentation>
+
 </manifest>
diff --git a/tests/assets/bindings_test.html b/tests/assets/bindings_test.html
index 93dbff1..c20ccec 100755
--- a/tests/assets/bindings_test.html
+++ b/tests/assets/bindings_test.html
@@ -163,6 +163,10 @@
   return true;
 }
 
+function testParameterTypeMismatch() {
+  return JNIBindingsTest.testParameterTypeMismatch("dog");
+}
+
 function appendLog(msg) {
   var log = document.getElementById("status");
   log.innerHTML += "<br/>" + msg;
@@ -221,6 +225,12 @@
     appendLog("getIfaceProperties failed!");
   }
 
+  if (testParameterTypeMismatch()) {
+    appendLog("testParameterTypeMismatch passed!");
+  } else {
+    appendLog("testParameterTypeMismatch failed!");
+  }
+
   JNIBindingsTest.testComplete();
 }
 </script>
diff --git a/tests/src/com/android/browser/BrowserLaunchPerformance.java b/tests/src/com/android/browser/BrowserLaunchPerformance.java
new file mode 100644
index 0000000..c5d4279
--- /dev/null
+++ b/tests/src/com/android/browser/BrowserLaunchPerformance.java
@@ -0,0 +1,26 @@
+package com.android.browser;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.test.LaunchPerformanceBase;
+
+public class BrowserLaunchPerformance extends LaunchPerformanceBase {
+
+    @Override
+    public void onCreate(Bundle arguments) {
+        super.onCreate(arguments);
+
+        mIntent.setClassName(getTargetContext(), "com.android.browser.BrowserActivity");
+        start();
+    }
+
+    /**
+     * Calls LaunchApp and finish.
+     */
+    @Override
+    public void onStart() {
+        super.onStart();
+        LaunchApp();
+        finish(Activity.RESULT_OK, mResults);
+    }
+}
diff --git a/tests/src/com/android/browser/JNIBindingsTest.java b/tests/src/com/android/browser/JNIBindingsTest.java
index d2220f6..bfa3ac1 100644
--- a/tests/src/com/android/browser/JNIBindingsTest.java
+++ b/tests/src/com/android/browser/JNIBindingsTest.java
@@ -139,6 +139,7 @@
     public boolean testObjectArray(String[] stringArray, Object[] emptyArray,
             Object[] objectArray) {
         String[] expectedStringArray = {"Hello", "World", "!"};
+        String expectedStringArrayClassName = "[Ljava.lang.String;";
         Object[] expectedObjectArray = {};
 
         try {
@@ -150,10 +151,13 @@
             assertNull(objectArray);
 
             assertEquals(Arrays.toString(expectedStringArray), Arrays.toString(stringArray));
+            assertEquals(expectedStringArrayClassName, stringArray.getClass().getName());
 
             // EMULATE_JSC_BINDINGS
             // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(emptyArray));
+            // assertEquals(expectedObjectArrayClassName, emptyArray.getClass().getName());
             // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(objectArray));
+            // assertEquals(expectedStringObjectClassName, objectArray.getClass().getName());
 
         } catch (AssertionFailedError e) {
             printAssertionFailed(e);
@@ -177,6 +181,7 @@
         String expectedStringParam = "Hello World";
         int[] expectedIntArray = {1,2,3};
         String[] expectedStringArrayParam = {"foo", "bar", "baz"};
+        String expectedStringArrayClassName = "[Ljava.lang.String;";
 
         try {
             assertEquals(expectedBoolParam, boolParam);
@@ -194,6 +199,7 @@
             assertEquals(Arrays.toString(expectedIntArray), Arrays.toString(intArrayParam));
             assertEquals(Arrays.toString(expectedStringArrayParam),
                     Arrays.toString(stringArrayParam));
+            assertEquals(expectedStringArrayClassName, stringArrayParam.getClass().getName());
             assertNull(objectParam);
         } catch (AssertionFailedError e) {
             printAssertionFailed(e);
@@ -238,6 +244,18 @@
         return true;
     }
 
+    public boolean testParameterTypeMismatch(String[] stringArrayParam) {
+        // The JS test will pass a string, not an array to this test.
+        try {
+            assertNull(stringArrayParam);
+        } catch (AssertionFailedError e) {
+            printAssertionFailed(e);
+            return false;
+        }
+
+        return true;
+    }
+
     public boolean returnBool() { return true; }
     public byte returnByte() { return 1; }
     public char returnChar() { return 'b'; }
diff --git a/tests/src/com/android/browser/JNIBindingsTestApp.java b/tests/src/com/android/browser/JNIBindingsTestApp.java
index cb38cbc..e01aca2 100644
--- a/tests/src/com/android/browser/JNIBindingsTestApp.java
+++ b/tests/src/com/android/browser/JNIBindingsTestApp.java
@@ -53,7 +53,8 @@
             "testObjectMembers passed!\n" +
             "testJSPrimitivesToStringsInJava passed!\n" +
             "testJavaReturnTypes passed!\n" +
-            "getIfaceProperties passed!\n";
+            "getIfaceProperties passed!\n" +
+            "testParameterTypeMismatch passed!\n";
 
 
     private class GetWebKitDataThread extends Thread {