Merge "suppress copyPixel error"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 89b700b..7c93e9f 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1000,7 +1000,7 @@
         if (username != null && password != null) {
             handler.proceed(username, password);
         } else {
-            if (tab.inForeground()) {
+            if (tab.inForeground() && !handler.suppressDialog()) {
                 mPageDialogsHandler.showHttpAuthentication(tab, handler, host, realm);
             } else {
                 handler.cancel();
diff --git a/src/com/android/browser/provider/BrowserProvider.java b/src/com/android/browser/provider/BrowserProvider.java
index fabf57e..b55b84a 100644
--- a/src/com/android/browser/provider/BrowserProvider.java
+++ b/src/com/android/browser/provider/BrowserProvider.java
@@ -251,7 +251,7 @@
 
         public DatabaseHelper(Context context) {
             super(context, sDatabaseName, null, DATABASE_VERSION);
-            mContext = context.getApplicationContext();
+            mContext = context;
         }
 
         @Override
diff --git a/tests/src/com/android/browser/tests/BP2ProviderTests.java b/tests/src/com/android/browser/tests/BP2ProviderTests.java
index 6c3c71e..fa1b9ef 100644
--- a/tests/src/com/android/browser/tests/BP2ProviderTests.java
+++ b/tests/src/com/android/browser/tests/BP2ProviderTests.java
@@ -33,6 +33,15 @@
 @SmallTest
 public class BP2ProviderTests extends BP2TestCaseHelper {
 
+    static final String[] PROJECTION = new String[] {
+            BrowserContract.Bookmarks.PARENT,
+            BrowserContract.Bookmarks.ACCOUNT_NAME,
+            BrowserContract.Bookmarks.ACCOUNT_TYPE,
+    };
+    static final int INDEX_PARENT = 0;
+    static final int INDEX_ACCOUNT_NAME = 1;
+    static final int INDEX_ACCOUNT_TYPE = 2;
+
     public void testUpdateImage() {
         String url = "http://stub1.com";
         insertBookmark(url, "stub 1");
@@ -56,6 +65,7 @@
     }
 
     private void doTestIsValidParent(String accountName, String accountType) {
+        // Create the folder
         ContentValues values = new ContentValues();
         values.put(BrowserContract.Bookmarks.TITLE, "New Folder");
         values.put(BrowserContract.Bookmarks.IS_FOLDER, 1);
@@ -65,6 +75,7 @@
         assertNotNull(folderUri);
         long folderId = ContentUris.parseId(folderUri);
         assertTrue("Failed to parse folder id!", folderId > 0);
+        // Insert a bookmark with the same ACCOUNT_* info as parent
         values.put(BrowserContract.Bookmarks.TITLE, "google");
         values.put(BrowserContract.Bookmarks.URL, "http://google.com");
         values.put(BrowserContract.Bookmarks.IS_FOLDER, 0);
@@ -72,31 +83,54 @@
         Uri insertedUri = insertBookmark(values);
         assertNotNull(insertedUri);
         Cursor c = getMockContentResolver().query(insertedUri,
-                new String[] { BrowserContract.Bookmarks.PARENT },
-                null, null, null);
+                PROJECTION, null, null, null);
         try {
             assertNotNull(c);
             assertTrue(c.moveToFirst());
-            long insertedParentId = c.getLong(0);
+            long insertedParentId = c.getLong(INDEX_PARENT);
+            String insertedAccountName = c.getString(INDEX_ACCOUNT_NAME);
+            String insertedAccountType = c.getString(INDEX_ACCOUNT_TYPE);
             assertEquals(folderId, insertedParentId);
-            if (accountName == null) {
-                values.put(BrowserContract.Bookmarks.ACCOUNT_NAME, "test2@gmail.com");
-                values.put(BrowserContract.Bookmarks.ACCOUNT_TYPE, "com.google");
-            } else {
-                values.remove(BrowserContract.Bookmarks.ACCOUNT_NAME);
-                values.remove(BrowserContract.Bookmarks.ACCOUNT_TYPE);
-            }
+            assertEquals(accountName, insertedAccountName);
+            assertEquals(accountType, insertedAccountType);
+
+            // Insert a bookmark with no ACCOUNT_* set, BUT with a valid parent
+            // The inserted should end up with the ACCOUNT_* of the parent
+            values.remove(BrowserContract.Bookmarks.ACCOUNT_NAME);
+            values.remove(BrowserContract.Bookmarks.ACCOUNT_TYPE);
             insertedUri = insertBookmark(values);
             assertNotNull(insertedUri);
             c.close();
             c = getMockContentResolver().query(insertedUri,
-                    new String[] { BrowserContract.Bookmarks.PARENT },
-                    null, null, null);
+                    PROJECTION, null, null, null);
             assertNotNull(c);
             assertTrue(c.moveToFirst());
-            insertedParentId = c.getLong(0);
-            assertFalse("child has different accounts than parent!",
-                    folderId == insertedParentId);
+            insertedParentId = c.getLong(INDEX_PARENT);
+            insertedAccountName = c.getString(INDEX_ACCOUNT_NAME);
+            insertedAccountType = c.getString(INDEX_ACCOUNT_TYPE);
+            assertEquals(folderId, insertedParentId);
+            assertEquals(accountName, insertedAccountName);
+            assertEquals(accountType, insertedAccountType);
+
+            // Insert a bookmark with a different ACCOUNT_* than it's parent
+            // ACCOUNT_* should override parent
+            accountName = accountName + "@something.else";
+            accountType = "com.google";
+            values.put(BrowserContract.Bookmarks.ACCOUNT_NAME, accountName);
+            values.put(BrowserContract.Bookmarks.ACCOUNT_TYPE, accountType);
+            insertedUri = insertBookmark(values);
+            assertNotNull(insertedUri);
+            c.close();
+            c = getMockContentResolver().query(insertedUri,
+                    PROJECTION, null, null, null);
+            assertNotNull(c);
+            assertTrue(c.moveToFirst());
+            insertedParentId = c.getLong(INDEX_PARENT);
+            insertedAccountName = c.getString(INDEX_ACCOUNT_NAME);
+            insertedAccountType = c.getString(INDEX_ACCOUNT_TYPE);
+            assertNotSame(folderId, insertedParentId);
+            assertEquals(accountName, insertedAccountName);
+            assertEquals(accountType, insertedAccountType);
         } finally {
             c.close();
         }
diff --git a/tests/src/com/android/browser/tests/utils/BP2TestCaseHelper.java b/tests/src/com/android/browser/tests/utils/BP2TestCaseHelper.java
index 18c1c10..e341c6a 100644
--- a/tests/src/com/android/browser/tests/utils/BP2TestCaseHelper.java
+++ b/tests/src/com/android/browser/tests/utils/BP2TestCaseHelper.java
@@ -18,6 +18,9 @@
 
 import com.android.browser.provider.BrowserProvider2;
 
+import java.io.File;
+import java.io.FilenameFilter;
+
 import android.content.ContentValues;
 import android.database.ContentObserver;
 import android.net.Uri;
@@ -208,4 +211,22 @@
         perfIdeallyUntriggered(mBookmarksObserver, mWidgetObserver);
         return updated;
     }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        // Delete the test databases so that subsequent runs have a clean slate
+        File f = getMockContext().getDatabasePath("test");
+        File dir = f.getParentFile();
+        File testFiles[] = dir.listFiles(new FilenameFilter() {
+
+            @Override
+            public boolean accept(File dir, String filename) {
+                return filename.startsWith(ProviderTestCase3.FILENAME_PREFIX);
+            }
+        });
+        for (File testFile : testFiles) {
+            testFile.delete();
+        }
+    }
 }
