Chromium Code Reviews| 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())) | |
|
newt (away)
2015/01/26 19:24:22
Is this the correct way to check for cookies that
Finnur
2015/01/28 11:33:48
Thanks Mike.
I convinced myself that the review I
newt (away)
2015/01/28 17:43:59
Ok, I'm convinced. Thanks for walking me through t
| |
| 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 |