| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "android_webview/native/aw_quota_manager_bridge_impl.h" | 5 #include "android_webview/native/aw_quota_manager_bridge_impl.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "android_webview/browser/aw_browser_context.h" | 9 #include "android_webview/browser/aw_browser_context.h" |
| 10 #include "android_webview/browser/aw_content_browser_client.h" | 10 #include "android_webview/browser/aw_content_browser_client.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 size_t num_callbacks_received_; | 67 size_t num_callbacks_received_; |
| 68 | 68 |
| 69 DISALLOW_COPY_AND_ASSIGN(GetOriginsTask); | 69 DISALLOW_COPY_AND_ASSIGN(GetOriginsTask); |
| 70 }; | 70 }; |
| 71 | 71 |
| 72 GetOriginsTask::GetOriginsTask( | 72 GetOriginsTask::GetOriginsTask( |
| 73 const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, | 73 const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, |
| 74 QuotaManager* quota_manager) | 74 QuotaManager* quota_manager) |
| 75 : ui_callback_(callback), | 75 : ui_callback_(callback), |
| 76 quota_manager_(quota_manager) { | 76 quota_manager_(quota_manager) { |
| 77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 77 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 78 } | 78 } |
| 79 | 79 |
| 80 GetOriginsTask::~GetOriginsTask() {} | 80 GetOriginsTask::~GetOriginsTask() {} |
| 81 | 81 |
| 82 void GetOriginsTask::Run() { | 82 void GetOriginsTask::Run() { |
| 83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 83 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 84 BrowserThread::PostTask( | 84 BrowserThread::PostTask( |
| 85 BrowserThread::IO, | 85 BrowserThread::IO, |
| 86 FROM_HERE, | 86 FROM_HERE, |
| 87 base::Bind(&QuotaManager::GetOriginsModifiedSince, | 87 base::Bind(&QuotaManager::GetOriginsModifiedSince, |
| 88 quota_manager_, | 88 quota_manager_, |
| 89 storage::kStorageTypeTemporary, | 89 storage::kStorageTypeTemporary, |
| 90 base::Time() /* Since beginning of time. */, | 90 base::Time() /* Since beginning of time. */, |
| 91 base::Bind(&GetOriginsTask::OnOriginsObtained, this))); | 91 base::Bind(&GetOriginsTask::OnOriginsObtained, this))); |
| 92 } | 92 } |
| 93 | 93 |
| 94 void GetOriginsTask::OnOriginsObtained(const std::set<GURL>& origins, | 94 void GetOriginsTask::OnOriginsObtained(const std::set<GURL>& origins, |
| 95 storage::StorageType type) { | 95 storage::StorageType type) { |
| 96 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 96 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 97 num_callbacks_to_wait_ = origins.size(); | 97 num_callbacks_to_wait_ = origins.size(); |
| 98 num_callbacks_received_ = 0u; | 98 num_callbacks_received_ = 0u; |
| 99 | 99 |
| 100 for (std::set<GURL>::const_iterator origin = origins.begin(); | 100 for (std::set<GURL>::const_iterator origin = origins.begin(); |
| 101 origin != origins.end(); | 101 origin != origins.end(); |
| 102 ++origin) { | 102 ++origin) { |
| 103 quota_manager_->GetUsageAndQuota( | 103 quota_manager_->GetUsageAndQuota( |
| 104 *origin, | 104 *origin, |
| 105 type, | 105 type, |
| 106 base::Bind(&GetOriginsTask::OnUsageAndQuotaObtained, this, *origin)); | 106 base::Bind(&GetOriginsTask::OnUsageAndQuotaObtained, this, *origin)); |
| 107 } | 107 } |
| 108 | 108 |
| 109 CheckDone(); | 109 CheckDone(); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void GetOriginsTask::OnUsageAndQuotaObtained( | 112 void GetOriginsTask::OnUsageAndQuotaObtained( |
| 113 const GURL& origin, | 113 const GURL& origin, |
| 114 storage::QuotaStatusCode status_code, | 114 storage::QuotaStatusCode status_code, |
| 115 int64 usage, | 115 int64 usage, |
| 116 int64 quota) { | 116 int64 quota) { |
| 117 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 117 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 118 if (status_code == storage::kQuotaStatusOk) { | 118 if (status_code == storage::kQuotaStatusOk) { |
| 119 origin_.push_back(origin.spec()); | 119 origin_.push_back(origin.spec()); |
| 120 usage_.push_back(usage); | 120 usage_.push_back(usage); |
| 121 quota_.push_back(quota); | 121 quota_.push_back(quota); |
| 122 } | 122 } |
| 123 | 123 |
| 124 ++num_callbacks_received_; | 124 ++num_callbacks_received_; |
| 125 CheckDone(); | 125 CheckDone(); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void GetOriginsTask::CheckDone() { | 128 void GetOriginsTask::CheckDone() { |
| 129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 129 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 130 if (num_callbacks_received_ == num_callbacks_to_wait_) { | 130 if (num_callbacks_received_ == num_callbacks_to_wait_) { |
| 131 BrowserThread::PostTask( | 131 BrowserThread::PostTask( |
| 132 BrowserThread::UI, | 132 BrowserThread::UI, |
| 133 FROM_HERE, | 133 FROM_HERE, |
| 134 base::Bind(&GetOriginsTask::DoneOnUIThread, this)); | 134 base::Bind(&GetOriginsTask::DoneOnUIThread, this)); |
| 135 } else if (num_callbacks_received_ > num_callbacks_to_wait_) { | 135 } else if (num_callbacks_received_ > num_callbacks_to_wait_) { |
| 136 NOTREACHED(); | 136 NOTREACHED(); |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 | 139 |
| 140 // This method is to avoid copying the 3 vector arguments into a bound callback. | 140 // This method is to avoid copying the 3 vector arguments into a bound callback. |
| 141 void GetOriginsTask::DoneOnUIThread() { | 141 void GetOriginsTask::DoneOnUIThread() { |
| 142 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 142 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 143 ui_callback_.Run(origin_, usage_, quota_); | 143 ui_callback_.Run(origin_, usage_, quota_); |
| 144 } | 144 } |
| 145 | 145 |
| 146 void RunOnUIThread(const base::Closure& task) { | 146 void RunOnUIThread(const base::Closure& task) { |
| 147 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 147 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 148 task.Run(); | 148 task.Run(); |
| 149 } else { | 149 } else { |
| 150 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task); | 150 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task); |
| 151 } | 151 } |
| 152 } | 152 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 177 weak_factory_(this) { | 177 weak_factory_(this) { |
| 178 } | 178 } |
| 179 | 179 |
| 180 AwQuotaManagerBridgeImpl::~AwQuotaManagerBridgeImpl() {} | 180 AwQuotaManagerBridgeImpl::~AwQuotaManagerBridgeImpl() {} |
| 181 | 181 |
| 182 void AwQuotaManagerBridgeImpl::Init(JNIEnv* env, jobject object) { | 182 void AwQuotaManagerBridgeImpl::Init(JNIEnv* env, jobject object) { |
| 183 java_ref_ = JavaObjectWeakGlobalRef(env, object); | 183 java_ref_ = JavaObjectWeakGlobalRef(env, object); |
| 184 } | 184 } |
| 185 | 185 |
| 186 StoragePartition* AwQuotaManagerBridgeImpl::GetStoragePartition() const { | 186 StoragePartition* AwQuotaManagerBridgeImpl::GetStoragePartition() const { |
| 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 187 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 188 | 188 |
| 189 // AndroidWebview does not use per-site storage partitions. | 189 // AndroidWebview does not use per-site storage partitions. |
| 190 StoragePartition* storage_partition = | 190 StoragePartition* storage_partition = |
| 191 content::BrowserContext::GetDefaultStoragePartition(browser_context_); | 191 content::BrowserContext::GetDefaultStoragePartition(browser_context_); |
| 192 DCHECK(storage_partition); | 192 DCHECK(storage_partition); |
| 193 return storage_partition; | 193 return storage_partition; |
| 194 } | 194 } |
| 195 | 195 |
| 196 QuotaManager* AwQuotaManagerBridgeImpl::GetQuotaManager() const { | 196 QuotaManager* AwQuotaManagerBridgeImpl::GetQuotaManager() const { |
| 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 197 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 198 | 198 |
| 199 QuotaManager* quota_manager = GetStoragePartition()->GetQuotaManager(); | 199 QuotaManager* quota_manager = GetStoragePartition()->GetQuotaManager(); |
| 200 DCHECK(quota_manager); | 200 DCHECK(quota_manager); |
| 201 return quota_manager; | 201 return quota_manager; |
| 202 } | 202 } |
| 203 | 203 |
| 204 void AwQuotaManagerBridgeImpl::DeleteAllData(JNIEnv* env, jobject object) { | 204 void AwQuotaManagerBridgeImpl::DeleteAllData(JNIEnv* env, jobject object) { |
| 205 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread, | 205 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread, |
| 206 this)); | 206 this)); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread() { | 209 void AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread() { |
| 210 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 210 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 211 GetStoragePartition()->ClearData( | 211 GetStoragePartition()->ClearData( |
| 212 // Clear all web storage data except cookies. | 212 // Clear all web storage data except cookies. |
| 213 StoragePartition::REMOVE_DATA_MASK_APPCACHE | | 213 StoragePartition::REMOVE_DATA_MASK_APPCACHE | |
| 214 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | 214 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | |
| 215 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | | 215 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | |
| 216 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE | | 216 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE | |
| 217 StoragePartition::REMOVE_DATA_MASK_WEBSQL, | 217 StoragePartition::REMOVE_DATA_MASK_WEBSQL, |
| 218 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, | 218 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, |
| 219 GURL(), StoragePartition::OriginMatcherFunction(), | 219 GURL(), StoragePartition::OriginMatcherFunction(), |
| 220 base::Time(), base::Time::Max(), base::Bind(&base::DoNothing)); | 220 base::Time(), base::Time::Max(), base::Bind(&base::DoNothing)); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void AwQuotaManagerBridgeImpl::DeleteOrigin( | 223 void AwQuotaManagerBridgeImpl::DeleteOrigin( |
| 224 JNIEnv* env, jobject object, jstring origin) { | 224 JNIEnv* env, jobject object, jstring origin) { |
| 225 base::string16 origin_string( | 225 base::string16 origin_string( |
| 226 base::android::ConvertJavaStringToUTF16(env, origin)); | 226 base::android::ConvertJavaStringToUTF16(env, origin)); |
| 227 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread, | 227 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread, |
| 228 this, | 228 this, |
| 229 origin_string)); | 229 origin_string)); |
| 230 } | 230 } |
| 231 | 231 |
| 232 void AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread( | 232 void AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread( |
| 233 const base::string16& origin) { | 233 const base::string16& origin) { |
| 234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 234 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 235 StoragePartition* storage_partition = GetStoragePartition(); | 235 StoragePartition* storage_partition = GetStoragePartition(); |
| 236 storage_partition->ClearDataForOrigin( | 236 storage_partition->ClearDataForOrigin( |
| 237 // All (temporary) QuotaClient types. | 237 // All (temporary) QuotaClient types. |
| 238 StoragePartition::REMOVE_DATA_MASK_APPCACHE | | 238 StoragePartition::REMOVE_DATA_MASK_APPCACHE | |
| 239 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | 239 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | |
| 240 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | | 240 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | |
| 241 StoragePartition::REMOVE_DATA_MASK_WEBSQL, | 241 StoragePartition::REMOVE_DATA_MASK_WEBSQL, |
| 242 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, | 242 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, |
| 243 GURL(origin), | 243 GURL(origin), |
| 244 storage_partition->GetURLRequestContext(), | 244 storage_partition->GetURLRequestContext(), |
| 245 base::Bind(&base::DoNothing)); | 245 base::Bind(&base::DoNothing)); |
| 246 } | 246 } |
| 247 | 247 |
| 248 void AwQuotaManagerBridgeImpl::GetOrigins( | 248 void AwQuotaManagerBridgeImpl::GetOrigins( |
| 249 JNIEnv* env, jobject object, jint callback_id) { | 249 JNIEnv* env, jobject object, jint callback_id) { |
| 250 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::GetOriginsOnUiThread, | 250 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::GetOriginsOnUiThread, |
| 251 this, | 251 this, |
| 252 callback_id)); | 252 callback_id)); |
| 253 } | 253 } |
| 254 | 254 |
| 255 void AwQuotaManagerBridgeImpl::GetOriginsOnUiThread(jint callback_id) { | 255 void AwQuotaManagerBridgeImpl::GetOriginsOnUiThread(jint callback_id) { |
| 256 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 256 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 257 | 257 |
| 258 const GetOriginsCallback ui_callback = base::Bind( | 258 const GetOriginsCallback ui_callback = base::Bind( |
| 259 &AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl, | 259 &AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl, |
| 260 weak_factory_.GetWeakPtr(), | 260 weak_factory_.GetWeakPtr(), |
| 261 callback_id); | 261 callback_id); |
| 262 | 262 |
| 263 (new GetOriginsTask(ui_callback, GetQuotaManager()))->Run(); | 263 (new GetOriginsTask(ui_callback, GetQuotaManager()))->Run(); |
| 264 } | 264 } |
| 265 | 265 |
| 266 void AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl( | 266 void AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl( |
| 267 int jcallback_id, | 267 int jcallback_id, |
| 268 const std::vector<std::string>& origin, | 268 const std::vector<std::string>& origin, |
| 269 const std::vector<int64>& usage, | 269 const std::vector<int64>& usage, |
| 270 const std::vector<int64>& quota) { | 270 const std::vector<int64>& quota) { |
| 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 271 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 272 JNIEnv* env = AttachCurrentThread(); | 272 JNIEnv* env = AttachCurrentThread(); |
| 273 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 273 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 274 if (obj.is_null()) | 274 if (obj.is_null()) |
| 275 return; | 275 return; |
| 276 | 276 |
| 277 Java_AwQuotaManagerBridge_onGetOriginsCallback( | 277 Java_AwQuotaManagerBridge_onGetOriginsCallback( |
| 278 env, | 278 env, |
| 279 obj.obj(), | 279 obj.obj(), |
| 280 jcallback_id, | 280 jcallback_id, |
| 281 base::android::ToJavaArrayOfStrings(env, origin).obj(), | 281 base::android::ToJavaArrayOfStrings(env, origin).obj(), |
| 282 base::android::ToJavaLongArray(env, usage).obj(), | 282 base::android::ToJavaLongArray(env, usage).obj(), |
| 283 base::android::ToJavaLongArray(env, quota).obj()); | 283 base::android::ToJavaLongArray(env, quota).obj()); |
| 284 } | 284 } |
| 285 | 285 |
| 286 namespace { | 286 namespace { |
| 287 | 287 |
| 288 void OnUsageAndQuotaObtained( | 288 void OnUsageAndQuotaObtained( |
| 289 const AwQuotaManagerBridgeImpl::QuotaUsageCallback& ui_callback, | 289 const AwQuotaManagerBridgeImpl::QuotaUsageCallback& ui_callback, |
| 290 storage::QuotaStatusCode status_code, | 290 storage::QuotaStatusCode status_code, |
| 291 int64 usage, | 291 int64 usage, |
| 292 int64 quota) { | 292 int64 quota) { |
| 293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 293 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 294 if (status_code != storage::kQuotaStatusOk) { | 294 if (status_code != storage::kQuotaStatusOk) { |
| 295 usage = 0; | 295 usage = 0; |
| 296 quota = 0; | 296 quota = 0; |
| 297 } | 297 } |
| 298 BrowserThread::PostTask( | 298 BrowserThread::PostTask( |
| 299 BrowserThread::UI, | 299 BrowserThread::UI, |
| 300 FROM_HERE, | 300 FROM_HERE, |
| 301 base::Bind(ui_callback, usage, quota)); | 301 base::Bind(ui_callback, usage, quota)); |
| 302 } | 302 } |
| 303 | 303 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 315 this, | 315 this, |
| 316 origin_string, | 316 origin_string, |
| 317 callback_id, | 317 callback_id, |
| 318 is_quota)); | 318 is_quota)); |
| 319 } | 319 } |
| 320 | 320 |
| 321 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread( | 321 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread( |
| 322 const base::string16& origin, | 322 const base::string16& origin, |
| 323 jint callback_id, | 323 jint callback_id, |
| 324 bool is_quota) { | 324 bool is_quota) { |
| 325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 325 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 326 const QuotaUsageCallback ui_callback = base::Bind( | 326 const QuotaUsageCallback ui_callback = base::Bind( |
| 327 &AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl, | 327 &AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl, |
| 328 weak_factory_.GetWeakPtr(), | 328 weak_factory_.GetWeakPtr(), |
| 329 callback_id, | 329 callback_id, |
| 330 is_quota); | 330 is_quota); |
| 331 | 331 |
| 332 BrowserThread::PostTask( | 332 BrowserThread::PostTask( |
| 333 BrowserThread::IO, | 333 BrowserThread::IO, |
| 334 FROM_HERE, | 334 FROM_HERE, |
| 335 base::Bind(&QuotaManager::GetUsageAndQuota, | 335 base::Bind(&QuotaManager::GetUsageAndQuota, |
| 336 GetQuotaManager(), | 336 GetQuotaManager(), |
| 337 GURL(origin), | 337 GURL(origin), |
| 338 storage::kStorageTypeTemporary, | 338 storage::kStorageTypeTemporary, |
| 339 base::Bind(&OnUsageAndQuotaObtained, ui_callback))); | 339 base::Bind(&OnUsageAndQuotaObtained, ui_callback))); |
| 340 } | 340 } |
| 341 | 341 |
| 342 void AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl( | 342 void AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl( |
| 343 int jcallback_id, bool is_quota, int64 usage, int64 quota) { | 343 int jcallback_id, bool is_quota, int64 usage, int64 quota) { |
| 344 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 344 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 345 JNIEnv* env = AttachCurrentThread(); | 345 JNIEnv* env = AttachCurrentThread(); |
| 346 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 346 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 347 if (obj.is_null()) | 347 if (obj.is_null()) |
| 348 return; | 348 return; |
| 349 | 349 |
| 350 Java_AwQuotaManagerBridge_onGetUsageAndQuotaForOriginCallback( | 350 Java_AwQuotaManagerBridge_onGetUsageAndQuotaForOriginCallback( |
| 351 env, obj.obj(), jcallback_id, is_quota, usage, quota); | 351 env, obj.obj(), jcallback_id, is_quota, usage, quota); |
| 352 } | 352 } |
| 353 | 353 |
| 354 bool RegisterAwQuotaManagerBridge(JNIEnv* env) { | 354 bool RegisterAwQuotaManagerBridge(JNIEnv* env) { |
| 355 return RegisterNativesImpl(env); | 355 return RegisterNativesImpl(env); |
| 356 } | 356 } |
| 357 | 357 |
| 358 } // namespace android_webview | 358 } // namespace android_webview |
| OLD | NEW |