15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h"
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h"
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/domain_reliability/service_factory.h"
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h"
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/media/media_device_id_salt.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/predictor.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h"
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/logged_in_predictor_table.h"
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/predictor_database.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/predictor_database_factory.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_service.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service_factory.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service_factory.h"
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service_factory.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h"
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/domain_reliability/service.h"
480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h"
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/pnacl_host.h"
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/password_manager/core/browser/password_store.h"
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/power/origin_power_map.h"
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/power/origin_power_map_factory.h"
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/web_cache/browser/web_cache_manager.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/dom_storage_context.h"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h"
58bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/public/browser/local_storage_usage_info.h"
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_data_remover.h"
61bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/public/browser/session_storage_usage_info.h"
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/ssl_host_state_delegate.h"
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h"
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "net/base/sdch_manager.h"
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_store.h"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/disk_cache/disk_cache.h"
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_cache.h"
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/transport_security_state.h"
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/ssl/channel_id_service.h"
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/ssl/channel_id_store.h"
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h"
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_manager.h"
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/special_storage_policy.h"
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_types.h"
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS)
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h"
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/attestation/attestation_constants.h"
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/dbus/cryptohome_client.h"
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/dbus/dbus_thread_manager.h"
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS)
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/apps/ephemeral_app_service.h"
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/activity_log/activity_log.h"
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_special_storage_policy.h"
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_WEBRTC)
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/media/webrtc_log_list.h"
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/media/webrtc_log_util.h"
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DOMStorageContext;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowsingDataRemover::is_removing_ = false;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1060529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochBrowsingDataRemover::CompletionInhibitor*
1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    BrowsingDataRemover::completion_inhibitor_ = NULL;
1080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Helper to create callback for BrowsingDataRemover::DoesOriginMatchMask.
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Static.
11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool DoesOriginMatchMask(
11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    int origin_set_mask,
11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    const GURL& origin,
11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::SpecialStoragePolicy* special_storage_policy) {
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return BrowsingDataHelper::DoesOriginMatchMask(
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      origin, origin_set_mask, special_storage_policy);
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails()
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(base::Time()),
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(-1),
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(-1) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BrowsingDataRemover::NotificationDetails& details)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(details.removal_begin),
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(details.removal_mask),
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(details.origin_set_mask) {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time removal_begin,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int removal_mask,
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int origin_set_mask)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(removal_begin),
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(removal_mask),
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(origin_set_mask) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::~NotificationDetails() {}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForUnboundedRange(
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile, base::Time(), base::Time::Max());
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForRange(Profile* profile,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time start, base::Time end) {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile, start, end);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForPeriod(Profile* profile,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TimePeriod period) {
1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  switch (period) {
1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_HOUR:
1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastHour"));
1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_DAY:
1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastDay"));
1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_WEEK:
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastWeek"));
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case FOUR_WEEKS:
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastMonth"));
1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case EVERYTHING:
1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_Everything"));
1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::CalculateBeginDeleteTime(period),
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Max());
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         base::Time delete_begin,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         base::Time delete_end)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : profile_(profile),
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_(delete_begin),
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_end_(delete_end),
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      next_cache_state_(STATE_NONE),
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cache_(NULL),
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      main_context_getter_(profile->GetRequestContext()),
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      media_context_getter_(profile->GetMediaRequestContext()),
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      deauthorize_content_licenses_request_id_(0),
19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      waiting_for_clear_autofill_origin_urls_(false),
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_cache_(false),
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      waiting_for_clear_channel_ids_(false),
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_content_licenses_(false),
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_cookies_count_(0),
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      waiting_for_clear_domain_reliability_monitor_(false),
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_form_(false),
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_history_(false),
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_hostname_resolution_cache_(false),
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_keyword_data_(false),
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      waiting_for_clear_logged_in_predictor_(false),
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_nacl_cache_(false),
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_network_predictor_(false),
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_networking_history_(false),
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_platform_keys_(false),
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_plugin_data_(false),
212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      waiting_for_clear_pnacl_cache_(false),
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_storage_partition_data_(false),
214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      waiting_for_clear_webrtc_logs_(false),
216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remove_mask_(0),
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remove_origin_(GURL()),
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      origin_set_mask_(0),
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition_for_testing_(NULL) {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(profile);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // crbug.com/140910: Many places were calling this with base::Time() as
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delete_end, even though they should've used base::Time::Max(). Work around
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it here. New code should use base::Time::Max().
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(delete_end_ != base::Time());
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delete_end_ == base::Time())
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delete_end_ = base::Time::Max();
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::~BrowsingDataRemover() {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(AllDone());
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::set_removing(bool is_removing) {
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(is_removing_ != is_removing);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  is_removing_ = is_removing;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::Remove(int remove_mask, int origin_set_mask) {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveImpl(remove_mask, GURL(), origin_set_mask);
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::RemoveImpl(int remove_mask,
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const GURL& origin,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int origin_set_mask) {
2476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_removing(true);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remove_mask_ = remove_mask;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remove_origin_ = origin;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  origin_set_mask_ = origin_set_mask;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* prefs = profile_->GetPrefs();
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool may_delete_history = prefs->GetBoolean(
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kAllowDeletingBrowserHistory);
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // All the UI entry points into the BrowsingDataRemover should be disabled,
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // but this will fire if something was missed or added.
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(may_delete_history ||
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS)));
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb"));
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::PROTECTED_WEB) {
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb"));
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::EXTENSION) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsExtension"));
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this fires, we added a new BrowsingDataHelper::OriginSetMask without
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // updating the user metrics above.
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  COMPILE_ASSERT(
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataHelper::ALL == (BrowsingDataHelper::UNPROTECTED_WEB |
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  BrowsingDataHelper::PROTECTED_WEB |
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  BrowsingDataHelper::EXTENSION),
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      forgotten_to_add_origin_mask_type);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if ((remove_mask & REMOVE_HISTORY) && may_delete_history) {
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HistoryService* history_service = HistoryServiceFactory::GetForProfile(
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        profile_, Profile::EXPLICIT_ACCESS);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (history_service) {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::set<GURL> restrict_urls;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!remove_origin_.is_empty())
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        restrict_urls.insert(remove_origin_);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(UserMetricsAction("ClearBrowsingData_History"));
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_history_ = true;
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      history_service->ExpireLocalAndRemoteHistoryBetween(
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          restrict_urls, delete_begin_, delete_end_,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnHistoryDeletionDone,
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     base::Unretained(this)),
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          &history_task_tracker_);
29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
29868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // The extension activity contains details of which websites extensions
30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // were active on. It therefore indirectly stores details of websites a
30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // user has visited so best clean from here as well.
30258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      extensions::ActivityLog::GetInstance(profile_)->RemoveURLs(restrict_urls);
30368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // The power consumption history by origin contains details of websites
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // that were visited.
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    power::OriginPowerMap* origin_power_map =
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        power::OriginPowerMapFactory::GetForBrowserContext(profile_);
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (origin_power_map)
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      origin_power_map->ClearOriginMap();
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Need to clear the host cache and accumulated speculative data, as it also
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // reveals some history: we have no mechanism to track when these items were
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // created, so we'll clear them all. Better safe than sorry.
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (g_browser_process->io_thread()) {
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_hostname_resolution_cache_ = true;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              &BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread,
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              base::Unretained(this),
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              g_browser_process->io_thread()));
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (profile_->GetNetworkPredictor()) {
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_network_predictor_ = true;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(&BrowsingDataRemover::ClearNetworkPredictorOnIOThread,
330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     base::Unretained(this),
331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     profile_->GetNetworkPredictor()));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // As part of history deletion we also delete the auto-generated keywords.
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TemplateURLService* keywords_model =
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(profile_);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (keywords_model && !keywords_model->loaded()) {
3384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      template_url_sub_ = keywords_model->RegisterOnLoadedCallback(
3394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnKeywordsLoaded,
3404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                     base::Unretained(this)));
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      keywords_model->Load();
3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      waiting_for_clear_keyword_data_ = true;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (keywords_model) {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      keywords_model->RemoveAutoGeneratedForOriginBetween(remove_origin_,
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_begin_, delete_end_);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The PrerenderManager keeps history of prerendered pages, so clear that.
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // It also may have a prerendered page. If so, the page could be
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // considered to have a small amount of historical information, so delete
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // it, too.
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender::PrerenderManager* prerender_manager =
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        prerender::PrerenderManagerFactory::GetForProfile(profile_);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prerender_manager) {
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prerender_manager->ClearData(
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS |
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If the caller is removing history for all hosts, then clear ancillary
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // historical information.
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (remove_origin_.is_empty()) {
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We also delete the list of recently closed tabs. Since these expire,
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // they can't be more than a day old, so we can simply clear them all.
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TabRestoreService* tab_service =
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          TabRestoreServiceFactory::GetForProfile(profile_);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (tab_service) {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        tab_service->ClearEntries();
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        tab_service->DeleteLastSession();
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_SESSION_SERVICE)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We also delete the last session when we delete the history.
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SessionService* session_service =
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          SessionServiceFactory::GetForProfile(profile_);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (session_service)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        session_service->DeleteLastSession();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
38090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
38190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // The saved Autofill profiles and credit cards can include the origin from
38290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // which these profiles and credit cards were learned.  These are a form of
38390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // history, so clear them as well.
38490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    scoped_refptr<autofill::AutofillWebDataService> web_data_service =
385a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        WebDataServiceFactory::GetAutofillWebDataForProfile(
386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            profile_, Profile::EXPLICIT_ACCESS);
38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (web_data_service.get()) {
38890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      waiting_for_clear_autofill_origin_urls_ = true;
38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      web_data_service->RemoveOriginURLsModifiedBetween(
39090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          delete_begin_, delete_end_);
39190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      // The above calls are done on the UI thread but do their work on the DB
39290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      // thread. So wait for it.
39390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowserThread::PostTaskAndReply(
39490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          BrowserThread::DB, FROM_HERE,
39590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&base::DoNothing),
39690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnClearedAutofillOriginURLs,
39790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                     base::Unretained(this)));
39890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
39990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill::PersonalDataManager* data_manager =
40090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          autofill::PersonalDataManagerFactory::GetForProfile(profile_);
40190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if (data_manager)
40290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        data_manager->Refresh();
40390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
40490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
405effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    waiting_for_clear_webrtc_logs_ = true;
407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    BrowserThread::PostTaskAndReply(
408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        BrowserThread::FILE,
409effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        FROM_HERE,
410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Bind(
411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            &WebRtcLogUtil::DeleteOldAndRecentWebRtcLogFiles,
412effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            WebRtcLogList::GetWebRtcLogDirectoryForProfile(profile_->GetPath()),
413effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            delete_begin_),
414effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Bind(&BrowsingDataRemover::OnClearedWebRtcLogs,
415effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                   base::Unretained(this)));
416effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // The SSL Host State that tracks SSL interstitial "proceed" decisions may
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // include origins that the user has visited, so it must be cleared.
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (profile_->GetSSLHostStateDelegate())
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      profile_->GetSSLHostStateDelegate()->Clear();
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) {
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads"));
426868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    content::DownloadManager* download_manager =
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserContext::GetDownloadManager(profile_);
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_);
429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager(
430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        download_manager);
431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    download_prefs->SetSaveFilePath(download_prefs->DownloadPath());
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 storage_partition_remove_mask = 0;
435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set,
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't accidentally remove the cookies that are associated with the
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // UNPROTECTED_WEB origin. This is necessary because cookies are not separated
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between UNPROTECTED_WEB and PROTECTED_WEB.
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_COOKIES &&
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies"));
444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_COOKIES;
447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Also delete the LoggedIn Predictor, which tries to keep track of which
449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // sites a user is logged into.
450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ClearLoggedInPredictor();
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Clear the safebrowsing cookies only if time period is for "all time".  It
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // doesn't make sense to apply the time period of deleting in the last X
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // hours/days to the safebrowsing cookies since they aren't the result of
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // any user action.
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (delete_begin_ == base::Time()) {
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SafeBrowsingService* sb_service =
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          g_browser_process->safe_browsing_service();
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (sb_service) {
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::URLRequestContextGetter* sb_context =
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sb_service->url_request_context();
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ++waiting_for_clear_cookies_count_;
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::PostTask(
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            BrowserThread::IO, FROM_HERE,
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::Bind(&BrowsingDataRemover::ClearCookiesOnIOThread,
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       base::Unretained(this), base::Unretained(sb_context)));
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    MediaDeviceIDSalt::Reset(profile_->GetPrefs());
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Channel IDs are not separated for protected and unprotected web
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // origins. We check the origin_set_mask_ to prevent unintended deletion.
4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (remove_mask & REMOVE_CHANNEL_IDS &&
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        UserMetricsAction("ClearBrowsingData_ChannelIDs"));
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Since we are running on the UI thread don't call GetURLRequestContext().
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context = profile_->GetRequestContext();
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rq_context) {
4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      waiting_for_clear_channel_ids_ = true;
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::ClearChannelIDsOnIOThread,
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Unretained(this), base::Unretained(rq_context)));
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_LOCAL_STORAGE) {
492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_INDEXEDDB) {
497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB;
499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_WEBSQL) {
501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_WEBSQL;
503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_APPCACHE) {
505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_APPCACHE;
507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
5086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (remove_mask & REMOVE_SERVICE_WORKERS) {
5096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    storage_partition_remove_mask |=
5106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS;
5116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_FILE_SYSTEMS) {
513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Plugin is data not separated for protected and unprotected web origins. We
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // check the origin_set_mask_ to prevent unintended deletion.
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_PLUGIN_DATA &&
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData"));
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_plugin_data_ = true;
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!plugin_data_remover_.get())
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plugin_data_remover_.reset(content::PluginDataRemover::Create(profile_));
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WaitableEvent* event =
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        plugin_data_remover_->StartRemoving(delete_begin_);
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::WaitableEventWatcher::EventCallback watcher_callback =
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled,
5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   base::Unretained(this));
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    watcher_.StartWatching(event, watcher_callback);
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_ANDROID)
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (remove_mask & REMOVE_APP_BANNER_DATA) {
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_->GetHostContentSettingsMap()->ClearSettingsForOneType(
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        CONTENT_SETTINGS_TYPE_APP_BANNER);
5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_PASSWORDS) {
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Passwords"));
546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    password_manager::PasswordStore* password_store =
547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        PasswordStoreFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS)
548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            .get();
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (password_store)
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      password_store->RemoveLoginsCreatedBetween(delete_begin_, delete_end_);
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_FORM_DATA) {
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Autofill"));
556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    scoped_refptr<autofill::AutofillWebDataService> web_data_service =
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        WebDataServiceFactory::GetAutofillWebDataForProfile(
558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            profile_, Profile::EXPLICIT_ACCESS);
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (web_data_service.get()) {
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_form_ = true;
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_data_service->RemoveFormElementsAddedBetween(delete_begin_,
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_end_);
564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_data_service->RemoveAutofillDataModifiedBetween(
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_begin_, delete_end_);
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // The above calls are done on the UI thread but do their work on the DB
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // thread. So wait for it.
56890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowserThread::PostTaskAndReply(
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::DB, FROM_HERE,
57090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&base::DoNothing),
57190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnClearedFormData,
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Unretained(this)));
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      autofill::PersonalDataManager* data_manager =
575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          autofill::PersonalDataManagerFactory::GetForProfile(profile_);
57690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if (data_manager)
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        data_manager->Refresh();
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_CACHE) {
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Tell the renderers to clear their cache.
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    web_cache::WebCacheManager::GetInstance()->ClearCache();
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Invoke DoClearCache on the IO thread.
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_cache_ = true;
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache"));
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::IO, FROM_HERE,
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::ClearCacheOnIOThread,
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(DISABLE_NACL)
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_nacl_cache_ = true;
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::IO, FROM_HERE,
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::ClearNaClCacheOnIOThread,
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
601ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
602ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    waiting_for_clear_pnacl_cache_ = true;
603ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    BrowserThread::PostTask(
604ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        BrowserThread::IO, FROM_HERE,
605ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        base::Bind(&BrowsingDataRemover::ClearPnaclCacheOnIOThread,
606ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                   base::Unretained(this), delete_begin_, delete_end_));
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The PrerenderManager may have a page actively being prerendered, which
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // is essentially a preemptively cached page.
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender::PrerenderManager* prerender_manager =
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        prerender::PrerenderManagerFactory::GetForProfile(profile_);
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prerender_manager) {
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prerender_manager->ClearData(
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS);
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
6187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    // Tell the shader disk cache to clear.
6197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache"));
620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE;
622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_WEBRTC_IDENTITY;
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS)
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Clear the ephemeral apps cache.
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EphemeralAppService::Get(profile_)->ClearCachedApps();
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
6317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (storage_partition_remove_mask) {
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    waiting_for_clear_storage_partition_data_ = true;
634ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::StoragePartition* storage_partition;
636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (storage_partition_for_testing_)
637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition = storage_partition_for_testing_;
638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    else
639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition = BrowserContext::GetDefaultStoragePartition(profile_);
640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    uint32 quota_storage_remove_mask =
642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        ~content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (delete_begin_ == base::Time() ||
645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        origin_set_mask_ &
646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) {
647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      // If we're deleting since the beginning of time, or we're removing
648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      // protected origins, then remove persistent quota data.
649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      quota_storage_remove_mask |=
650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition->ClearData(
654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        storage_partition_remove_mask,
655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        quota_storage_remove_mask,
6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        remove_origin_,
657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&DoesOriginMatchMask, origin_set_mask_),
658ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        delete_begin_,
659ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        delete_end_,
660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnClearedStoragePartitionData,
661ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                   base::Unretained(this)));
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_CONTENT_LICENSES) {
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_ContentLicenses"));
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_content_licenses_ = true;
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!pepper_flash_settings_manager_.get()) {
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pepper_flash_settings_manager_.reset(
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          new PepperFlashSettingsManager(this, profile_));
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    deauthorize_content_licenses_request_id_ =
675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pepper_flash_settings_manager_->DeauthorizeContentLicenses(prefs);
6760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
6770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    // On Chrome OS, also delete any content protection platform keys.
6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    user_manager::User* user =
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        chromeos::ProfileHelper::Get()->GetUserByProfile(profile_);
6800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    if (!user) {
6810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      LOG(WARNING) << "Failed to find user for current profile.";
6820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    } else {
6830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->
6840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)          TpmAttestationDeleteKeys(
6850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              chromeos::attestation::KEY_USER,
6860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              user->email(),
6870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              chromeos::attestation::kContentProtectionKeyPrefix,
6880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              base::Bind(&BrowsingDataRemover::OnClearPlatformKeys,
6890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                         base::Unretained(this)));
6900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      waiting_for_clear_platform_keys_ = true;
6910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    }
6920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
696010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Remove omnibox zero-suggest cache results.
697010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if ((remove_mask & (REMOVE_CACHE | REMOVE_COOKIES)))
698010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    prefs->SetString(prefs::kZeroSuggestCachedResults, std::string());
699010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Always wipe accumulated network related data (TransportSecurityState and
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // HttpServerPropertiesManager data).
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_networking_history_ = true;
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile_->ClearNetworkingHistorySince(
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_,
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedNetworkingHistory,
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (remove_mask & (REMOVE_COOKIES | REMOVE_HISTORY)) {
709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    domain_reliability::DomainReliabilityService* service =
710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      domain_reliability::DomainReliabilityServiceFactory::
711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          GetForBrowserContext(profile_);
712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (service) {
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      domain_reliability::DomainReliabilityClearMode mode;
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      if (remove_mask & REMOVE_COOKIES)
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mode = domain_reliability::CLEAR_CONTEXTS;
716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      else
717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mode = domain_reliability::CLEAR_BEACONS;
718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      waiting_for_clear_domain_reliability_monitor_ = true;
720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      service->ClearBrowsingData(
721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          mode,
722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::Bind(&BrowsingDataRemover::OnClearedDomainReliabilityMonitor,
723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     base::Unretained(this)));
724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
725cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::AddObserver(Observer* observer) {
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observer_list_.AddObserver(observer);
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::RemoveObserver(Observer* observer) {
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observer_list_.RemoveObserver(observer);
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnHistoryDeletionDone() {
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_history_ = false;
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowsingDataRemover::OverrideStoragePartitionForTesting(
742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::StoragePartition* storage_partition) {
743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  storage_partition_for_testing_ = storage_partition;
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time BrowsingDataRemover::CalculateBeginDeleteTime(
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TimePeriod time_period) {
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta diff;
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time delete_begin_time = base::Time::Now();
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (time_period) {
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_HOUR:
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(1);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_DAY:
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(24);
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_WEEK:
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(7*24);
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case FOUR_WEEKS:
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(4*7*24);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EVERYTHING:
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_time = base::Time();
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED() << L"Missing item";
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return delete_begin_time - diff;
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowsingDataRemover::AllDone() {
7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return !waiting_for_clear_autofill_origin_urls_ &&
7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_cache_ &&
7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_content_licenses_ &&
7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_channel_ids_ &&
7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_cookies_count_ &&
779cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)         !waiting_for_clear_domain_reliability_monitor_ &&
7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_form_ &&
7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_history_ &&
7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_hostname_resolution_cache_ &&
7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_keyword_data_ &&
784ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_logged_in_predictor_ &&
7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_nacl_cache_ &&
7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_network_predictor_ &&
787ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_networking_history_ &&
7885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         !waiting_for_clear_platform_keys_ &&
789ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_plugin_data_ &&
790ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_pnacl_cache_ &&
791effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
792effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch         !waiting_for_clear_webrtc_logs_ &&
793effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         !waiting_for_clear_storage_partition_data_;
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void BrowsingDataRemover::OnKeywordsLoaded() {
7984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Deletes the entries from the model, and if we're not waiting on anything
7994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // else notifies observers and deletes this BrowsingDataRemover.
8004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  TemplateURLService* model =
8014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      TemplateURLServiceFactory::GetForProfile(profile_);
8024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  model->RemoveAutoGeneratedBetween(delete_begin_, delete_end_);
8034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiting_for_clear_keyword_data_ = false;
8044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  template_url_sub_.reset();
8054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  NotifyAndDeleteIfDone();
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid BrowsingDataRemover::NotifyAndDelete() {
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_removing(false);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Send global notification, then notify any explicit observers.
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowsingDataRemover::NotificationDetails details(delete_begin_, remove_mask_,
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_);
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationService::current()->Notify(
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::NOTIFICATION_BROWSING_DATA_REMOVED,
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Source<Profile>(profile_),
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Details<BrowsingDataRemover::NotificationDetails>(&details));
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observer_list_, OnBrowsingDataRemoverDone());
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // History requests aren't happy if you delete yourself from the callback.
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As such, we do a delete later.
82390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid BrowsingDataRemover::NotifyAndDeleteIfDone() {
8270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // TODO(brettw) http://crbug.com/305259: This should also observe session
8280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // clearing (what about other things such as passwords, etc.?) and wait for
8290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // them to complete before continuing.
8300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (!AllDone())
8320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
8330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (completion_inhibitor_) {
8350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    completion_inhibitor_->OnBrowsingDataRemoverWouldComplete(
8360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        this,
8370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        base::Bind(&BrowsingDataRemover::NotifyAndDelete,
8380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                   base::Unretained(this)));
8390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  } else {
8400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    NotifyAndDelete();
8410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  }
8420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
8430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedHostnameResolutionCache() {
8456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_hostname_resolution_cache_ = false;
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread(
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IOThread* io_thread) {
8526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  io_thread->ClearHostCache();
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI,
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FROM_HERE,
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedHostnameResolutionCache,
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BrowsingDataRemover::OnClearedLoggedInPredictor() {
8656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(waiting_for_clear_logged_in_predictor_);
867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  waiting_for_clear_logged_in_predictor_ = false;
868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NotifyAndDeleteIfDone();
869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BrowsingDataRemover::ClearLoggedInPredictor() {
8726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(!waiting_for_clear_logged_in_predictor_);
874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
875a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  predictors::PredictorDatabase* predictor_db =
876a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      predictors::PredictorDatabaseFactory::GetForProfile(profile_);
877a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  if (!predictor_db)
878a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return;
879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
880a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  predictors::LoggedInPredictorTable* logged_in_table =
8817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      predictor_db->logged_in_table().get();
882a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  if (!logged_in_table)
883a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return;
884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  waiting_for_clear_logged_in_predictor_ = true;
886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  BrowserThread::PostTaskAndReply(
888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      BrowserThread::DB,
889c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      FROM_HERE,
890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::Bind(&predictors::LoggedInPredictorTable::DeleteAllCreatedBetween,
891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 logged_in_table,
892c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 delete_begin_,
893c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 delete_end_),
894c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedLoggedInPredictor,
895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 base::Unretained(this)));
896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedNetworkPredictor() {
8996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_network_predictor_ = false;
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
904f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void BrowsingDataRemover::ClearNetworkPredictorOnIOThread(
905f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    chrome_browser_net::Predictor* predictor) {
9066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
907f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DCHECK(predictor);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
909f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  predictor->DiscardInitialNavigationHistory();
910f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  predictor->DiscardAllResults();
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI,
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FROM_HERE,
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedNetworkPredictor,
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedNetworkingHistory() {
9216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_networking_history_ = false;
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedCache() {
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_cache_ = false;
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearCacheOnIOThread() {
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the IO thread.
9346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(STATE_NONE, next_cache_state_);
936868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(main_context_getter_.get());
937868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(media_context_getter_.get());
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  next_cache_state_ = STATE_CREATE_MAIN;
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoClearCache(net::OK);
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The expected state sequence is STATE_NONE --> STATE_CREATE_MAIN -->
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// STATE_DELETE_MAIN --> STATE_CREATE_MEDIA --> STATE_DELETE_MEDIA -->
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// STATE_DONE, and any errors are ignored.
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::DoClearCache(int rv) {
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_NE(STATE_NONE, next_cache_state_);
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (rv != net::ERR_IO_PENDING && next_cache_state_ != STATE_NONE) {
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (next_cache_state_) {
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_CREATE_MAIN:
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_CREATE_MEDIA: {
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Get a pointer to the cache.
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::URLRequestContextGetter* getter =
955868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            (next_cache_state_ == STATE_CREATE_MAIN)
956868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                ? main_context_getter_.get()
957868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                : media_context_getter_.get();
9585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        net::HttpCache* http_cache =
9595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            getter->GetURLRequestContext()->http_transaction_factory()->
9605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                GetCache();
9610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = (next_cache_state_ == STATE_CREATE_MAIN) ?
963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                STATE_DELETE_MAIN : STATE_DELETE_MEDIA;
9640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
9655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        // Clear QUIC server information from memory and the disk cache.
9665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        http_cache->GetSession()->quic_stream_factory()->
9675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            ClearCachedStatesInCryptoConfig();
9686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
9696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Clear SDCH dictionary state.
9706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        net::SdchManager* sdch_manager =
9716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)            getter->GetURLRequestContext()->sdch_manager();
9726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // The test is probably overkill, since chrome should always have an
9736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // SdchManager.  But in general the URLRequestContext  is *not*
9746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // guaranteed to have an SdchManager, so checking is wise.
9756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        if (sdch_manager)
9766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          sdch_manager->ClearData();
9776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
9780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        rv = http_cache->GetBackend(
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &cache_, base::Bind(&BrowsingDataRemover::DoClearCache,
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                base::Unretained(this)));
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DELETE_MAIN:
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DELETE_MEDIA: {
985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = (next_cache_state_ == STATE_DELETE_MAIN) ?
986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                STATE_CREATE_MEDIA : STATE_DONE;
987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // |cache_| can be null if it cannot be initialized.
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (cache_) {
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if (delete_begin_.is_null()) {
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            rv = cache_->DoomAllEntries(
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Bind(&BrowsingDataRemover::DoClearCache,
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           base::Unretained(this)));
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          } else {
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            rv = cache_->DoomEntriesBetween(
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                delete_begin_, delete_end_,
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Bind(&BrowsingDataRemover::DoClearCache,
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           base::Unretained(this)));
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          cache_ = NULL;
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DONE: {
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache_ = NULL;
1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = STATE_NONE;
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Notify the UI thread that we are done.
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::PostTask(
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            BrowserThread::UI, FROM_HERE,
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::Bind(&BrowsingDataRemover::ClearedCache,
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       base::Unretained(this)));
1013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return;
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default: {
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NOTREACHED() << "bad state";
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        next_cache_state_ = STATE_NONE;  // Stop looping.
1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return;
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(DISABLE_NACL)
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedNaClCache() {
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the UI thread.
10276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_nacl_cache_ = false;
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedNaClCacheOnIOThread() {
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the IO thread.
10366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI, FROM_HERE,
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::ClearedNaClCache,
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearNaClCacheOnIOThread() {
10466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  nacl::NaClBrowser::GetInstance()->ClearValidationCache(
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::ClearedNaClCacheOnIOThread,
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearedPnaclCache() {
1054ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // This function should be called on the UI thread.
10556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
1056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1057ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  waiting_for_clear_pnacl_cache_ = false;
1058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NotifyAndDeleteIfDone();
1060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1061ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1062ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearedPnaclCacheOnIOThread() {
1063ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // This function should be called on the IO thread.
10646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
1065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Notify the UI thread that we are done.
1067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  BrowserThread::PostTask(
1068ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      BrowserThread::UI, FROM_HERE,
1069ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowsingDataRemover::ClearedPnaclCache,
1070ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
1071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1072ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearPnaclCacheOnIOThread(base::Time begin,
1074ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                                                    base::Time end) {
10756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
1076ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->ClearTranslationCacheEntriesBetween(
1078ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      begin, end,
1079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowsingDataRemover::ClearedPnaclCacheOnIOThread,
1080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
1081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnWaitableEventSignaled(
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WaitableEvent* waitable_event) {
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_plugin_data_ = false;
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnDeauthorizeContentLicensesCompleted(
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32 request_id,
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* success */) {
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(waiting_for_clear_content_licenses_);
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(request_id, deauthorize_content_licenses_request_id_);
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_content_licenses_ = false;
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
11030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void BrowsingDataRemover::OnClearPlatformKeys(
11040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    chromeos::DBusMethodCallStatus call_status,
11050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    bool result) {
11060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  DCHECK(waiting_for_clear_platform_keys_);
11070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  if (call_status != chromeos::DBUS_METHOD_CALL_SUCCESS || !result) {
11080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    LOG(ERROR) << "Failed to clear platform keys.";
11090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
11100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  waiting_for_clear_platform_keys_ = false;
11110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  NotifyAndDeleteIfDone();
11120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
11130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
11140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedCookies(int num_deleted) {
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::UI, FROM_HERE,
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnClearedCookies,
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this), num_deleted));
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK_GT(waiting_for_clear_cookies_count_, 0);
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --waiting_for_clear_cookies_count_;
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearCookiesOnIOThread(
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieStore* cookie_store = rq_context->
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetURLRequestContext()->cookie_store();
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_store->DeleteAllCreatedBetweenAsync(
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_, delete_end_,
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedCookies,
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void BrowsingDataRemover::ClearChannelIDsOnIOThread(
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::IO);
11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::ChannelIDService* channel_id_service =
11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      rq_context->GetURLRequestContext()->channel_id_service();
11455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  channel_id_service->GetChannelIDStore()->DeleteAllCreatedBetween(
11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delete_begin_, delete_end_,
11475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedChannelIDsOnIOThread,
11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this), base::Unretained(rq_context)));
11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void BrowsingDataRemover::OnClearedChannelIDsOnIOThread(
11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Need to close open SSL connections which may be using the channel ids we
11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // are deleting.
11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(mattm): http://crbug.com/166069 Make the server bound cert
11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // service/store have observers that can notify relevant things directly.
11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  rq_context->GetURLRequestContext()->ssl_config_service()->
11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NotifySSLConfigChange();
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI, FROM_HERE,
11615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedChannelIDs,
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void BrowsingDataRemover::OnClearedChannelIDs() {
11666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
11675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  waiting_for_clear_channel_ids_ = false;
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedFormData() {
11726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_form_ = false;
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
117690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
117790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void BrowsingDataRemover::OnClearedAutofillOriginURLs() {
11786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
117990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  waiting_for_clear_autofill_origin_urls_ = false;
118090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  NotifyAndDeleteIfDone();
118190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
1182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowsingDataRemover::OnClearedStoragePartitionData() {
11846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
1185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  waiting_for_clear_storage_partition_data_ = false;
1186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NotifyAndDeleteIfDone();
1187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
1190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowsingDataRemover::OnClearedWebRtcLogs() {
11916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
1192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  waiting_for_clear_webrtc_logs_ = false;
1193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  NotifyAndDeleteIfDone();
1194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
1196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() {
11986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_CURRENTLY_ON(BrowserThread::UI);
1199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  waiting_for_clear_domain_reliability_monitor_ = false;
1200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NotifyAndDeleteIfDone();
1201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1202