| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 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/browsing_data/browsing_data_remover_impl.h" |    5 #include "chrome/browser/browsing_data/browsing_data_remover_impl.h" | 
|    6  |    6  | 
|    7 #include <map> |    7 #include <map> | 
|    8 #include <set> |    8 #include <set> | 
|    9 #include <string> |    9 #include <string> | 
|   10 #include <utility> |   10 #include <utility> | 
|   11  |   11  | 
|   12 #include "base/bind.h" |   12 #include "base/bind.h" | 
|   13 #include "base/bind_helpers.h" |   13 #include "base/bind_helpers.h" | 
|   14 #include "base/callback.h" |   14 #include "base/callback.h" | 
|   15 #include "base/logging.h" |   15 #include "base/logging.h" | 
|   16 #include "base/memory/ptr_util.h" |   16 #include "base/memory/ptr_util.h" | 
|   17 #include "base/metrics/histogram_macros.h" |   17 #include "base/metrics/histogram_macros.h" | 
 |   18 #include "base/stl_util.h" | 
|   18 #include "chrome/browser/browsing_data/browsing_data_helper.h" |   19 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 
|   19 #include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" |   20 #include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" | 
|   20 #include "chrome/browser/profiles/profile.h" |   21 #include "chrome/browser/profiles/profile.h" | 
|   21 #include "chrome/common/pref_names.h" |   22 #include "chrome/common/pref_names.h" | 
|   22 #include "components/browsing_data/content/storage_partition_http_cache_data_rem
     over.h" |   23 #include "components/browsing_data/content/storage_partition_http_cache_data_rem
     over.h" | 
|   23 #include "components/prefs/pref_service.h" |   24 #include "components/prefs/pref_service.h" | 
|   24 #include "components/web_cache/browser/web_cache_manager.h" |   25 #include "components/web_cache/browser/web_cache_manager.h" | 
|   25 #include "content/public/browser/browser_context.h" |   26 #include "content/public/browser/browser_context.h" | 
|   26 #include "content/public/browser/browser_thread.h" |   27 #include "content/public/browser/browser_thread.h" | 
|   27 #include "content/public/browser/browsing_data_filter_builder.h" |   28 #include "content/public/browser/browsing_data_filter_builder.h" | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|   39 #include "net/ssl/channel_id_store.h" |   40 #include "net/ssl/channel_id_store.h" | 
|   40 #include "net/url_request/url_request_context.h" |   41 #include "net/url_request/url_request_context.h" | 
|   41 #include "net/url_request/url_request_context_getter.h" |   42 #include "net/url_request/url_request_context_getter.h" | 
|   42 #include "ppapi/features/features.h" |   43 #include "ppapi/features/features.h" | 
|   43 #include "storage/browser/quota/special_storage_policy.h" |   44 #include "storage/browser/quota/special_storage_policy.h" | 
|   44 #include "url/origin.h" |   45 #include "url/origin.h" | 
|   45  |   46  | 
|   46 using base::UserMetricsAction; |   47 using base::UserMetricsAction; | 
|   47 using content::BrowserContext; |   48 using content::BrowserContext; | 
|   48 using content::BrowserThread; |   49 using content::BrowserThread; | 
 |   50 using content::BrowsingDataType; | 
|   49 using content::BrowsingDataFilterBuilder; |   51 using content::BrowsingDataFilterBuilder; | 
|   50 using content::DOMStorageContext; |   52 using content::DOMStorageContext; | 
|   51  |   53  | 
|   52 namespace { |   54 namespace { | 
|   53  |   55  | 
|   54 template <typename T> |   56 template <typename T> | 
|   55 void IgnoreArgumentHelper(const base::Closure& callback, T unused_argument) { |   57 void IgnoreArgumentHelper(const base::Closure& callback, T unused_argument) { | 
|   56   callback.Run(); |   58   callback.Run(); | 
|   57 } |   59 } | 
|   58  |   60  | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  110     const base::Closure& callback) { |  112     const base::Closure& callback) { | 
|  111   DCHECK_CURRENTLY_ON(BrowserThread::IO); |  113   DCHECK_CURRENTLY_ON(BrowserThread::IO); | 
|  112   net::ChannelIDService* channel_id_service = |  114   net::ChannelIDService* channel_id_service = | 
|  113       rq_context->GetURLRequestContext()->channel_id_service(); |  115       rq_context->GetURLRequestContext()->channel_id_service(); | 
|  114   channel_id_service->GetChannelIDStore()->DeleteForDomainsCreatedBetween( |  116   channel_id_service->GetChannelIDStore()->DeleteForDomainsCreatedBetween( | 
|  115       domain_predicate, delete_begin, delete_end, |  117       domain_predicate, delete_begin, delete_end, | 
|  116       base::Bind(&OnClearedChannelIDsOnIOThread, |  118       base::Bind(&OnClearedChannelIDsOnIOThread, | 
|  117                  base::RetainedRef(std::move(rq_context)), callback)); |  119                  base::RetainedRef(std::move(rq_context)), callback)); | 
|  118 } |  120 } | 
|  119  |  121  | 
 |  122 bool IsFilterable(const std::set<const BrowsingDataType*>& remove_mask) { | 
 |  123   for (const BrowsingDataType* data_type : remove_mask) { | 
 |  124     DCHECK(data_type); | 
 |  125     if (!data_type->filterable) | 
 |  126       return false; | 
 |  127   } | 
 |  128  | 
 |  129   return true; | 
 |  130 } | 
 |  131  | 