diff --git a/tests/src/com/android/browser/tests/utils/ProviderTestCase3.java b/tests/src/com/android/browser/tests/utils/ProviderTestCase3.java
index 536163a..75bc052 100644
--- a/tests/src/com/android/browser/tests/utils/ProviderTestCase3.java
+++ b/tests/src/com/android/browser/tests/utils/ProviderTestCase3.java
@@ -35,6 +35,8 @@
  */
 public abstract class ProviderTestCase3<T extends ContentProvider> extends AndroidTestCase {
 
+    public static final String FILENAME_PREFIX = "test.";
+
     Class<T> mProviderClass;
     String[] mProviderAuthority;
 
@@ -112,13 +114,12 @@
         super.setUp();
 
         mResolver = new MockContentResolver2();
-        final String filenamePrefix = "test.";
         RenamingDelegatingContext targetContextWrapper = new
                 RenamingDelegatingContext(
                 new MockContext2(), // The context that most methods are
                                     //delegated to
                 getContext(), // The context that file methods are delegated to
-                filenamePrefix);
+                FILENAME_PREFIX);
         // The default IsolatedContext has a mock AccountManager that doesn't
         // work for us, so override getSystemService to always return null
         mProviderContext = new IsolatedContext(mResolver, targetContextWrapper) {