browsing_data_remover.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h"
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h"
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/domain_reliability/service_factory.h"
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_special_storage_policy.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h"
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/media/media_device_id_salt.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_url_request_context.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/predictor.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/logged_in_predictor_table.h"
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/predictor_database.h"
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/predictors/predictor_database_factory.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/web_cache_manager.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_service.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service_factory.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service_factory.h"
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service_factory.h"
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h"
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/domain_reliability/service.h"
510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h"
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/pnacl_host.h"
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/password_manager/core/browser/password_store.h"
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.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"
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h"
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "net/base/sdch_manager.h"
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_store.h"
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/disk_cache/disk_cache.h"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_cache.h"
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/transport_security_state.h"
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_service.h"
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_store.h"
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h"
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/quota_manager.h"
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/special_storage_policy.h"
76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/quota/quota_types.h"
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS)
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/users/user.h"
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/users/user_manager.h"
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h"
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/attestation/attestation_constants.h"
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/dbus/cryptohome_client.h"
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/dbus/dbus_thread_manager.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"
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_WEBRTC)
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/media/webrtc_log_list.h"
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/media/webrtc_log_util.h"
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DOMStorageContext;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowsingDataRemover::is_removing_ = false;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1040529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochBrowsingDataRemover::CompletionInhibitor*
1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    BrowsingDataRemover::completion_inhibitor_ = NULL;
1060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Helper to create callback for BrowsingDataRemover::DoesOriginMatchMask.
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Static.
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool DoesOriginMatchMask(int origin_set_mask,
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const GURL& origin,
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         quota::SpecialStoragePolicy* special_storage_policy) {
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return BrowsingDataHelper::DoesOriginMatchMask(
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      origin, origin_set_mask,
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      static_cast<ExtensionSpecialStoragePolicy*>(special_storage_policy));
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails()
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(base::Time()),
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(-1),
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(-1) {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BrowsingDataRemover::NotificationDetails& details)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(details.removal_begin),
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(details.removal_mask),
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(details.origin_set_mask) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::NotificationDetails(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time removal_begin,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int removal_mask,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int origin_set_mask)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : removal_begin(removal_begin),
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removal_mask(removal_mask),
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask(origin_set_mask) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::NotificationDetails::~NotificationDetails() {}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForUnboundedRange(
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile) {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile, base::Time(), base::Time::Max());
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForRange(Profile* profile,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time start, base::Time end) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile, start, end);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover* BrowsingDataRemover::CreateForPeriod(Profile* profile,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TimePeriod period) {
1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  switch (period) {
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_HOUR:
1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastHour"));
1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_DAY:
1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastDay"));
1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case LAST_WEEK:
1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastWeek"));
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case FOUR_WEEKS:
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_LastMonth"));
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case EVERYTHING:
1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content::RecordAction(
1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          UserMetricsAction("ClearBrowsingData_Everything"));
1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      break;
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new BrowsingDataRemover(profile,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::CalculateBeginDeleteTime(period),
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Max());
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         base::Time delete_begin,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         base::Time delete_end)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : profile_(profile),
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()),
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_(delete_begin),
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_end_(delete_end),
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      next_cache_state_(STATE_NONE),
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cache_(NULL),
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      main_context_getter_(profile->GetRequestContext()),
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      media_context_getter_(profile->GetMediaRequestContext()),
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      deauthorize_content_licenses_request_id_(0),
19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      waiting_for_clear_autofill_origin_urls_(false),
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_cache_(false),
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_content_licenses_(false),
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_cookies_count_(0),
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      waiting_for_clear_domain_reliability_monitor_(false),
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_form_(false),
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_history_(false),
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_hostname_resolution_cache_(false),
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_keyword_data_(false),
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      waiting_for_clear_logged_in_predictor_(false),
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_nacl_cache_(false),
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_network_predictor_(false),
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_networking_history_(false),
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_platform_keys_(false),
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_plugin_data_(false),
210ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      waiting_for_clear_pnacl_cache_(false),
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_server_bound_certs_(false),
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      waiting_for_clear_storage_partition_data_(false),
213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      waiting_for_clear_webrtc_logs_(false),
215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remove_mask_(0),
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remove_origin_(GURL()),
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      origin_set_mask_(0),
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition_for_testing_(NULL) {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(profile);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // crbug.com/140910: Many places were calling this with base::Time() as
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delete_end, even though they should've used base::Time::Max(). Work around
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it here. New code should use base::Time::Max().
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(delete_end_ != base::Time());
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delete_end_ == base::Time())
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delete_end_ = base::Time::Max();
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataRemover::~BrowsingDataRemover() {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(AllDone());
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Static.
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::set_removing(bool is_removing) {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(is_removing_ != is_removing);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  is_removing_ = is_removing;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::Remove(int remove_mask, int origin_set_mask) {
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveImpl(remove_mask, GURL(), origin_set_mask);
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::RemoveImpl(int remove_mask,
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const GURL& origin,
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int origin_set_mask) {
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_removing(true);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remove_mask_ = remove_mask;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remove_origin_ = origin;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  origin_set_mask_ = origin_set_mask;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* prefs = profile_->GetPrefs();
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool may_delete_history = prefs->GetBoolean(
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kAllowDeletingBrowserHistory);
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // All the UI entry points into the BrowsingDataRemover should be disabled,
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // but this will fire if something was missed or added.
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(may_delete_history ||
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS)));
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb"));
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::PROTECTED_WEB) {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb"));
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (origin_set_mask_ & BrowsingDataHelper::EXTENSION) {
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_MaskContainsExtension"));
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this fires, we added a new BrowsingDataHelper::OriginSetMask without
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // updating the user metrics above.
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  COMPILE_ASSERT(
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataHelper::ALL == (BrowsingDataHelper::UNPROTECTED_WEB |
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  BrowsingDataHelper::PROTECTED_WEB |
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  BrowsingDataHelper::EXTENSION),
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      forgotten_to_add_origin_mask_type);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if ((remove_mask & REMOVE_HISTORY) && may_delete_history) {
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HistoryService* history_service = HistoryServiceFactory::GetForProfile(
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        profile_, Profile::EXPLICIT_ACCESS);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (history_service) {
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::set<GURL> restrict_urls;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!remove_origin_.is_empty())
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        restrict_urls.insert(remove_origin_);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(UserMetricsAction("ClearBrowsingData_History"));
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_history_ = true;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      history_service->ExpireLocalAndRemoteHistoryBetween(
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          restrict_urls, delete_begin_, delete_end_,
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnHistoryDeletionDone,
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     base::Unretained(this)),
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          &history_task_tracker_);
29658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
29768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // The extension activity contains details of which websites extensions
29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // were active on. It therefore indirectly stores details of websites a
30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      // user has visited so best clean from here as well.
30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      extensions::ActivityLog::GetInstance(profile_)->RemoveURLs(restrict_urls);
30268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Need to clear the host cache and accumulated speculative data, as it also
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // reveals some history: we have no mechanism to track when these items were
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // created, so we'll clear them all. Better safe than sorry.
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (g_browser_process->io_thread()) {
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_hostname_resolution_cache_ = true;
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              &BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread,
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              base::Unretained(this),
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              g_browser_process->io_thread()));
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (profile_->GetNetworkPredictor()) {
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_network_predictor_ = true;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(&BrowsingDataRemover::ClearNetworkPredictorOnIOThread,
322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     base::Unretained(this),
323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     profile_->GetNetworkPredictor()));
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // As part of history deletion we also delete the auto-generated keywords.
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TemplateURLService* keywords_model =
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(profile_);
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (keywords_model && !keywords_model->loaded()) {
3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      template_url_sub_ = keywords_model->RegisterOnLoadedCallback(
3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnKeywordsLoaded,
3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                     base::Unretained(this)));
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      keywords_model->Load();
3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      waiting_for_clear_keyword_data_ = true;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (keywords_model) {
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      keywords_model->RemoveAutoGeneratedForOriginBetween(remove_origin_,
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_begin_, delete_end_);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The PrerenderManager keeps history of prerendered pages, so clear that.
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // It also may have a prerendered page. If so, the page could be
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // considered to have a small amount of historical information, so delete
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // it, too.
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender::PrerenderManager* prerender_manager =
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        prerender::PrerenderManagerFactory::GetForProfile(profile_);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prerender_manager) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prerender_manager->ClearData(
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS |
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY);
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If the caller is removing history for all hosts, then clear ancillary
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // historical information.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (remove_origin_.is_empty()) {
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We also delete the list of recently closed tabs. Since these expire,
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // they can't be more than a day old, so we can simply clear them all.
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TabRestoreService* tab_service =
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          TabRestoreServiceFactory::GetForProfile(profile_);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (tab_service) {
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        tab_service->ClearEntries();
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        tab_service->DeleteLastSession();
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_SESSION_SERVICE)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We also delete the last session when we delete the history.
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SessionService* session_service =
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          SessionServiceFactory::GetForProfile(profile_);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (session_service)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        session_service->DeleteLastSession();
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
37290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
37390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // The saved Autofill profiles and credit cards can include the origin from
37490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // which these profiles and credit cards were learned.  These are a form of
37590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    // history, so clear them as well.
37690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    scoped_refptr<autofill::AutofillWebDataService> web_data_service =
377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        WebDataServiceFactory::GetAutofillWebDataForProfile(
378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            profile_, Profile::EXPLICIT_ACCESS);
37990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (web_data_service.get()) {
38090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      waiting_for_clear_autofill_origin_urls_ = true;
38190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      web_data_service->RemoveOriginURLsModifiedBetween(
38290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          delete_begin_, delete_end_);
38390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      // The above calls are done on the UI thread but do their work on the DB
38490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      // thread. So wait for it.
38590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowserThread::PostTaskAndReply(
38690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          BrowserThread::DB, FROM_HERE,
38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&base::DoNothing),
38890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnClearedAutofillOriginURLs,
38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                     base::Unretained(this)));
39090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
39190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill::PersonalDataManager* data_manager =
39290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          autofill::PersonalDataManagerFactory::GetForProfile(profile_);
39390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if (data_manager)
39490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        data_manager->Refresh();
39590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
39690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    waiting_for_clear_webrtc_logs_ = true;
399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    BrowserThread::PostTaskAndReply(
400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        BrowserThread::FILE,
401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        FROM_HERE,
402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Bind(
403effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            &WebRtcLogUtil::DeleteOldAndRecentWebRtcLogFiles,
404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            WebRtcLogList::GetWebRtcLogDirectoryForProfile(profile_->GetPath()),
405effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            delete_begin_),
406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Bind(&BrowsingDataRemover::OnClearedWebRtcLogs,
407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                   base::Unretained(this)));
408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) {
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads"));
413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    content::DownloadManager* download_manager =
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserContext::GetDownloadManager(profile_);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_);
416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager(
417868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        download_manager);
418868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    download_prefs->SetSaveFilePath(download_prefs->DownloadPath());
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 storage_partition_remove_mask = 0;
422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set,
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't accidentally remove the cookies that are associated with the
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // UNPROTECTED_WEB origin. This is necessary because cookies are not separated
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between UNPROTECTED_WEB and PROTECTED_WEB.
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_COOKIES &&
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies"));
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_COOKIES;
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Also delete the LoggedIn Predictor, which tries to keep track of which
436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // sites a user is logged into.
437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ClearLoggedInPredictor();
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Clear the safebrowsing cookies only if time period is for "all time".  It
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // doesn't make sense to apply the time period of deleting in the last X
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // hours/days to the safebrowsing cookies since they aren't the result of
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // any user action.
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (delete_begin_ == base::Time()) {
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SafeBrowsingService* sb_service =
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          g_browser_process->safe_browsing_service();
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (sb_service) {
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::URLRequestContextGetter* sb_context =
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sb_service->url_request_context();
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ++waiting_for_clear_cookies_count_;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::PostTask(
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            BrowserThread::IO, FROM_HERE,
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::Bind(&BrowsingDataRemover::ClearCookiesOnIOThread,
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       base::Unretained(this), base::Unretained(sb_context)));
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
458a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    MediaDeviceIDSalt::Reset(profile_->GetPrefs());
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Server bound certs are not separated for protected and unprotected web
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // origins. We check the origin_set_mask_ to prevent unintended deletion.
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_SERVER_BOUND_CERTS &&
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_ServerBoundCerts"));
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Since we are running on the UI thread don't call GetURLRequestContext().
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context = profile_->GetRequestContext();
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rq_context) {
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_server_bound_certs_ = true;
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::PostTask(
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::IO, FROM_HERE,
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          base::Bind(&BrowsingDataRemover::ClearServerBoundCertsOnIOThread,
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Unretained(this), base::Unretained(rq_context)));
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_LOCAL_STORAGE) {
479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_INDEXEDDB) {
484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB;
486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_WEBSQL) {
488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_WEBSQL;
490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_APPCACHE) {
492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_APPCACHE;
494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (remove_mask & REMOVE_FILE_SYSTEMS) {
496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS;
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Plugin is data not separated for protected and unprotected web origins. We
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // check the origin_set_mask_ to prevent unintended deletion.
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_PLUGIN_DATA &&
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData"));
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_plugin_data_ = true;
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!plugin_data_remover_.get())
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plugin_data_remover_.reset(content::PluginDataRemover::Create(profile_));
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WaitableEvent* event =
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        plugin_data_remover_->StartRemoving(delete_begin_);
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::WaitableEventWatcher::EventCallback watcher_callback =
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled,
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   base::Unretained(this));
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    watcher_.StartWatching(event, watcher_callback);
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_ANDROID)
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (remove_mask & REMOVE_APP_BANNER_DATA) {
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_->GetHostContentSettingsMap()->ClearSettingsForOneType(
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        CONTENT_SETTINGS_TYPE_APP_BANNER);
5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_PASSWORDS) {
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Passwords"));
529c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    password_manager::PasswordStore* password_store =
530c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        PasswordStoreFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS)
531c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            .get();
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (password_store)
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      password_store->RemoveLoginsCreatedBetween(delete_begin_, delete_end_);
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_FORM_DATA) {
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Autofill"));
539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    scoped_refptr<autofill::AutofillWebDataService> web_data_service =
540a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        WebDataServiceFactory::GetAutofillWebDataForProfile(
541a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            profile_, Profile::EXPLICIT_ACCESS);
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (web_data_service.get()) {
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      waiting_for_clear_form_ = true;
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_data_service->RemoveFormElementsAddedBetween(delete_begin_,
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_end_);
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_data_service->RemoveAutofillDataModifiedBetween(
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          delete_begin_, delete_end_);
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // The above calls are done on the UI thread but do their work on the DB
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // thread. So wait for it.
55190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowserThread::PostTaskAndReply(
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserThread::DB, FROM_HERE,
55390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&base::DoNothing),
55490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          base::Bind(&BrowsingDataRemover::OnClearedFormData,
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Unretained(this)));
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      autofill::PersonalDataManager* data_manager =
558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          autofill::PersonalDataManagerFactory::GetForProfile(profile_);
55990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if (data_manager)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        data_manager->Refresh();
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_CACHE) {
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Tell the renderers to clear their cache.
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebCacheManager::GetInstance()->ClearCache();
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Invoke DoClearCache on the IO thread.
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_cache_ = true;
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache"));
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::IO, FROM_HERE,
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::ClearCacheOnIOThread,
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(DISABLE_NACL)
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_nacl_cache_ = true;
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::IO, FROM_HERE,
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::ClearNaClCacheOnIOThread,
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
584ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
585ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    waiting_for_clear_pnacl_cache_ = true;
586ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    BrowserThread::PostTask(
587ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        BrowserThread::IO, FROM_HERE,
588ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        base::Bind(&BrowsingDataRemover::ClearPnaclCacheOnIOThread,
589ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                   base::Unretained(this), delete_begin_, delete_end_));
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The PrerenderManager may have a page actively being prerendered, which
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // is essentially a preemptively cached page.
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender::PrerenderManager* prerender_manager =
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        prerender::PrerenderManagerFactory::GetForProfile(profile_);
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prerender_manager) {
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prerender_manager->ClearData(
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS);
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
6017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    // Tell the shader disk cache to clear.
6027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache"));
603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE;
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_remove_mask |=
607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        content::StoragePartition::REMOVE_DATA_MASK_WEBRTC_IDENTITY;
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS)
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Clear the ephemeral apps cache.
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EphemeralAppService::Get(profile_)->ClearCachedApps();
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
6147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (storage_partition_remove_mask) {
616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    waiting_for_clear_storage_partition_data_ = true;
617ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::StoragePartition* storage_partition;
619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (storage_partition_for_testing_)
620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition = storage_partition_for_testing_;
621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    else
622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      storage_partition = BrowserContext::GetDefaultStoragePartition(profile_);
623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    uint32 quota_storage_remove_mask =
625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        ~content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (delete_begin_ == base::Time() ||
628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        origin_set_mask_ &
629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) {
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      // If we're deleting since the beginning of time, or we're removing
631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      // protected origins, then remove persistent quota data.
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      quota_storage_remove_mask |=
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition->ClearData(
637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        storage_partition_remove_mask,
638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        quota_storage_remove_mask,
6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        remove_origin_,
640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&DoesOriginMatchMask, origin_set_mask_),
641ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        delete_begin_,
642ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        delete_end_,
643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnClearedStoragePartitionData,
644ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                   base::Unretained(this)));
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (remove_mask & REMOVE_CONTENT_LICENSES) {
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("ClearBrowsingData_ContentLicenses"));
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_for_clear_content_licenses_ = true;
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!pepper_flash_settings_manager_.get()) {
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pepper_flash_settings_manager_.reset(
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          new PepperFlashSettingsManager(this, profile_));
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    deauthorize_content_licenses_request_id_ =
658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pepper_flash_settings_manager_->DeauthorizeContentLicenses(prefs);
6590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
6600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    // On Chrome OS, also delete any content protection platform keys.
661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    chromeos::User* user =
662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        chromeos::ProfileHelper::Get()->GetUserByProfile(profile_);
6630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    if (!user) {
6640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      LOG(WARNING) << "Failed to find user for current profile.";
6650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    } else {
6660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->
6670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)          TpmAttestationDeleteKeys(
6680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              chromeos::attestation::KEY_USER,
6690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              user->email(),
6700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              chromeos::attestation::kContentProtectionKeyPrefix,
6710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              base::Bind(&BrowsingDataRemover::OnClearPlatformKeys,
6720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                         base::Unretained(this)));
6730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      waiting_for_clear_platform_keys_ = true;
6740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    }
6750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
679010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Remove omnibox zero-suggest cache results.
680010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if ((remove_mask & (REMOVE_CACHE | REMOVE_COOKIES)))
681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    prefs->SetString(prefs::kZeroSuggestCachedResults, std::string());
682010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Always wipe accumulated network related data (TransportSecurityState and
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // HttpServerPropertiesManager data).
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_networking_history_ = true;
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile_->ClearNetworkingHistorySince(
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_,
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedNetworkingHistory,
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
690cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
691cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (remove_mask & (REMOVE_COOKIES | REMOVE_HISTORY)) {
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    domain_reliability::DomainReliabilityService* service =
693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      domain_reliability::DomainReliabilityServiceFactory::
694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          GetForBrowserContext(profile_);
695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (service) {
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      domain_reliability::DomainReliabilityClearMode mode;
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      if (remove_mask & REMOVE_COOKIES)
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mode = domain_reliability::CLEAR_CONTEXTS;
699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      else
700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mode = domain_reliability::CLEAR_BEACONS;
701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      waiting_for_clear_domain_reliability_monitor_ = true;
703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      service->ClearBrowsingData(
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          mode,
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::Bind(&BrowsingDataRemover::OnClearedDomainReliabilityMonitor,
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     base::Unretained(this)));
707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::AddObserver(Observer* observer) {
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observer_list_.AddObserver(observer);
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::RemoveObserver(Observer* observer) {
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observer_list_.RemoveObserver(observer);
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnHistoryDeletionDone() {
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_history_ = false;
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowsingDataRemover::OverrideStoragePartitionForTesting(
725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::StoragePartition* storage_partition) {
726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  storage_partition_for_testing_ = storage_partition;
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time BrowsingDataRemover::CalculateBeginDeleteTime(
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TimePeriod time_period) {
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta diff;
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time delete_begin_time = base::Time::Now();
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (time_period) {
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_HOUR:
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(1);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_DAY:
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(24);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case LAST_WEEK:
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(7*24);
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case FOUR_WEEKS:
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      diff = base::TimeDelta::FromHours(4*7*24);
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EVERYTHING:
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_time = base::Time();
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED() << L"Missing item";
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return delete_begin_time - diff;
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowsingDataRemover::AllDone() {
7574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return !waiting_for_clear_keyword_data_ &&
7584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)         !waiting_for_clear_autofill_origin_urls_ &&
759ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_cache_ && !waiting_for_clear_nacl_cache_ &&
760ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_cookies_count_ && !waiting_for_clear_history_ &&
761cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)         !waiting_for_clear_domain_reliability_monitor_ &&
762ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_logged_in_predictor_ &&
763ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_networking_history_ &&
764ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_server_bound_certs_ &&
765ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_plugin_data_ &&
766ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_pnacl_cache_ &&
767ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_content_licenses_ && !waiting_for_clear_form_ &&
768ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_hostname_resolution_cache_ &&
769ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch         !waiting_for_clear_network_predictor_ &&
770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         !waiting_for_clear_platform_keys_ &&
771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
772effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch         !waiting_for_clear_webrtc_logs_ &&
773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         !waiting_for_clear_storage_partition_data_;
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void BrowsingDataRemover::OnKeywordsLoaded() {
7784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Deletes the entries from the model, and if we're not waiting on anything
7794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // else notifies observers and deletes this BrowsingDataRemover.
7804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  TemplateURLService* model =
7814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      TemplateURLServiceFactory::GetForProfile(profile_);
7824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  model->RemoveAutoGeneratedBetween(delete_begin_, delete_end_);
7834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiting_for_clear_keyword_data_ = false;
7844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  template_url_sub_.reset();
7854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  NotifyAndDeleteIfDone();
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid BrowsingDataRemover::NotifyAndDelete() {
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_removing(false);
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Send global notification, then notify any explicit observers.
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowsingDataRemover::NotificationDetails details(delete_begin_, remove_mask_,
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask_);
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationService::current()->Notify(
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::NOTIFICATION_BROWSING_DATA_REMOVED,
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Source<Profile>(profile_),
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Details<BrowsingDataRemover::NotificationDetails>(&details));
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observer_list_, OnBrowsingDataRemoverDone());
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // History requests aren't happy if you delete yourself from the callback.
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As such, we do a delete later.
80390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid BrowsingDataRemover::NotifyAndDeleteIfDone() {
8070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // TODO(brettw) http://crbug.com/305259: This should also observe session
8080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // clearing (what about other things such as passwords, etc.?) and wait for
8090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // them to complete before continuing.
8100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (!AllDone())
8120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
8130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (completion_inhibitor_) {
8150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    completion_inhibitor_->OnBrowsingDataRemoverWouldComplete(
8160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        this,
8170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        base::Bind(&BrowsingDataRemover::NotifyAndDelete,
8180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                   base::Unretained(this)));
8190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  } else {
8200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    NotifyAndDelete();
8210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  }
8220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
8230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedHostnameResolutionCache() {
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_hostname_resolution_cache_ = false;
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread(
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IOThread* io_thread) {
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  io_thread->ClearHostCache();
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI,
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FROM_HERE,
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedHostnameResolutionCache,
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BrowsingDataRemover::OnClearedLoggedInPredictor() {
845c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(waiting_for_clear_logged_in_predictor_);
847c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  waiting_for_clear_logged_in_predictor_ = false;
848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NotifyAndDeleteIfDone();
849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
850c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
851c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BrowsingDataRemover::ClearLoggedInPredictor() {
852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
853c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(!waiting_for_clear_logged_in_predictor_);
854c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
855a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  predictors::PredictorDatabase* predictor_db =
856a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      predictors::PredictorDatabaseFactory::GetForProfile(profile_);
857a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  if (!predictor_db)
858a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return;
859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
860a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  predictors::LoggedInPredictorTable* logged_in_table =
8617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      predictor_db->logged_in_table().get();
862a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  if (!logged_in_table)
863a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return;
864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
865c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  waiting_for_clear_logged_in_predictor_ = true;
866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  BrowserThread::PostTaskAndReply(
868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      BrowserThread::DB,
869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      FROM_HERE,
870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::Bind(&predictors::LoggedInPredictorTable::DeleteAllCreatedBetween,
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 logged_in_table,
872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 delete_begin_,
873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 delete_end_),
874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedLoggedInPredictor,
875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 base::Unretained(this)));
876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedNetworkPredictor() {
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_network_predictor_ = false;
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
884f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void BrowsingDataRemover::ClearNetworkPredictorOnIOThread(
885f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    chrome_browser_net::Predictor* predictor) {
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
887f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DCHECK(predictor);
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
889f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  predictor->DiscardInitialNavigationHistory();
890f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  predictor->DiscardAllResults();
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI,
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FROM_HERE,
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedNetworkPredictor,
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedNetworkingHistory() {
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_networking_history_ = false;
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedCache() {
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_cache_ = false;
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearCacheOnIOThread() {
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the IO thread.
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(STATE_NONE, next_cache_state_);
916868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(main_context_getter_.get());
917868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(media_context_getter_.get());
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  next_cache_state_ = STATE_CREATE_MAIN;
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoClearCache(net::OK);
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The expected state sequence is STATE_NONE --> STATE_CREATE_MAIN -->
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// STATE_DELETE_MAIN --> STATE_CREATE_MEDIA --> STATE_DELETE_MEDIA -->
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// STATE_DONE, and any errors are ignored.
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::DoClearCache(int rv) {
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_NE(STATE_NONE, next_cache_state_);
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (rv != net::ERR_IO_PENDING && next_cache_state_ != STATE_NONE) {
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (next_cache_state_) {
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_CREATE_MAIN:
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_CREATE_MEDIA: {
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Get a pointer to the cache.
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::URLRequestContextGetter* getter =
935868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            (next_cache_state_ == STATE_CREATE_MAIN)
936868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                ? main_context_getter_.get()
937868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                : media_context_getter_.get();
9385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        net::HttpCache* http_cache =
9395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            getter->GetURLRequestContext()->http_transaction_factory()->
9405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                GetCache();
9410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = (next_cache_state_ == STATE_CREATE_MAIN) ?
943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                STATE_DELETE_MAIN : STATE_DELETE_MEDIA;
9440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
9455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        // Clear QUIC server information from memory and the disk cache.
9465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        http_cache->GetSession()->quic_stream_factory()->
9475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            ClearCachedStatesInCryptoConfig();
9486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
9496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Clear SDCH dictionary state.
9506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        net::SdchManager* sdch_manager =
9516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)            getter->GetURLRequestContext()->sdch_manager();
9526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // The test is probably overkill, since chrome should always have an
9536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // SdchManager.  But in general the URLRequestContext  is *not*
9546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // guaranteed to have an SdchManager, so checking is wise.
9556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        if (sdch_manager)
9566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          sdch_manager->ClearData();
9576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
9580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        rv = http_cache->GetBackend(
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &cache_, base::Bind(&BrowsingDataRemover::DoClearCache,
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                base::Unretained(this)));
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DELETE_MAIN:
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DELETE_MEDIA: {
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = (next_cache_state_ == STATE_DELETE_MAIN) ?
966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                STATE_CREATE_MEDIA : STATE_DONE;
967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // |cache_| can be null if it cannot be initialized.
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (cache_) {
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if (delete_begin_.is_null()) {
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            rv = cache_->DoomAllEntries(
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Bind(&BrowsingDataRemover::DoClearCache,
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           base::Unretained(this)));
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          } else {
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            rv = cache_->DoomEntriesBetween(
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                delete_begin_, delete_end_,
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Bind(&BrowsingDataRemover::DoClearCache,
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           base::Unretained(this)));
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          cache_ = NULL;
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case STATE_DONE: {
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache_ = NULL;
986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        next_cache_state_ = STATE_NONE;
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Notify the UI thread that we are done.
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::PostTask(
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            BrowserThread::UI, FROM_HERE,
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::Bind(&BrowsingDataRemover::ClearedCache,
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       base::Unretained(this)));
993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return;
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default: {
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NOTREACHED() << "bad state";
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        next_cache_state_ = STATE_NONE;  // Stop looping.
998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return;
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(DISABLE_NACL)
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedNaClCache() {
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the UI thread.
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_nacl_cache_ = false;
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearedNaClCacheOnIOThread() {
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function should be called on the IO thread.
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the UI thread that we are done.
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI, FROM_HERE,
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::ClearedNaClCache,
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearNaClCacheOnIOThread() {
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  nacl::NaClBrowser::GetInstance()->ClearValidationCache(
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::ClearedNaClCacheOnIOThread,
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1032ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1033ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearedPnaclCache() {
1034ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // This function should be called on the UI thread.
1035ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1036ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1037ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  waiting_for_clear_pnacl_cache_ = false;
1038ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1039ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NotifyAndDeleteIfDone();
1040ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1041ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1042ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearedPnaclCacheOnIOThread() {
1043ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // This function should be called on the IO thread.
1044ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1045ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1046ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Notify the UI thread that we are done.
1047ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  BrowserThread::PostTask(
1048ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      BrowserThread::UI, FROM_HERE,
1049ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowsingDataRemover::ClearedPnaclCache,
1050ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
1051ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BrowsingDataRemover::ClearPnaclCacheOnIOThread(base::Time begin,
1054ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                                                    base::Time end) {
1055ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->ClearTranslationCacheEntriesBetween(
1058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      begin, end,
1059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowsingDataRemover::ClearedPnaclCacheOnIOThread,
1060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
1061ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnWaitableEventSignaled(
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WaitableEvent* waitable_event) {
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_plugin_data_ = false;
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS)
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnDeauthorizeContentLicensesCompleted(
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32 request_id,
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* success */) {
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(waiting_for_clear_content_licenses_);
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(request_id, deauthorize_content_licenses_request_id_);
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_content_licenses_ = false;
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
10830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void BrowsingDataRemover::OnClearPlatformKeys(
10840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    chromeos::DBusMethodCallStatus call_status,
10850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    bool result) {
10860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  DCHECK(waiting_for_clear_platform_keys_);
10870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  if (call_status != chromeos::DBUS_METHOD_CALL_SUCCESS || !result) {
10880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    LOG(ERROR) << "Failed to clear platform keys.";
10890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
10900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  waiting_for_clear_platform_keys_ = false;
10910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  NotifyAndDeleteIfDone();
10920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
10930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
10940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedCookies(int num_deleted) {
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowserThread::UI, FROM_HERE,
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowsingDataRemover::OnClearedCookies,
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this), num_deleted));
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1104a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK_GT(waiting_for_clear_cookies_count_, 0);
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --waiting_for_clear_cookies_count_;
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearCookiesOnIOThread(
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieStore* cookie_store = rq_context->
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetURLRequestContext()->cookie_store();
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_store->DeleteAllCreatedBetweenAsync(
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_begin_, delete_end_,
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedCookies,
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::ClearServerBoundCertsOnIOThread(
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ServerBoundCertService* server_bound_cert_service =
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rq_context->GetURLRequestContext()->server_bound_cert_service();
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  server_bound_cert_service->GetCertStore()->DeleteAllCreatedBetween(
11262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delete_begin_, delete_end_,
11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedServerBoundCertsOnIOThread,
11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this), base::Unretained(rq_context)));
11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowsingDataRemover::OnClearedServerBoundCertsOnIOThread(
11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    net::URLRequestContextGetter* rq_context) {
11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Need to close open SSL connections which may be using the channel ids we
11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // are deleting.
11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(mattm): http://crbug.com/166069 Make the server bound cert
11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // service/store have observers that can notify relevant things directly.
11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  rq_context->GetURLRequestContext()->ssl_config_service()->
11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NotifySSLConfigChange();
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserThread::UI, FROM_HERE,
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataRemover::OnClearedServerBoundCerts,
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedServerBoundCerts() {
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_server_bound_certs_ = false;
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataRemover::OnClearedFormData() {
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  waiting_for_clear_form_ = false;
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyAndDeleteIfDone();
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
115690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
115790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void BrowsingDataRemover::OnClearedAutofillOriginURLs() {
115890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
115990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  waiting_for_clear_autofill_origin_urls_ = false;
116090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  NotifyAndDeleteIfDone();
116190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
1162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowsingDataRemover::OnClearedStoragePartitionData() {
1164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  waiting_for_clear_storage_partition_data_ = false;
1166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NotifyAndDeleteIfDone();
1167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(ENABLE_WEBRTC)
1170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowsingDataRemover::OnClearedWebRtcLogs() {
1171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  waiting_for_clear_webrtc_logs_ = false;
1173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  NotifyAndDeleteIfDone();
1174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
1176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() {
1178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  waiting_for_clear_domain_reliability_monitor_ = false;
1180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NotifyAndDeleteIfDone();
1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1182