|  120 }  // namespace |  132 }  // namespace | 
|  121  |  133  | 
|  122 BrowsingDataRemoverImpl::CompletionInhibitor* |  134 BrowsingDataRemoverImpl::CompletionInhibitor* | 
|  123     BrowsingDataRemoverImpl::completion_inhibitor_ = nullptr; |  135     BrowsingDataRemoverImpl::completion_inhibitor_ = nullptr; | 
|  124  |  136  | 
|  125 BrowsingDataRemoverImpl::SubTask::SubTask(const base::Closure& forward_callback) |  137 BrowsingDataRemoverImpl::SubTask::SubTask(const base::Closure& forward_callback) | 
|  126     : is_pending_(false), |  138     : is_pending_(false), | 
|  127       forward_callback_(forward_callback), |  139       forward_callback_(forward_callback), | 
|  128       weak_ptr_factory_(this) { |  140       weak_ptr_factory_(this) { | 
|  129   DCHECK(!forward_callback_.is_null()); |  141   DCHECK(!forward_callback_.is_null()); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  145 void BrowsingDataRemoverImpl::SubTask::CompletionCallback() { |  157 void BrowsingDataRemoverImpl::SubTask::CompletionCallback() { | 
|  146   DCHECK_CURRENTLY_ON(BrowserThread::UI); |  158   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
|  147   DCHECK(is_pending_); |  159   DCHECK(is_pending_); | 
|  148   is_pending_ = false; |  160   is_pending_ = false; | 
|  149   forward_callback_.Run(); |  161   forward_callback_.Run(); | 
|  150 } |  162 } | 
|  151  |  163  | 
|  152 BrowsingDataRemoverImpl::BrowsingDataRemoverImpl( |  164 BrowsingDataRemoverImpl::BrowsingDataRemoverImpl( | 
|  153     content::BrowserContext* browser_context) |  165     content::BrowserContext* browser_context) | 
|  154     : browser_context_(browser_context), |  166     : browser_context_(browser_context), | 
|  155       remove_mask_(-1), |  | 
|  156       origin_type_mask_(-1), |  167       origin_type_mask_(-1), | 
|  157       is_removing_(false), |  168       is_removing_(false), | 
|  158       sub_task_forward_callback_( |  169       sub_task_forward_callback_( | 
|  159           base::Bind(&BrowsingDataRemoverImpl::NotifyIfDone, |  170           base::Bind(&BrowsingDataRemoverImpl::NotifyIfDone, | 
|  160                      base::Unretained(this))), |  171                      base::Unretained(this))), | 
|  161       synchronous_clear_operations_(sub_task_forward_callback_), |  172       synchronous_clear_operations_(sub_task_forward_callback_), | 
|  162       clear_embedder_data_(sub_task_forward_callback_), |  173       clear_embedder_data_(sub_task_forward_callback_), | 
|  163       clear_cache_(sub_task_forward_callback_), |  174       clear_cache_(sub_task_forward_callback_), | 
|  164       clear_channel_ids_(sub_task_forward_callback_), |  175       clear_channel_ids_(sub_task_forward_callback_), | 
|  165       clear_http_auth_cache_(sub_task_forward_callback_), |  176       clear_http_auth_cache_(sub_task_forward_callback_), | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  197 void BrowsingDataRemoverImpl::SetEmbedderDelegate( |  208 void BrowsingDataRemoverImpl::SetEmbedderDelegate( | 
|  198     std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) { |  209     std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) { | 
|  199   embedder_delegate_ = std::move(embedder_delegate); |  210   embedder_delegate_ = std::move(embedder_delegate); | 
|  200 } |  211 } | 
|  201  |  212  | 
|  202 BrowsingDataRemoverDelegate* |  213 BrowsingDataRemoverDelegate* | 
|  203 BrowsingDataRemoverImpl::GetEmbedderDelegate() const { |  214 BrowsingDataRemoverImpl::GetEmbedderDelegate() const { | 
|  204   return embedder_delegate_.get(); |  215   return embedder_delegate_.get(); | 
|  205 } |  216 } | 
|  206  |  217  | 
|  207 void BrowsingDataRemoverImpl::Remove(const base::Time& delete_begin, |  218 void BrowsingDataRemoverImpl::Remove( | 
|  208                                  const base::Time& delete_end, |  219     const base::Time& delete_begin, | 
|  209                                  int remove_mask, |  220     const base::Time& delete_end, | 
|  210                                  int origin_type_mask) { |  221     const std::set<const BrowsingDataType*>& remove_mask, | 
 |  222     int origin_type_mask) { | 
|  211   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |  223   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 
|  212                  std::unique_ptr<BrowsingDataFilterBuilder>(), nullptr); |  224                  std::unique_ptr<BrowsingDataFilterBuilder>(), nullptr); | 
|  213 } |  225 } | 
|  214  |  226  | 
|  215 void BrowsingDataRemoverImpl::RemoveAndReply( |  227 void BrowsingDataRemoverImpl::RemoveAndReply( | 
|  216     const base::Time& delete_begin, |  228     const base::Time& delete_begin, | 
|  217     const base::Time& delete_end, |  229     const base::Time& delete_end, | 
|  218     int remove_mask, |  230     const std::set<const BrowsingDataType*>& remove_mask, | 
|  219     int origin_type_mask, |  231     int origin_type_mask, | 
|  220     Observer* observer) { |  232     Observer* observer) { | 
|  221   DCHECK(observer); |  233   DCHECK(observer); | 
|  222   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |  234   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 
|  223                  std::unique_ptr<BrowsingDataFilterBuilder>(), observer); |  235                  std::unique_ptr<BrowsingDataFilterBuilder>(), observer); | 
|  224 } |  236 } | 
|  225  |  237  | 
|  226 void BrowsingDataRemoverImpl::RemoveWithFilter( |  238 void BrowsingDataRemoverImpl::RemoveWithFilter( | 
|  227     const base::Time& delete_begin, |  239     const base::Time& delete_begin, | 
|  228     const base::Time& delete_end, |  240     const base::Time& delete_end, | 
|  229     int remove_mask, |  241     const std::set<const BrowsingDataType*>& remove_mask, | 
|  230     int origin_type_mask, |  242     int origin_type_mask, | 
|  231     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { |  243     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { | 
|  232   DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |  244   DCHECK(IsFilterable(remove_mask)); | 
|  233   DCHECK(filter_builder); |  245   DCHECK(filter_builder); | 
|  234   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |  246   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 
|  235                  std::move(filter_builder), nullptr); |  247                  std::move(filter_builder), nullptr); | 
|  236 } |  248 } | 
|  237  |  249  | 
|  238 void BrowsingDataRemoverImpl::RemoveWithFilterAndReply( |  250 void BrowsingDataRemoverImpl::RemoveWithFilterAndReply( | 
|  239     const base::Time& delete_begin, |  251     const base::Time& delete_begin, | 
|  240     const base::Time& delete_end, |  252     const base::Time& delete_end, | 
|  241     int remove_mask, |  253     const std::set<const BrowsingDataType*>& remove_mask, | 
|  242     int origin_type_mask, |  254     int origin_type_mask, | 
|  243     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |  255     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 
|  244     Observer* observer) { |  256     Observer* observer) { | 
|  245   DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |  257   DCHECK(IsFilterable(remove_mask)); | 
|  246   DCHECK(filter_builder); |  258   DCHECK(filter_builder); | 
|  247   DCHECK(observer); |  259   DCHECK(observer); | 
|  248   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |  260   RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 
|  249                  std::move(filter_builder), observer); |  261                  std::move(filter_builder), observer); | 
|  250 } |  262 } | 
|  251  |  263  | 
|  252 void BrowsingDataRemoverImpl::RemoveInternal( |  264 void BrowsingDataRemoverImpl::RemoveInternal( | 
|  253     const base::Time& delete_begin, |  265     const base::Time& delete_begin, | 
|  254     const base::Time& delete_end, |  266     const base::Time& delete_end, | 
|  255     int remove_mask, |  267     const std::set<const BrowsingDataType*>& remove_mask, | 
|  256     int origin_type_mask, |  268     int origin_type_mask, | 
|  257     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |  269     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 
|  258     Observer* observer) { |  270     Observer* observer) { | 
|  259   DCHECK(!observer || observer_list_.HasObserver(observer)) |  271   DCHECK(!observer || observer_list_.HasObserver(observer)) | 
|  260       << "Every observer must register itself (by calling AddObserver()) " |  272       << "Every observer must register itself (by calling AddObserver()) " | 
|  261       << "before observing a removal task."; |  273       << "before observing a removal task."; | 
|  262  |  274  | 
|  263   // Remove() and RemoveAndReply() pass a null pointer to indicate no filter. |  275   // Remove() and RemoveAndReply() pass a null pointer to indicate no filter. | 
|  264   // No filter is equivalent to one that |IsEmptyBlacklist()|. |  276   // No filter is equivalent to one that |IsEmptyBlacklist()|. | 
|  265   if (!filter_builder) { |  277   if (!filter_builder) { | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|  292   RemoveImpl(removal_task.delete_begin, |  304   RemoveImpl(removal_task.delete_begin, | 
|  293              removal_task.delete_end, |  305              removal_task.delete_end, | 
|  294              removal_task.remove_mask, |  306              removal_task.remove_mask, | 
|  295              *removal_task.filter_builder, |  307              *removal_task.filter_builder, | 
|  296              removal_task.origin_type_mask); |  308              removal_task.origin_type_mask); | 
|  297 } |  309 } | 
|  298  |  310  | 
|  299 void BrowsingDataRemoverImpl::RemoveImpl( |  311 void BrowsingDataRemoverImpl::RemoveImpl( | 
|  300     const base::Time& delete_begin, |  312     const base::Time& delete_begin, | 
|  301     const base::Time& delete_end, |  313     const base::Time& delete_end, | 
|  302     int remove_mask, |  314     const std::set<const BrowsingDataType*>& remove_mask, | 
|  303     const BrowsingDataFilterBuilder& filter_builder, |  315     const BrowsingDataFilterBuilder& filter_builder, | 
|  304     int origin_type_mask) { |  316     int origin_type_mask) { | 
|  305   // =============== README before adding more storage backends =============== |  317   // =============== README before adding more storage backends =============== | 
|  306   // |  318   // | 
|  307   // If you're adding a data storage backend that is included among |  319   // If you're adding a data storage backend that is included among | 
|  308   // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: |  320   // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: | 
|  309   // 1. Support one of the filters generated by |filter_builder|. |  321   // 1. Support one of the filters generated by |filter_builder|. | 
|  310   // 2. Add a comment explaining why is it acceptable in your case to delete all |  322   // 2. Add a comment explaining why is it acceptable in your case to delete all | 
|  311   //    data without filtering URLs / origins / domains. |  323   //    data without filtering URLs / origins / domains. | 
|  312   // 3. Do not support partial deletion, i.e. only delete your data if |  324   // 3. Do not support partial deletion, i.e. only delete your data if | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  338   // If this fires, we added a new BrowsingDataHelper::OriginTypeMask without |  350   // If this fires, we added a new BrowsingDataHelper::OriginTypeMask without | 
|  339   // updating the user metrics above. |  351   // updating the user metrics above. | 
|  340   static_assert( |  352   static_assert( | 
|  341       BrowsingDataHelper::ALL == (BrowsingDataHelper::UNPROTECTED_WEB | |  353       BrowsingDataHelper::ALL == (BrowsingDataHelper::UNPROTECTED_WEB | | 
|  342                                   BrowsingDataHelper::PROTECTED_WEB | |  354                                   BrowsingDataHelper::PROTECTED_WEB | | 
|  343                                   BrowsingDataHelper::EXTENSION), |  355                                   BrowsingDataHelper::EXTENSION), | 
|  344       "OriginTypeMask has been updated without updating user metrics"); |  356       "OriginTypeMask has been updated without updating user metrics"); | 
|  345  |  357  | 
|  346   // Record the combined deletion of cookies and cache. |  358   // Record the combined deletion of cookies and cache. | 
|  347   CookieOrCacheDeletionChoice choice = NEITHER_COOKIES_NOR_CACHE; |  359   CookieOrCacheDeletionChoice choice = NEITHER_COOKIES_NOR_CACHE; | 
|  348   if (remove_mask & REMOVE_COOKIES && |  360   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies) && | 
|  349       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |  361       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 
|  350     choice = remove_mask & REMOVE_CACHE ? BOTH_COOKIES_AND_CACHE |  362     choice = base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCache) | 
|  351                                         : ONLY_COOKIES; |  363                  ? BOTH_COOKIES_AND_CACHE | 
|  352   } else if (remove_mask & REMOVE_CACHE) { |  364                  : ONLY_COOKIES; | 
 |  365   } else if (base::ContainsValue(remove_mask, | 
 |  366                                  &content::kBrowsingDataTypeCache)) { | 
|  353     choice = ONLY_CACHE; |  367     choice = ONLY_CACHE; | 
|  354   } |  368   } | 
|  355  |  369  | 
|  356   UMA_HISTOGRAM_ENUMERATION( |  370   UMA_HISTOGRAM_ENUMERATION( | 
|  357       "History.ClearBrowsingData.UserDeletedCookieOrCache", |  371       "History.ClearBrowsingData.UserDeletedCookieOrCache", | 
|  358       choice, MAX_CHOICE_VALUE); |  372       choice, MAX_CHOICE_VALUE); | 
|  359  |  373  | 
|  360   // Managed devices and supervised users can have restrictions on history |  374   // Managed devices and supervised users can have restrictions on history | 
|  361   // deletion. |  375   // deletion. | 
|  362   // TODO(crbug.com/668114): This should be provided via ContentBrowserClient |  376   // TODO(crbug.com/668114): This should be provided via ContentBrowserClient | 
|  363   // once BrowsingDataRemoverImpl moves to content. |  377   // once BrowsingDataRemoverImpl moves to content. | 
|  364   PrefService* prefs = |  378   PrefService* prefs = | 
|  365       Profile::FromBrowserContext(browser_context_)->GetPrefs(); |  379       Profile::FromBrowserContext(browser_context_)->GetPrefs(); | 
|  366   bool may_delete_history = |  380   bool may_delete_history = | 
|  367       prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); |  381       prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); | 
|  368  |  382  | 
|  369   ////////////////////////////////////////////////////////////////////////////// |  383   ////////////////////////////////////////////////////////////////////////////// | 
|  370   // INITIALIZATION |  384   // INITIALIZATION | 
|  371   base::Callback<bool(const GURL& url)> filter = |  385   base::Callback<bool(const GURL& url)> filter = | 
|  372       filter_builder.BuildGeneralFilter(); |  386       filter_builder.BuildGeneralFilter(); | 
|  373  |  387  | 
|  374   ////////////////////////////////////////////////////////////////////////////// |  388   ////////////////////////////////////////////////////////////////////////////// | 
|  375   // REMOVE_DOWNLOADS |  389   // kBrowsingDataTypeDownloads | 
|  376   if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { |  390   if ((base::ContainsValue(remove_mask, | 
 |  391                            &content::kBrowsingDataTypeDownloads)) && | 
 |  392       may_delete_history) { | 
|  377     content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); |  393     content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); | 
|  378     content::DownloadManager* download_manager = |  394     content::DownloadManager* download_manager = | 
|  379         BrowserContext::GetDownloadManager(browser_context_); |  395         BrowserContext::GetDownloadManager(browser_context_); | 
|  380     download_manager->RemoveDownloadsByURLAndTime(filter, |  396     download_manager->RemoveDownloadsByURLAndTime(filter, | 
|  381                                                   delete_begin_, delete_end_); |  397                                                   delete_begin_, delete_end_); | 
|  382   } |  398   } | 
|  383  |  399  | 
|  384   ////////////////////////////////////////////////////////////////////////////// |  400   ////////////////////////////////////////////////////////////////////////////// | 
|  385   // REMOVE_CHANNEL_IDS |  401   // kBrowsingDataTypeChannelIDs | 
|  386   // Channel IDs are not separated for protected and unprotected web |  402   // Channel IDs are not separated for protected and unprotected web | 
|  387   // origins. We check the origin_type_mask_ to prevent unintended deletion. |  403   // origins. We check the origin_type_mask_ to prevent unintended deletion. | 
|  388   if (remove_mask & REMOVE_CHANNEL_IDS && |  404   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeChannelIDs) && | 
|  389       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |  405       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 
|  390     content::RecordAction( |  406     content::RecordAction( | 
|  391         UserMetricsAction("ClearBrowsingData_ChannelIDs")); |  407         UserMetricsAction("ClearBrowsingData_ChannelIDs")); | 
|  392     // Since we are running on the UI thread don't call GetURLRequestContext(). |  408     // Since we are running on the UI thread don't call GetURLRequestContext(). | 
|  393     scoped_refptr<net::URLRequestContextGetter> rq_context = |  409     scoped_refptr<net::URLRequestContextGetter> rq_context = | 
|  394         content::BrowserContext::GetDefaultStoragePartition(browser_context_)-> |  410         content::BrowserContext::GetDefaultStoragePartition(browser_context_)-> | 
|  395           GetURLRequestContext(); |  411           GetURLRequestContext(); | 
|  396     clear_channel_ids_.Start(); |  412     clear_channel_ids_.Start(); | 
|  397     BrowserThread::PostTask( |  413     BrowserThread::PostTask( | 
|  398         BrowserThread::IO, FROM_HERE, |  414         BrowserThread::IO, FROM_HERE, | 
|  399         base::Bind(&ClearChannelIDsOnIOThread, |  415         base::Bind(&ClearChannelIDsOnIOThread, | 
|  400                    filter_builder.BuildChannelIDFilter(), |  416                    filter_builder.BuildChannelIDFilter(), | 
|  401                    delete_begin_, delete_end_, std::move(rq_context), |  417                    delete_begin_, delete_end_, std::move(rq_context), | 
|  402                    clear_channel_ids_.GetCompletionCallback())); |  418                    clear_channel_ids_.GetCompletionCallback())); | 
|  403   } |  419   } | 
|  404  |  420  | 
|  405   ////////////////////////////////////////////////////////////////////////////// |  421   ////////////////////////////////////////////////////////////////////////////// | 
|  406   // STORAGE PARTITION DATA |  422   // STORAGE PARTITION DATA | 
|  407   uint32_t storage_partition_remove_mask = 0; |  423   uint32_t storage_partition_remove_mask = 0; | 
|  408  |  424  | 
|  409   // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, |  425   // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, | 
|  410   // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB |  426   // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB | 
|  411   // don't accidentally remove the cookies that are associated with the |  427   // don't accidentally remove the cookies that are associated with the | 
|  412   // UNPROTECTED_WEB origin. This is necessary because cookies are not separated |  428   // UNPROTECTED_WEB origin. This is necessary because cookies are not separated | 
|  413   // between UNPROTECTED_WEB and PROTECTED_WEB. |  429   // between UNPROTECTED_WEB and PROTECTED_WEB. | 
|  414   if (remove_mask & REMOVE_COOKIES && |  430   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies) && | 
|  415       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |  431       origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 
|  416     storage_partition_remove_mask |= |  432     storage_partition_remove_mask |= | 
|  417         content::StoragePartition::REMOVE_DATA_MASK_COOKIES; |  433         content::StoragePartition::REMOVE_DATA_MASK_COOKIES; | 
|  418   } |  434   } | 
|  419   if (remove_mask & REMOVE_LOCAL_STORAGE) { |  435   if (base::ContainsValue(remove_mask, | 
 |  436                           &content::kBrowsingDataTypeLocalStorage)) { | 
|  420     storage_partition_remove_mask |= |  437     storage_partition_remove_mask |= | 
|  421         content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; |  438         content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; | 
|  422   } |  439   } | 
|  423   if (remove_mask & REMOVE_INDEXEDDB) { |  440   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeIndexedDB)) { | 
|  424     storage_partition_remove_mask |= |  441     storage_partition_remove_mask |= | 
|  425         content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB; |  442         content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB; | 
|  426   } |  443   } | 
|  427   if (remove_mask & REMOVE_WEBSQL) { |  444   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeWebSQL)) { | 
|  428     storage_partition_remove_mask |= |  445     storage_partition_remove_mask |= | 
|  429         content::StoragePartition::REMOVE_DATA_MASK_WEBSQL; |  446         content::StoragePartition::REMOVE_DATA_MASK_WEBSQL; | 
|  430   } |  447   } | 
|  431   if (remove_mask & REMOVE_APPCACHE) { |  448   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeAppCache)) { | 
|  432     storage_partition_remove_mask |= |  449     storage_partition_remove_mask |= | 
|  433         content::StoragePartition::REMOVE_DATA_MASK_APPCACHE; |  450         content::StoragePartition::REMOVE_DATA_MASK_APPCACHE; | 
|  434   } |  451   } | 
|  435   if (remove_mask & REMOVE_SERVICE_WORKERS) { |  452   if (base::ContainsValue(remove_mask, | 
 |  453                           &content::kBrowsingDataTypeServiceWorkers)) { | 
|  436     storage_partition_remove_mask |= |  454     storage_partition_remove_mask |= | 
|  437         content::StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS; |  455         content::StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS; | 
|  438   } |  456   } | 
|  439   if (remove_mask & REMOVE_CACHE_STORAGE) { |  457   if (base::ContainsValue(remove_mask, | 
 |  458                           &content::kBrowsingDataTypeCacheStorage)) { | 
|  440     storage_partition_remove_mask |= |  459     storage_partition_remove_mask |= | 
|  441         content::StoragePartition::REMOVE_DATA_MASK_CACHE_STORAGE; |  460         content::StoragePartition::REMOVE_DATA_MASK_CACHE_STORAGE; | 
|  442   } |  461   } | 
|  443   if (remove_mask & REMOVE_FILE_SYSTEMS) { |  462   if (base::ContainsValue(remove_mask, | 
 |  463                           &content::kBrowsingDataTypeFileSystems)) { | 
|  444     storage_partition_remove_mask |= |  464     storage_partition_remove_mask |= | 
|  445         content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; |  465         content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; | 
|  446   } |  466   } | 
|  447  |  467  | 
|  448   // Content Decryption Modules used by Encrypted Media store licenses in a |  468   // Content Decryption Modules used by Encrypted Media store licenses in a | 
|  449   // private filesystem. These are different than content licenses used by |  469   // private filesystem. These are different than content licenses used by | 
|  450   // Flash (which are deleted father down in this method). |  470   // Flash (which are deleted father down in this method). | 
|  451   if (remove_mask & REMOVE_MEDIA_LICENSES) { |  471   if (base::ContainsValue(remove_mask, | 
 |  472                           &content::kBrowsingDataTypeMediaLicenses)) { | 
|  452     storage_partition_remove_mask |= |  473     storage_partition_remove_mask |= | 
|  453         content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; |  474         content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; | 
|  454   } |  475   } | 
|  455  |  476  | 
|  456   if (storage_partition_remove_mask) { |  477   if (storage_partition_remove_mask) { | 
|  457     clear_storage_partition_data_.Start(); |  478     clear_storage_partition_data_.Start(); | 
|  458  |  479  | 
|  459     content::StoragePartition* storage_partition; |  480     content::StoragePartition* storage_partition; | 
|  460     if (storage_partition_for_testing_) { |  481     if (storage_partition_for_testing_) { | 
|  461       storage_partition = storage_partition_for_testing_; |  482       storage_partition = storage_partition_for_testing_; | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
|  486     } |  507     } | 
|  487  |  508  | 
|  488     storage_partition->ClearData( |  509     storage_partition->ClearData( | 
|  489         storage_partition_remove_mask, quota_storage_remove_mask, |  510         storage_partition_remove_mask, quota_storage_remove_mask, | 
|  490         base::Bind(&DoesOriginMatchMaskAndUrls, origin_type_mask_, filter), |  511         base::Bind(&DoesOriginMatchMaskAndUrls, origin_type_mask_, filter), | 
|  491         cookie_matcher, delete_begin_, delete_end_, |  512         cookie_matcher, delete_begin_, delete_end_, | 
|  492         clear_storage_partition_data_.GetCompletionCallback()); |  513         clear_storage_partition_data_.GetCompletionCallback()); | 
|  493   } |  514   } | 
|  494  |  515  | 
|  495   ////////////////////////////////////////////////////////////////////////////// |  516   ////////////////////////////////////////////////////////////////////////////// | 
|  496   // CACHE |  517   // kBrowsingDataTypeCache | 
|  497   if (remove_mask & REMOVE_CACHE) { |  518   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCache)) { | 
|  498     // Tell the renderers to clear their cache. |  519     // Tell the renderers to clear their cache. | 
|  499     web_cache::WebCacheManager::GetInstance()->ClearCache(); |  520     web_cache::WebCacheManager::GetInstance()->ClearCache(); | 
|  500  |  521  | 
|  501     content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); |  522     content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); | 
|  502  |  523  | 
|  503     clear_cache_.Start(); |  524     clear_cache_.Start(); | 
|  504     // StoragePartitionHttpCacheDataRemover deletes itself when it is done. |  525     // StoragePartitionHttpCacheDataRemover deletes itself when it is done. | 
|  505     if (filter_builder.IsEmptyBlacklist()) { |  526     if (filter_builder.IsEmptyBlacklist()) { | 
|  506       browsing_data::StoragePartitionHttpCacheDataRemover::CreateForRange( |  527       browsing_data::StoragePartitionHttpCacheDataRemover::CreateForRange( | 
|  507           BrowserContext::GetDefaultStoragePartition(browser_context_), |  528           BrowserContext::GetDefaultStoragePartition(browser_context_), | 
|  508           delete_begin_, delete_end_) |  529           delete_begin_, delete_end_) | 
|  509           ->Remove(clear_cache_.GetCompletionCallback()); |  530           ->Remove(clear_cache_.GetCompletionCallback()); | 
|  510     } else { |  531     } else { | 
|  511       browsing_data::StoragePartitionHttpCacheDataRemover:: |  532       browsing_data::StoragePartitionHttpCacheDataRemover:: | 
|  512           CreateForURLsAndRange( |  533           CreateForURLsAndRange( | 
|  513               BrowserContext::GetDefaultStoragePartition(browser_context_), |  534               BrowserContext::GetDefaultStoragePartition(browser_context_), | 
|  514               filter, delete_begin_, delete_end_) |  535               filter, delete_begin_, delete_end_) | 
|  515               ->Remove(clear_cache_.GetCompletionCallback()); |  536               ->Remove(clear_cache_.GetCompletionCallback()); | 
|  516     } |  537     } | 
|  517  |  538  | 
|  518     // Tell the shader disk cache to clear. |  539     // Tell the shader disk cache to clear. | 
|  519     content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache")); |  540     content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache")); | 
|  520     storage_partition_remove_mask |= |  541     storage_partition_remove_mask |= | 
|  521         content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE; |  542         content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE; | 
|  522   } |  543   } | 
|  523  |  544  | 
|  524   ////////////////////////////////////////////////////////////////////////////// |  545   ////////////////////////////////////////////////////////////////////////////// | 
|  525   // Auth cache. |  546   // Auth cache. | 
|  526   if (remove_mask & REMOVE_COOKIES) { |  547   if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies)) { | 
|  527     scoped_refptr<net::URLRequestContextGetter> request_context = |  548     scoped_refptr<net::URLRequestContextGetter> request_context = | 
|  528         BrowserContext::GetDefaultStoragePartition(browser_context_) |  549         BrowserContext::GetDefaultStoragePartition(browser_context_) | 
|  529             ->GetURLRequestContext(); |  550             ->GetURLRequestContext(); | 
|  530     clear_http_auth_cache_.Start(); |  551     clear_http_auth_cache_.Start(); | 
|  531     BrowserThread::PostTaskAndReply( |  552     BrowserThread::PostTaskAndReply( | 
|  532         BrowserThread::IO, FROM_HERE, |  553         BrowserThread::IO, FROM_HERE, | 
|  533         base::Bind(&ClearHttpAuthCacheOnIOThread, std::move(request_context), |  554         base::Bind(&ClearHttpAuthCacheOnIOThread, std::move(request_context), | 
|  534                    delete_begin_), |  555                    delete_begin_), | 
|  535         clear_http_auth_cache_.GetCompletionCallback()); |  556         clear_http_auth_cache_.GetCompletionCallback()); | 
|  536   } |  557   } | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
|  566 } |  587 } | 
|  567  |  588  | 
|  568 const base::Time& BrowsingDataRemoverImpl::GetLastUsedBeginTime() { |  589 const base::Time& BrowsingDataRemoverImpl::GetLastUsedBeginTime() { | 
|  569   return delete_begin_; |  590   return delete_begin_; | 
|  570 } |  591 } | 
|  571  |  592  | 
|  572 const base::Time& BrowsingDataRemoverImpl::GetLastUsedEndTime() { |  593 const base::Time& BrowsingDataRemoverImpl::GetLastUsedEndTime() { | 
|  573   return delete_end_; |  594   return delete_end_; | 
|  574 } |  595 } | 
|  575  |  596  | 
|  576 int BrowsingDataRemoverImpl::GetLastUsedRemovalMask() { |  597 const std::set<const BrowsingDataType*>& | 
 |  598 BrowsingDataRemoverImpl::GetLastUsedRemovalMask() { | 
|  577   return remove_mask_; |  599   return remove_mask_; | 
|  578 } |  600 } | 
|  579  |  601  | 
|  580 int BrowsingDataRemoverImpl::GetLastUsedOriginTypeMask() { |  602 int BrowsingDataRemoverImpl::GetLastUsedOriginTypeMask() { | 
|  581   return origin_type_mask_; |  603   return origin_type_mask_; | 
|  582 } |  604 } | 
|  583  |  605  | 
|  584 BrowsingDataRemoverImpl::RemovalTask::RemovalTask( |  606 BrowsingDataRemoverImpl::RemovalTask::RemovalTask( | 
|  585     const base::Time& delete_begin, |  607     const base::Time& delete_begin, | 
|  586     const base::Time& delete_end, |  608     const base::Time& delete_end, | 
|  587     int remove_mask, |  609     const std::set<const BrowsingDataType*>& remove_mask, | 
|  588     int origin_type_mask, |  610     int origin_type_mask, | 
|  589     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |  611     std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 
|  590     Observer* observer) |  612     Observer* observer) | 
|  591     : delete_begin(delete_begin), |  613     : delete_begin(delete_begin), | 
|  592       delete_end(delete_end), |  614       delete_end(delete_end), | 
|  593       remove_mask(remove_mask), |  615       remove_mask(remove_mask), | 
|  594       origin_type_mask(origin_type_mask), |  616       origin_type_mask(origin_type_mask), | 
|  595       filter_builder(std::move(filter_builder)), |  617       filter_builder(std::move(filter_builder)), | 
|  596       observer(observer) {} |  618       observer(observer) {} | 
|  597  |  619  | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  653  |  675  | 
|  654   if (completion_inhibitor_) { |  676   if (completion_inhibitor_) { | 
|  655     completion_inhibitor_->OnBrowsingDataRemoverWouldComplete( |  677     completion_inhibitor_->OnBrowsingDataRemoverWouldComplete( | 
|  656         this, base::Bind(&BrowsingDataRemoverImpl::Notify, |  678         this, base::Bind(&BrowsingDataRemoverImpl::Notify, | 
|  657                          weak_ptr_factory_.GetWeakPtr())); |  679                          weak_ptr_factory_.GetWeakPtr())); | 
|  658     return; |  680     return; | 
|  659   } |  681   } | 
|  660  |  682  | 
|  661   Notify(); |  683   Notify(); | 
|  662 } |  684 } | 
| OLD | NEW |