OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chrome/browser/android/preferences/website_preference_bridge.h" | 5 #include "chrome/browser/android/preferences/website_preference_bridge.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/android/scoped_java_ref.h" | 9 #include "base/android/scoped_java_ref.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
14 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" | 14 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" |
| 15 #include "chrome/browser/browsing_data/cookies_tree_model.h" |
| 16 #include "chrome/browser/browsing_data/local_data_container.h" |
15 #include "chrome/browser/content_settings/cookie_settings.h" | 17 #include "chrome/browser/content_settings/cookie_settings.h" |
16 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
17 #include "chrome/browser/profiles/profile_manager.h" | 19 #include "chrome/browser/profiles/profile_manager.h" |
18 #include "components/content_settings/core/browser/host_content_settings_map.h" | 20 #include "components/content_settings/core/browser/host_content_settings_map.h" |
19 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
20 #include "content/public/browser/storage_partition.h" | 22 #include "content/public/browser/storage_partition.h" |
21 #include "jni/WebsitePreferenceBridge_jni.h" | 23 #include "jni/WebsitePreferenceBridge_jni.h" |
22 #include "storage/browser/quota/quota_client.h" | 24 #include "storage/browser/quota/quota_client.h" |
23 #include "storage/browser/quota/quota_manager.h" | 25 #include "storage/browser/quota/quota_manager.h" |
24 | 26 |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 if (value == -1) { | 280 if (value == -1) { |
279 GetCookieSettings()->ResetCookieSetting(primary_pattern, secondary_pattern); | 281 GetCookieSettings()->ResetCookieSetting(primary_pattern, secondary_pattern); |
280 } else { | 282 } else { |
281 GetCookieSettings()->SetCookieSetting(primary_pattern, secondary_pattern, | 283 GetCookieSettings()->SetCookieSetting(primary_pattern, secondary_pattern, |
282 value ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); | 284 value ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); |
283 } | 285 } |
284 } | 286 } |
285 | 287 |
286 namespace { | 288 namespace { |
287 | 289 |
| 290 class SiteDataDeleteHelper : |
| 291 public base::RefCountedThreadSafe<SiteDataDeleteHelper>, |
| 292 public CookiesTreeModel::Observer { |
| 293 public: |
| 294 SiteDataDeleteHelper(Profile* profile, const GURL& domain) |
| 295 : profile_(profile), domain_(domain), ending_batch_processing_(false) { |
| 296 } |
| 297 |
| 298 void Run() { |
| 299 AddRef(); // Balanced in TreeModelEndBatch. |
| 300 |
| 301 content::StoragePartition* storage_partition = |
| 302 content::BrowserContext::GetDefaultStoragePartition(profile_); |
| 303 content::IndexedDBContext* indexed_db_context = |
| 304 storage_partition->GetIndexedDBContext(); |
| 305 content::ServiceWorkerContext* service_worker_context = |
| 306 storage_partition->GetServiceWorkerContext(); |
| 307 storage::FileSystemContext* file_system_context = |
| 308 storage_partition->GetFileSystemContext(); |
| 309 LocalDataContainer* container = new LocalDataContainer( |
| 310 new BrowsingDataCookieHelper(profile_->GetRequestContext()), |
| 311 new BrowsingDataDatabaseHelper(profile_), |
| 312 new BrowsingDataLocalStorageHelper(profile_), |
| 313 NULL, |
| 314 new BrowsingDataAppCacheHelper(profile_), |
| 315 new BrowsingDataIndexedDBHelper(indexed_db_context), |
| 316 BrowsingDataFileSystemHelper::Create(file_system_context), |
| 317 BrowsingDataQuotaHelper::Create(profile_), |
| 318 BrowsingDataChannelIDHelper::Create(profile_->GetRequestContext()), |
| 319 new BrowsingDataServiceWorkerHelper(service_worker_context), |
| 320 NULL); |
| 321 |
| 322 cookies_tree_model_.reset(new CookiesTreeModel( |
| 323 container, profile_->GetExtensionSpecialStoragePolicy(), false)); |
| 324 cookies_tree_model_->AddCookiesTreeObserver(this); |
| 325 } |
| 326 |
| 327 // TreeModelObserver: |
| 328 void TreeNodesAdded(ui::TreeModel* model, |
| 329 ui::TreeModelNode* parent, |
| 330 int start, |
| 331 int count) override {} |
| 332 void TreeNodesRemoved(ui::TreeModel* model, |
| 333 ui::TreeModelNode* parent, |
| 334 int start, |
| 335 int count) override {} |
| 336 |
| 337 // CookiesTreeModel::Observer: |
| 338 void TreeNodeChanged(ui::TreeModel* model, ui::TreeModelNode* node) override { |
| 339 } |
| 340 |
| 341 void TreeModelBeginBatch(CookiesTreeModel* model) override { |
| 342 DCHECK(!ending_batch_processing_); // Extra batch-start sent. |
| 343 } |
| 344 |
| 345 void TreeModelEndBatch(CookiesTreeModel* model) override { |
| 346 DCHECK(!ending_batch_processing_); // Already in end-stage. |
| 347 ending_batch_processing_ = true; |
| 348 |
| 349 RecursivelyFindSiteAndDelete(cookies_tree_model_->GetRoot()); |
| 350 |
| 351 // This will result in this class getting deleted. |
| 352 Release(); |
| 353 } |
| 354 |
| 355 void RecursivelyFindSiteAndDelete(CookieTreeNode* node) { |
| 356 CookieTreeNode::DetailedInfo info = node->GetDetailedInfo(); |
| 357 for (int i = node->child_count(); i > 0; --i) |
| 358 RecursivelyFindSiteAndDelete(node->GetChild(i - 1)); |
| 359 |
| 360 if (info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE && |
| 361 info.cookie && |
| 362 domain_.DomainIs(info.cookie->Domain().c_str())) |
| 363 cookies_tree_model_->DeleteCookieNode(node); |
| 364 } |
| 365 |
| 366 private: |
| 367 friend class base::RefCountedThreadSafe<SiteDataDeleteHelper>; |
| 368 |
| 369 virtual ~SiteDataDeleteHelper() {} |
| 370 |
| 371 Profile* profile_; |
| 372 |
| 373 // The domain we want to delete data for. |
| 374 GURL domain_; |
| 375 |
| 376 // Keeps track of when we're ready to close batch processing. |
| 377 bool ending_batch_processing_; |
| 378 |
| 379 scoped_ptr<CookiesTreeModel> cookies_tree_model_; |
| 380 |
| 381 DISALLOW_COPY_AND_ASSIGN(SiteDataDeleteHelper); |
| 382 }; |
| 383 |
288 class StorageInfoFetcher : | 384 class StorageInfoFetcher : |
289 public base::RefCountedThreadSafe<StorageInfoFetcher> { | 385 public base::RefCountedThreadSafe<StorageInfoFetcher> { |
290 public: | 386 public: |
291 StorageInfoFetcher(storage::QuotaManager* quota_manager, | 387 StorageInfoFetcher(storage::QuotaManager* quota_manager, |
292 const JavaRef<jobject>& java_callback) | 388 const JavaRef<jobject>& java_callback) |
293 : env_(base::android::AttachCurrentThread()), | 389 : env_(base::android::AttachCurrentThread()), |
294 quota_manager_(quota_manager), | 390 quota_manager_(quota_manager), |
295 java_callback_(java_callback) { | 391 java_callback_(java_callback) { |
296 } | 392 } |
297 | 393 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 std::string host = ConvertJavaStringToUTF8(env, jhost); | 589 std::string host = ConvertJavaStringToUTF8(env, jhost); |
494 scoped_refptr<StorageDataDeleter> storage_data_deleter(new StorageDataDeleter( | 590 scoped_refptr<StorageDataDeleter> storage_data_deleter(new StorageDataDeleter( |
495 content::BrowserContext::GetDefaultStoragePartition( | 591 content::BrowserContext::GetDefaultStoragePartition( |
496 profile)->GetQuotaManager(), | 592 profile)->GetQuotaManager(), |
497 host, | 593 host, |
498 static_cast<storage::StorageType>(type), | 594 static_cast<storage::StorageType>(type), |
499 ScopedJavaLocalRef<jobject>(env, java_callback))); | 595 ScopedJavaLocalRef<jobject>(env, java_callback))); |
500 storage_data_deleter->Run(); | 596 storage_data_deleter->Run(); |
501 } | 597 } |
502 | 598 |
| 599 static void ClearCookieData(JNIEnv* env, jclass clazz, jstring jorigin) { |
| 600 Profile* profile = ProfileManager::GetActiveUserProfile(); |
| 601 GURL url(ConvertJavaStringToUTF8(env, jorigin)); |
| 602 scoped_refptr<SiteDataDeleteHelper> site_data_deleter( |
| 603 new SiteDataDeleteHelper(profile, url)); |
| 604 site_data_deleter->Run(); |
| 605 } |
| 606 |
503 // Register native methods | 607 // Register native methods |
504 bool RegisterWebsitePreferenceBridge(JNIEnv* env) { | 608 bool RegisterWebsitePreferenceBridge(JNIEnv* env) { |
505 return RegisterNativesImpl(env); | 609 return RegisterNativesImpl(env); |
506 } | 610 } |
OLD | NEW |