| Index: storage/browser/quota/quota_manager.cc
 | 
| diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc
 | 
| index 13b84c74106b217e77f4d68b99c9842808339a9e..ac6e4dbc5d4d394924730c6c5f2d7c2fafb4267a 100644
 | 
| --- a/storage/browser/quota/quota_manager.cc
 | 
| +++ b/storage/browser/quota/quota_manager.cc
 | 
| @@ -150,6 +150,13 @@ bool GetLRUOriginOnDBThread(StorageType type,
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| +bool GetDurableOnDBThread(const GURL& origin,
 | 
| +                          bool* durable,
 | 
| +                          QuotaDatabase* database) {
 | 
| +  DCHECK(database);
 | 
| +  return database->GetDurabilityForOrigin(origin, durable);
 | 
| +}
 | 
| +
 | 
|  bool DeleteOriginInfoOnDBThread(const GURL& origin,
 | 
|                                  StorageType type,
 | 
|                                  QuotaDatabase* database) {
 | 
| @@ -716,6 +723,7 @@ class QuotaManager::GetModifiedSinceHelper {
 | 
|      return database->GetOriginsModifiedSince(type, &origins_, modified_since);
 | 
|    }
 | 
|  
 | 
| +
 | 
|    void DidGetModifiedSince(const base::WeakPtr<QuotaManager>& manager,
 | 
|                             const GetOriginsCallback& callback,
 | 
|                             StorageType type,
 | 
| @@ -832,6 +840,7 @@ void QuotaManager::GetUsageAndQuotaForWebApps(
 | 
|            "477117 QuotaManager::GetUsageAndQuotaForWebApps"));
 | 
|    if (type != kStorageTypeTemporary &&
 | 
|        type != kStorageTypePersistent &&
 | 
| +      type != kStorageTypeDurable &&
 | 
|        type != kStorageTypeSyncable) {
 | 
|      callback.Run(kQuotaErrorNotSupported, 0, 0);
 | 
|      return;
 | 
| @@ -1049,6 +1058,7 @@ void QuotaManager::SetPersistentHostQuota(const std::string& host,
 | 
|                                            const QuotaCallback& callback) {
 | 
|    LazyInitialize();
 | 
|    if (host.empty()) {
 | 
| +    LOG(ERROR) << "Calling with kQuotaErrorNotSupported";
 | 
|      // This could happen if we are called on file:///.
 | 
|      callback.Run(kQuotaErrorNotSupported, 0);
 | 
|      return;
 | 
| @@ -1143,6 +1153,25 @@ bool QuotaManager::IsStorageUnlimited(const GURL& origin,
 | 
|           special_storage_policy_->IsStorageUnlimited(origin);
 | 
|  }
 | 
|  
 | 
| +void QuotaManager::GetDurability(const GURL& origin,
 | 
| +                                 const GetDurabilityCallback& callback) {
 | 
| +  LazyInitialize();
 | 
| +  LOG(ERROR) << "Got into QuotaManager::GetDurability";
 | 
| +
 | 
| +  // if db is hosed, do something with callback
 | 
| +
 | 
| +  bool* is_durable = new bool;
 | 
| +  PostTaskAndReplyWithResultForDBThread(
 | 
| +      FROM_HERE,
 | 
| +      base::Bind(&GetDurableOnDBThread,
 | 
| +                 origin,
 | 
| +                 base::Unretained(is_durable)),
 | 
| +      base::Bind(&QuotaManager::DidGetDurability,
 | 
| +                 weak_factory_.GetWeakPtr(),
 | 
| +                 callback,
 | 
| +                 base::Owned(is_durable)));
 | 
| +}
 | 
| +
 | 
|  void QuotaManager::GetOriginsModifiedSince(StorageType type,
 | 
|                                             base::Time modified_since,
 | 
|                                             const GetOriginsCallback& callback) {
 | 
| @@ -1269,6 +1298,7 @@ UsageTracker* QuotaManager::GetUsageTracker(StorageType type) const {
 | 
|      case kStorageTypeQuotaNotManaged:
 | 
|        return NULL;
 | 
|      case kStorageTypeUnknown:
 | 
| +    case kStorageTypeDurable:
 | 
|        NOTREACHED();
 | 
|    }
 | 
|    return NULL;
 | 
| @@ -1606,6 +1636,18 @@ void QuotaManager::DidDatabaseWork(bool success) {
 | 
|    db_disabled_ = !success;
 | 
|  }
 | 
|  
 | 
| +void QuotaManager::DidGetDurability(const GetDurabilityCallback& callback,
 | 
| +                                    const bool* durable,
 | 
| +                                    bool success) {
 | 
| +  DidDatabaseWork(success);
 | 
| +  if (!success) {
 | 
| +    NOTREACHED() << "Add a test for this";
 | 
| +    callback.Run(kQuotaErrorInvalidAccess, false /*durability*/);
 | 
| +    return;
 | 
| +  }
 | 
| +  callback.Run(kQuotaStatusOk, *durable);
 | 
| +}
 | 
| +
 | 
|  void QuotaManager::DeleteOnCorrectThread() const {
 | 
|    if (!io_thread_->BelongsToCurrentThread() &&
 | 
|        io_thread_->DeleteSoon(FROM_HERE, this)) {
 | 
| 
 |