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/browser/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" |
11 #include "base/android/jni_array.h" | 11 #include "base/android/jni_array.h" |
12 #include "base/android/jni_string.h" | 12 #include "base/android/jni_string.h" |
13 #include "base/synchronization/waitable_event.h" | 13 #include "base/synchronization/waitable_event.h" |
14 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/storage_partition.h" | 15 #include "content/public/browser/storage_partition.h" |
(...skipping 14 matching lines...) Expand all Loading... |
30 namespace android_webview { | 30 namespace android_webview { |
31 | 31 |
32 namespace { | 32 namespace { |
33 | 33 |
34 // This object lives on UI and IO threads. Care need to be taken to make sure | 34 // This object lives on UI and IO threads. Care need to be taken to make sure |
35 // there are no concurrent accesses to instance variables. Also this object | 35 // there are no concurrent accesses to instance variables. Also this object |
36 // is refcounted in the various callbacks, and is destroyed when all callbacks | 36 // is refcounted in the various callbacks, and is destroyed when all callbacks |
37 // are destroyed at the end of DoneOnUIThread. | 37 // are destroyed at the end of DoneOnUIThread. |
38 class GetOriginsTask : public base::RefCountedThreadSafe<GetOriginsTask> { | 38 class GetOriginsTask : public base::RefCountedThreadSafe<GetOriginsTask> { |
39 public: | 39 public: |
40 GetOriginsTask( | 40 GetOriginsTask(const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, |
41 const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, | 41 QuotaManager* quota_manager); |
42 QuotaManager* quota_manager); | |
43 | 42 |
44 void Run(); | 43 void Run(); |
45 | 44 |
46 private: | 45 private: |
47 friend class base::RefCountedThreadSafe<GetOriginsTask>; | 46 friend class base::RefCountedThreadSafe<GetOriginsTask>; |
48 ~GetOriginsTask(); | 47 ~GetOriginsTask(); |
49 | 48 |
50 void OnOriginsObtained(const std::set<GURL>& origins, | 49 void OnOriginsObtained(const std::set<GURL>& origins, |
51 storage::StorageType type); | 50 storage::StorageType type); |
52 | 51 |
(...skipping 14 matching lines...) Expand all Loading... |
67 | 66 |
68 size_t num_callbacks_to_wait_; | 67 size_t num_callbacks_to_wait_; |
69 size_t num_callbacks_received_; | 68 size_t num_callbacks_received_; |
70 | 69 |
71 DISALLOW_COPY_AND_ASSIGN(GetOriginsTask); | 70 DISALLOW_COPY_AND_ASSIGN(GetOriginsTask); |
72 }; | 71 }; |
73 | 72 |
74 GetOriginsTask::GetOriginsTask( | 73 GetOriginsTask::GetOriginsTask( |
75 const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, | 74 const AwQuotaManagerBridgeImpl::GetOriginsCallback& callback, |
76 QuotaManager* quota_manager) | 75 QuotaManager* quota_manager) |
77 : ui_callback_(callback), | 76 : ui_callback_(callback), quota_manager_(quota_manager) { |
78 quota_manager_(quota_manager) { | |
79 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 77 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
80 } | 78 } |
81 | 79 |
82 GetOriginsTask::~GetOriginsTask() {} | 80 GetOriginsTask::~GetOriginsTask() {} |
83 | 81 |
84 void GetOriginsTask::Run() { | 82 void GetOriginsTask::Run() { |
85 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 83 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
86 BrowserThread::PostTask( | 84 BrowserThread::PostTask( |
87 BrowserThread::IO, | 85 BrowserThread::IO, FROM_HERE, |
88 FROM_HERE, | 86 base::Bind(&QuotaManager::GetOriginsModifiedSince, quota_manager_, |
89 base::Bind(&QuotaManager::GetOriginsModifiedSince, | |
90 quota_manager_, | |
91 storage::kStorageTypeTemporary, | 87 storage::kStorageTypeTemporary, |
92 base::Time() /* Since beginning of time. */, | 88 base::Time() /* Since beginning of time. */, |
93 base::Bind(&GetOriginsTask::OnOriginsObtained, this))); | 89 base::Bind(&GetOriginsTask::OnOriginsObtained, this))); |
94 } | 90 } |
95 | 91 |
96 void GetOriginsTask::OnOriginsObtained(const std::set<GURL>& origins, | 92 void GetOriginsTask::OnOriginsObtained(const std::set<GURL>& origins, |
97 storage::StorageType type) { | 93 storage::StorageType type) { |
98 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 94 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
99 num_callbacks_to_wait_ = origins.size(); | 95 num_callbacks_to_wait_ = origins.size(); |
100 num_callbacks_received_ = 0u; | 96 num_callbacks_received_ = 0u; |
101 | 97 |
102 for (std::set<GURL>::const_iterator origin = origins.begin(); | 98 for (std::set<GURL>::const_iterator origin = origins.begin(); |
103 origin != origins.end(); | 99 origin != origins.end(); ++origin) { |
104 ++origin) { | |
105 quota_manager_->GetUsageAndQuota( | 100 quota_manager_->GetUsageAndQuota( |
106 *origin, | 101 *origin, type, |
107 type, | |
108 base::Bind(&GetOriginsTask::OnUsageAndQuotaObtained, this, *origin)); | 102 base::Bind(&GetOriginsTask::OnUsageAndQuotaObtained, this, *origin)); |
109 } | 103 } |
110 | 104 |
111 CheckDone(); | 105 CheckDone(); |
112 } | 106 } |
113 | 107 |
114 void GetOriginsTask::OnUsageAndQuotaObtained( | 108 void GetOriginsTask::OnUsageAndQuotaObtained( |
115 const GURL& origin, | 109 const GURL& origin, |
116 storage::QuotaStatusCode status_code, | 110 storage::QuotaStatusCode status_code, |
117 int64_t usage, | 111 int64_t usage, |
118 int64_t quota) { | 112 int64_t quota) { |
119 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 113 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
120 if (status_code == storage::kQuotaStatusOk) { | 114 if (status_code == storage::kQuotaStatusOk) { |
121 origin_.push_back(origin.spec()); | 115 origin_.push_back(origin.spec()); |
122 usage_.push_back(usage); | 116 usage_.push_back(usage); |
123 quota_.push_back(quota); | 117 quota_.push_back(quota); |
124 } | 118 } |
125 | 119 |
126 ++num_callbacks_received_; | 120 ++num_callbacks_received_; |
127 CheckDone(); | 121 CheckDone(); |
128 } | 122 } |
129 | 123 |
130 void GetOriginsTask::CheckDone() { | 124 void GetOriginsTask::CheckDone() { |
131 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 125 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
132 if (num_callbacks_received_ == num_callbacks_to_wait_) { | 126 if (num_callbacks_received_ == num_callbacks_to_wait_) { |
133 BrowserThread::PostTask( | 127 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
134 BrowserThread::UI, | 128 base::Bind(&GetOriginsTask::DoneOnUIThread, this)); |
135 FROM_HERE, | |
136 base::Bind(&GetOriginsTask::DoneOnUIThread, this)); | |
137 } else if (num_callbacks_received_ > num_callbacks_to_wait_) { | 129 } else if (num_callbacks_received_ > num_callbacks_to_wait_) { |
138 NOTREACHED(); | 130 NOTREACHED(); |
139 } | 131 } |
140 } | 132 } |
141 | 133 |
142 // This method is to avoid copying the 3 vector arguments into a bound callback. | 134 // This method is to avoid copying the 3 vector arguments into a bound callback. |
143 void GetOriginsTask::DoneOnUIThread() { | 135 void GetOriginsTask::DoneOnUIThread() { |
144 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 136 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
145 ui_callback_.Run(origin_, usage_, quota_); | 137 ui_callback_.Run(origin_, usage_, quota_); |
146 } | 138 } |
147 | 139 |
148 void RunOnUIThread(const base::Closure& task) { | 140 void RunOnUIThread(const base::Closure& task) { |
149 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 141 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
150 task.Run(); | 142 task.Run(); |
151 } else { | 143 } else { |
152 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task); | 144 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task); |
153 } | 145 } |
154 } | 146 } |
155 | 147 |
156 } // namespace | 148 } // namespace |
157 | 149 |
158 | |
159 // static | 150 // static |
160 jlong GetDefaultNativeAwQuotaManagerBridge(JNIEnv* env, | 151 jlong GetDefaultNativeAwQuotaManagerBridge(JNIEnv* env, |
161 const JavaParamRef<jclass>& clazz) { | 152 const JavaParamRef<jclass>& clazz) { |
162 AwBrowserContext* browser_context = | 153 AwBrowserContext* browser_context = |
163 AwContentBrowserClient::GetAwBrowserContext(); | 154 AwContentBrowserClient::GetAwBrowserContext(); |
164 | 155 |
165 AwQuotaManagerBridgeImpl* bridge = static_cast<AwQuotaManagerBridgeImpl*>( | 156 AwQuotaManagerBridgeImpl* bridge = static_cast<AwQuotaManagerBridgeImpl*>( |
166 browser_context->GetQuotaManagerBridge()); | 157 browser_context->GetQuotaManagerBridge()); |
167 DCHECK(bridge); | 158 DCHECK(bridge); |
168 return reinterpret_cast<intptr_t>(bridge); | 159 return reinterpret_cast<intptr_t>(bridge); |
169 } | 160 } |
170 | 161 |
171 // static | 162 // static |
172 scoped_refptr<AwQuotaManagerBridge> AwQuotaManagerBridgeImpl::Create( | 163 scoped_refptr<AwQuotaManagerBridge> AwQuotaManagerBridgeImpl::Create( |
173 AwBrowserContext* browser_context) { | 164 AwBrowserContext* browser_context) { |
174 return new AwQuotaManagerBridgeImpl(browser_context); | 165 return new AwQuotaManagerBridgeImpl(browser_context); |
175 } | 166 } |
176 | 167 |
177 AwQuotaManagerBridgeImpl::AwQuotaManagerBridgeImpl( | 168 AwQuotaManagerBridgeImpl::AwQuotaManagerBridgeImpl( |
178 AwBrowserContext* browser_context) | 169 AwBrowserContext* browser_context) |
179 : browser_context_(browser_context), | 170 : browser_context_(browser_context), weak_factory_(this) {} |
180 weak_factory_(this) { | |
181 } | |
182 | 171 |
183 AwQuotaManagerBridgeImpl::~AwQuotaManagerBridgeImpl() {} | 172 AwQuotaManagerBridgeImpl::~AwQuotaManagerBridgeImpl() {} |
184 | 173 |
185 void AwQuotaManagerBridgeImpl::Init(JNIEnv* env, | 174 void AwQuotaManagerBridgeImpl::Init(JNIEnv* env, |
186 const JavaParamRef<jobject>& object) { | 175 const JavaParamRef<jobject>& object) { |
187 java_ref_ = JavaObjectWeakGlobalRef(env, object); | 176 java_ref_ = JavaObjectWeakGlobalRef(env, object); |
188 } | 177 } |
189 | 178 |
190 StoragePartition* AwQuotaManagerBridgeImpl::GetStoragePartition() const { | 179 StoragePartition* AwQuotaManagerBridgeImpl::GetStoragePartition() const { |
191 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 180 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
192 | 181 |
193 // AndroidWebview does not use per-site storage partitions. | 182 // AndroidWebview does not use per-site storage partitions. |
194 StoragePartition* storage_partition = | 183 StoragePartition* storage_partition = |
195 content::BrowserContext::GetDefaultStoragePartition(browser_context_); | 184 content::BrowserContext::GetDefaultStoragePartition(browser_context_); |
196 DCHECK(storage_partition); | 185 DCHECK(storage_partition); |
197 return storage_partition; | 186 return storage_partition; |
198 } | 187 } |
199 | 188 |
200 QuotaManager* AwQuotaManagerBridgeImpl::GetQuotaManager() const { | 189 QuotaManager* AwQuotaManagerBridgeImpl::GetQuotaManager() const { |
201 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 190 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
202 | 191 |
203 QuotaManager* quota_manager = GetStoragePartition()->GetQuotaManager(); | 192 QuotaManager* quota_manager = GetStoragePartition()->GetQuotaManager(); |
204 DCHECK(quota_manager); | 193 DCHECK(quota_manager); |
205 return quota_manager; | 194 return quota_manager; |
206 } | 195 } |
207 | 196 |
208 void AwQuotaManagerBridgeImpl::DeleteAllData( | 197 void AwQuotaManagerBridgeImpl::DeleteAllData( |
209 JNIEnv* env, | 198 JNIEnv* env, |
210 const JavaParamRef<jobject>& object) { | 199 const JavaParamRef<jobject>& object) { |
211 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread, | 200 RunOnUIThread( |
212 this)); | 201 base::Bind(&AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread, this)); |
213 } | 202 } |
214 | 203 |
215 void AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread() { | 204 void AwQuotaManagerBridgeImpl::DeleteAllDataOnUiThread() { |
216 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 205 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
217 GetStoragePartition()->ClearData( | 206 GetStoragePartition()->ClearData( |
218 // Clear all web storage data except cookies. | 207 // Clear all web storage data except cookies. |
219 StoragePartition::REMOVE_DATA_MASK_APPCACHE | | 208 StoragePartition::REMOVE_DATA_MASK_APPCACHE | |
220 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | 209 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | |
221 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | | 210 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | |
222 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE | | 211 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE | |
223 StoragePartition::REMOVE_DATA_MASK_WEBSQL, | 212 StoragePartition::REMOVE_DATA_MASK_WEBSQL, |
224 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, | 213 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, GURL(), |
225 GURL(), StoragePartition::OriginMatcherFunction(), | 214 StoragePartition::OriginMatcherFunction(), base::Time(), |
226 base::Time(), base::Time::Max(), base::Bind(&base::DoNothing)); | 215 base::Time::Max(), base::Bind(&base::DoNothing)); |
227 } | 216 } |
228 | 217 |
229 void AwQuotaManagerBridgeImpl::DeleteOrigin( | 218 void AwQuotaManagerBridgeImpl::DeleteOrigin( |
230 JNIEnv* env, | 219 JNIEnv* env, |
231 const JavaParamRef<jobject>& object, | 220 const JavaParamRef<jobject>& object, |
232 const JavaParamRef<jstring>& origin) { | 221 const JavaParamRef<jstring>& origin) { |
233 base::string16 origin_string( | 222 base::string16 origin_string( |
234 base::android::ConvertJavaStringToUTF16(env, origin)); | 223 base::android::ConvertJavaStringToUTF16(env, origin)); |
235 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread, | 224 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread, |
236 this, | 225 this, origin_string)); |
237 origin_string)); | |
238 } | 226 } |
239 | 227 |
240 void AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread( | 228 void AwQuotaManagerBridgeImpl::DeleteOriginOnUiThread( |
241 const base::string16& origin) { | 229 const base::string16& origin) { |
242 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 230 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
243 StoragePartition* storage_partition = GetStoragePartition(); | 231 StoragePartition* storage_partition = GetStoragePartition(); |
244 storage_partition->ClearDataForOrigin( | 232 storage_partition->ClearDataForOrigin( |
245 // All (temporary) QuotaClient types. | 233 // All (temporary) QuotaClient types. |
246 StoragePartition::REMOVE_DATA_MASK_APPCACHE | | 234 StoragePartition::REMOVE_DATA_MASK_APPCACHE | |
247 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | 235 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | |
248 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | | 236 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | |
249 StoragePartition::REMOVE_DATA_MASK_WEBSQL, | 237 StoragePartition::REMOVE_DATA_MASK_WEBSQL, |
250 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, | 238 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY, GURL(origin), |
251 GURL(origin), | 239 storage_partition->GetURLRequestContext(), base::Bind(&base::DoNothing)); |
252 storage_partition->GetURLRequestContext(), | |
253 base::Bind(&base::DoNothing)); | |
254 } | 240 } |
255 | 241 |
256 void AwQuotaManagerBridgeImpl::GetOrigins(JNIEnv* env, | 242 void AwQuotaManagerBridgeImpl::GetOrigins(JNIEnv* env, |
257 const JavaParamRef<jobject>& object, | 243 const JavaParamRef<jobject>& object, |
258 jint callback_id) { | 244 jint callback_id) { |
259 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::GetOriginsOnUiThread, | 245 RunOnUIThread(base::Bind(&AwQuotaManagerBridgeImpl::GetOriginsOnUiThread, |
260 this, | 246 this, callback_id)); |
261 callback_id)); | |
262 } | 247 } |
263 | 248 |
264 void AwQuotaManagerBridgeImpl::GetOriginsOnUiThread(jint callback_id) { | 249 void AwQuotaManagerBridgeImpl::GetOriginsOnUiThread(jint callback_id) { |
265 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 250 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
266 | 251 |
267 const GetOriginsCallback ui_callback = base::Bind( | 252 const GetOriginsCallback ui_callback = |
268 &AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl, | 253 base::Bind(&AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl, |
269 weak_factory_.GetWeakPtr(), | 254 weak_factory_.GetWeakPtr(), callback_id); |
270 callback_id); | |
271 | 255 |
272 (new GetOriginsTask(ui_callback, GetQuotaManager()))->Run(); | 256 (new GetOriginsTask(ui_callback, GetQuotaManager()))->Run(); |
273 } | 257 } |
274 | 258 |
275 void AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl( | 259 void AwQuotaManagerBridgeImpl::GetOriginsCallbackImpl( |
276 int jcallback_id, | 260 int jcallback_id, |
277 const std::vector<std::string>& origin, | 261 const std::vector<std::string>& origin, |
278 const std::vector<int64_t>& usage, | 262 const std::vector<int64_t>& usage, |
279 const std::vector<int64_t>& quota) { | 263 const std::vector<int64_t>& quota) { |
280 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 264 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
(...skipping 13 matching lines...) Expand all Loading... |
294 void OnUsageAndQuotaObtained( | 278 void OnUsageAndQuotaObtained( |
295 const AwQuotaManagerBridgeImpl::QuotaUsageCallback& ui_callback, | 279 const AwQuotaManagerBridgeImpl::QuotaUsageCallback& ui_callback, |
296 storage::QuotaStatusCode status_code, | 280 storage::QuotaStatusCode status_code, |
297 int64_t usage, | 281 int64_t usage, |
298 int64_t quota) { | 282 int64_t quota) { |
299 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 283 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
300 if (status_code != storage::kQuotaStatusOk) { | 284 if (status_code != storage::kQuotaStatusOk) { |
301 usage = 0; | 285 usage = 0; |
302 quota = 0; | 286 quota = 0; |
303 } | 287 } |
304 BrowserThread::PostTask( | 288 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
305 BrowserThread::UI, | 289 base::Bind(ui_callback, usage, quota)); |
306 FROM_HERE, | |
307 base::Bind(ui_callback, usage, quota)); | |
308 } | 290 } |
309 | 291 |
310 } // namespace | 292 } // namespace |
311 | 293 |
312 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOrigin( | 294 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOrigin( |
313 JNIEnv* env, | 295 JNIEnv* env, |
314 const JavaParamRef<jobject>& object, | 296 const JavaParamRef<jobject>& object, |
315 const JavaParamRef<jstring>& origin, | 297 const JavaParamRef<jstring>& origin, |
316 jint callback_id, | 298 jint callback_id, |
317 bool is_quota) { | 299 bool is_quota) { |
318 base::string16 origin_string( | 300 base::string16 origin_string( |
319 base::android::ConvertJavaStringToUTF16(env, origin)); | 301 base::android::ConvertJavaStringToUTF16(env, origin)); |
320 RunOnUIThread(base::Bind( | 302 RunOnUIThread( |
321 &AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread, | 303 base::Bind(&AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread, |
322 this, | 304 this, origin_string, callback_id, is_quota)); |
323 origin_string, | |
324 callback_id, | |
325 is_quota)); | |
326 } | 305 } |
327 | 306 |
328 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread( | 307 void AwQuotaManagerBridgeImpl::GetUsageAndQuotaForOriginOnUiThread( |
329 const base::string16& origin, | 308 const base::string16& origin, |
330 jint callback_id, | 309 jint callback_id, |
331 bool is_quota) { | 310 bool is_quota) { |
332 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 311 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
333 const QuotaUsageCallback ui_callback = base::Bind( | 312 const QuotaUsageCallback ui_callback = |
334 &AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl, | 313 base::Bind(&AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl, |
335 weak_factory_.GetWeakPtr(), | 314 weak_factory_.GetWeakPtr(), callback_id, is_quota); |
336 callback_id, | |
337 is_quota); | |
338 | 315 |
339 BrowserThread::PostTask( | 316 BrowserThread::PostTask( |
340 BrowserThread::IO, | 317 BrowserThread::IO, FROM_HERE, |
341 FROM_HERE, | 318 base::Bind(&QuotaManager::GetUsageAndQuota, GetQuotaManager(), |
342 base::Bind(&QuotaManager::GetUsageAndQuota, | 319 GURL(origin), storage::kStorageTypeTemporary, |
343 GetQuotaManager(), | |
344 GURL(origin), | |
345 storage::kStorageTypeTemporary, | |
346 base::Bind(&OnUsageAndQuotaObtained, ui_callback))); | 320 base::Bind(&OnUsageAndQuotaObtained, ui_callback))); |
347 } | 321 } |
348 | 322 |
349 void AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl(int jcallback_id, | 323 void AwQuotaManagerBridgeImpl::QuotaUsageCallbackImpl(int jcallback_id, |
350 bool is_quota, | 324 bool is_quota, |
351 int64_t usage, | 325 int64_t usage, |
352 int64_t quota) { | 326 int64_t quota) { |
353 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 327 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
354 JNIEnv* env = AttachCurrentThread(); | 328 JNIEnv* env = AttachCurrentThread(); |
355 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 329 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
356 if (obj.is_null()) | 330 if (obj.is_null()) |
357 return; | 331 return; |
358 | 332 |
359 Java_AwQuotaManagerBridge_onGetUsageAndQuotaForOriginCallback( | 333 Java_AwQuotaManagerBridge_onGetUsageAndQuotaForOriginCallback( |
360 env, obj, jcallback_id, is_quota, usage, quota); | 334 env, obj, jcallback_id, is_quota, usage, quota); |
361 } | 335 } |
362 | 336 |
363 bool RegisterAwQuotaManagerBridge(JNIEnv* env) { | 337 bool RegisterAwQuotaManagerBridge(JNIEnv* env) { |
364 return RegisterNativesImpl(env); | 338 return RegisterNativesImpl(env); |
365 } | 339 } |
366 | 340 |
367 } // namespace android_webview | 341 } // namespace android_webview |
OLD | NEW |