diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 818056c..c766c74 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -3088,17 +3088,18 @@
          * @param databaseIdentifier the identifier of the database on
          *     which the transaction that caused the quota overflow was run
          * @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 The callback to run when a decision to allow or
          *     deny quota has been made. Don't forget to call this!
          */
         @Override
         public void onExceededDatabaseQuota(String url,
-            String databaseIdentifier, long currentQuota, long totalUsedQuota,
-            WebStorage.QuotaUpdater quotaUpdater) {
+            String databaseIdentifier, long currentQuota, long estimatedSize,
+            long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
             mSettings.getWebStorageSizeManager().onExceededDatabaseQuota(
-                    url, databaseIdentifier, currentQuota, totalUsedQuota,
-                    quotaUpdater);
+                    url, databaseIdentifier, currentQuota, estimatedSize,
+                    totalUsedQuota, quotaUpdater);
         }
 
         /**
diff --git a/src/com/android/browser/WebStorageSizeManager.java b/src/com/android/browser/WebStorageSizeManager.java
index 40d30a2..d5347cb 100644
--- a/src/com/android/browser/WebStorageSizeManager.java
+++ b/src/com/android/browser/WebStorageSizeManager.java
@@ -72,18 +72,11 @@
  * sum of all other origins' quota) and deciding if a quota increase for the
  * out-of-space origin is allowed or not.
  *
- * The default quota for an origin is min(ORIGIN_DEFAULT_QUOTA, unused_quota).
+ * The default quota for an origin is its estimated size. If we cannot satisfy
+ * the estimated size, then WebCore will not create the database.
  * Quota increases are done in steps, where the increase step is
  * min(QUOTA_INCREASE_STEP, unused_quota).
  *
- * This approach has the drawback that space may remain unused if there
- * are many websites that store a lot less content than ORIGIN_DEFAULT_QUOTA.
- * We deal with this by picking a value for ORIGIN_DEFAULT_QUOTA that is smaller
- * than what the HTML 5 spec recommends. At the same time, picking a very small
- * value for ORIGIN_DEFAULT_QUOTA may create performance problems since it's
- * more likely for origins to have to rollback and restart transactions as a
- * result of reaching the quota more often.
- *
  * When all the Web storage space is used, the WebStorageSizeManager creates
  * a system notification that will guide the user to the WebSettings UI. There,
  * the user can free some of the Web storage space by deleting all the data used
@@ -215,8 +208,8 @@
      *     deny quota has been made. Don't forget to call this!
      */
     public void onExceededDatabaseQuota(String url,
-        String databaseIdentifier, long currentQuota, long totalUsedQuota,
-        WebStorage.QuotaUpdater quotaUpdater) {
+        String databaseIdentifier, long currentQuota, long estimatedSize,
+        long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
         if(LOGV_ENABLED) {
             Log.v(LOGTAG,
                   "Received onExceededDatabaseQuota for "
@@ -252,9 +245,22 @@
         // We have enough space inside mGlobalLimit.
         long newOriginQuota = currentQuota;
         if (newOriginQuota == 0) {
-            // This is a new origin. It wants an initial quota.
-            newOriginQuota =
-                Math.min(ORIGIN_DEFAULT_QUOTA, totalUnusedQuota);
+            // This is a new origin, give it the size it asked for if possible.
+            // If we cannot satisfy the estimatedSize, we should return 0 as
+            // returning a value less that what the site requested will lead
+            // to webcore not creating the database.
+            if (totalUnusedQuota >= estimatedSize) {
+                newOriginQuota = estimatedSize;
+            } else {
+                if (LOGV_ENABLED) {
+                    Log.v(LOGTAG,
+                          "onExceededDatabaseQuota: Unable to satisfy" +
+                          " estimatedSize for the new database " +
+                          " (estimatedSize: " + estimatedSize +
+                          ", unused quota: " + totalUnusedQuota);
+                }
+                newOriginQuota = 0;
+            }
         } else {
             // This is an origin we have seen before. It wants a quota
             // increase.
@@ -379,4 +385,5 @@
             mgr.notify(OUT_OF_SPACE_ID, notification);
         }
     }
-}
\ No newline at end of file
+}
+
