Pass the estimated size of new HTML 5 databases to the ChromeClient so it can use that amount to figure an initial default quota.

Change-Id:Ic9372b0c86472b42ba5d0b964aaff1e2bbfe3efa
diff --git a/api/current.xml b/api/current.xml
index bb209c6..ea70922 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -162447,6 +162447,8 @@
 </parameter>
 <parameter name="currentQuota" type="long">
 </parameter>
+<parameter name="estimatedSize" type="long">
+</parameter>
 <parameter name="totalUsedQuota" type="long">
 </parameter>
 <parameter name="quotaUpdater" type="android.webkit.WebStorage.QuotaUpdater">
@@ -164109,6 +164111,8 @@
 </parameter>
 <parameter name="currentQuota" type="long">
 </parameter>
+<parameter name="estimatedSize" type="long">
+</parameter>
 <parameter name="totalUsedQuota" type="long">
 </parameter>
 <parameter name="quotaUpdater" type="android.webkit.WebStorage.QuotaUpdater">
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 6abf4c1..41e604d 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -434,12 +434,14 @@
                             ((Long) map.get("currentQuota")).longValue();
                     long totalUsedQuota =
                             ((Long) map.get("totalUsedQuota")).longValue();
+                    long estimatedSize =
+                            ((Long) map.get("estimatedSize")).longValue();
                     WebStorage.QuotaUpdater quotaUpdater =
                         (WebStorage.QuotaUpdater) map.get("quotaUpdater");
 
                     mWebChromeClient.onExceededDatabaseQuota(url,
-                            databaseIdentifier, currentQuota, totalUsedQuota,
-                            quotaUpdater);
+                            databaseIdentifier, currentQuota, estimatedSize,
+                            totalUsedQuota, quotaUpdater);
                 }
                 break;
 
@@ -1195,6 +1197,7 @@
      * @param databaseIdentifier The identifier of the database that the
      *     transaction that caused the overflow was running on.
      * @param currentQuota The current quota the origin is allowed.
+     * @param estimatedSize The estimated size of the database.
      * @param totalUsedQuota is the sum of all origins' quota.
      * @param quotaUpdater An instance of a class encapsulating a callback
      *     to WebViewCore to run when the decision to allow or deny more
@@ -1202,7 +1205,8 @@
      */
     public void onExceededDatabaseQuota(
             String url, String databaseIdentifier, long currentQuota,
-            long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
+            long estimatedSize, long totalUsedQuota,
+            WebStorage.QuotaUpdater quotaUpdater) {
         if (mWebChromeClient == null) {
             quotaUpdater.updateQuota(currentQuota);
             return;
@@ -1213,6 +1217,7 @@
         map.put("databaseIdentifier", databaseIdentifier);
         map.put("url", url);
         map.put("currentQuota", currentQuota);
+        map.put("estimatedSize", estimatedSize);
         map.put("totalUsedQuota", totalUsedQuota);
         map.put("quotaUpdater", quotaUpdater);
         exceededQuota.obj = map;
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index e2d5d24..ad4ba05 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -215,13 +215,14 @@
     * @param databaseIdentifier The identifier of the database that caused the
     *     quota overflow.
     * @param currentQuota The current quota for the origin.
+    * @param estimatedSize The estimated size of the database.
     * @param totalUsedQuota is the sum of all origins' quota.
     * @param quotaUpdater A callback to inform the WebCore thread that a new
     *     quota is available. This callback must always be executed at some
     *     point to ensure that the sleeping WebCore thread is woken up.
     */
     public void onExceededDatabaseQuota(String url, String databaseIdentifier,
-        long currentQuota, long totalUsedQuota,
+        long currentQuota, long estimatedSize, long totalUsedQuota,
         WebStorage.QuotaUpdater quotaUpdater) {
         // This default implementation passes the current quota back to WebCore.
         // WebCore will interpret this that new quota was declined.
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index d6a9cff..25cb249 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -258,20 +258,23 @@
      * @param url The URL that caused the overflow.
      * @param databaseIdentifier The identifier of the database.
      * @param currentQuota The current quota for the origin.
+     * @param estimatedSize The estimated size of the database.
      */
     protected void exceededDatabaseQuota(String url,
                                          String databaseIdentifier,
-                                         long currentQuota) {
+                                         long currentQuota,
+                                         long estimatedSize) {
         // Inform the callback proxy of the quota overflow. Send an object
         // that encapsulates a call to the nativeSetDatabaseQuota method to
         // awaken the sleeping webcore thread when a decision from the
         // client to allow or deny quota is available.
         mCallbackProxy.onExceededDatabaseQuota(url, databaseIdentifier,
-                currentQuota, getUsedQuota(), new WebStorage.QuotaUpdater() {
-                                  public void updateQuota(long quota) {
-                                      nativeSetNewStorageLimit(quota);
-                                  }
-                              });
+                currentQuota, estimatedSize, getUsedQuota(),
+                new WebStorage.QuotaUpdater() {
+                        public void updateQuota(long quota) {
+                            nativeSetNewStorageLimit(quota);
+                        }
+                });
     }
 
     /**
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index 96b34b3..e342efb 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -552,7 +552,8 @@
 
         @Override
         public void onExceededDatabaseQuota(String url_str,
-                String databaseIdentifier, long currentQuota, long totalUsedQuota,
+                String databaseIdentifier, long currentQuota,
+                long estimatedSize, long totalUsedQuota,
                 WebStorage.QuotaUpdater callback) {
             if (mDumpDatabaseCallbacks) {
                 if (mDatabaseCallbackStrings == null) {