Commit f7305c4e authored by Sylvain Defresne's avatar Sylvain Defresne Committed by Commit Bot

Convert IOSChromeBrowsingDataRemover to a KeyedService

Rename IOSChromeBrowsingDataRemover to BrowsingDataRemover
and convert it to a KeyedService. Make the class an abstract
interface with a single implementation to allow injecting a
fake in unit tests eventually.

Bug: none
Change-Id: I6d8ca1ee1e0704d89a68f92af54106e0dba6f5a5
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Reviewed-on: https://chromium-review.googlesource.com/931127
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarOlivier Robin <olivierrobin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539121}
parent 106d17cb
...@@ -65,7 +65,6 @@ ...@@ -65,7 +65,6 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h" #include "ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.h"
#import "ios/chrome/browser/browsing_data/browsing_data_removal_controller.h" #import "ios/chrome/browser/browsing_data/browsing_data_removal_controller.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h" #include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h"
#include "ios/chrome/browser/chrome_paths.h" #include "ios/chrome/browser/chrome_paths.h"
#include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/chrome_url_constants.h"
#import "ios/chrome/browser/chrome_url_util.h" #import "ios/chrome/browser/chrome_url_util.h"
...@@ -864,8 +863,7 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -864,8 +863,7 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
if (IsIPadIdiom() || _tabSwitcherIsActive) if (IsIPadIdiom() || _tabSwitcherIsActive)
[_tabSwitcher setOtrTabModel:nil]; [_tabSwitcher setOtrTabModel:nil];
[_browserViewWrangler [_browserViewWrangler deleteIncognitoTabModelState];
deleteIncognitoTabModelState:self.browsingDataRemovalController];
if (otrBVCIsCurrent) { if (otrBVCIsCurrent) {
[self activateBVCAndMakeCurrentBVCPrimary]; [self activateBVCAndMakeCurrentBVCPrimary];
......
...@@ -80,6 +80,7 @@ source_set("browser_state_impl") { ...@@ -80,6 +80,7 @@ source_set("browser_state_impl") {
"//ios/chrome/browser/autofill", "//ios/chrome/browser/autofill",
"//ios/chrome/browser/bookmarks", "//ios/chrome/browser/bookmarks",
"//ios/chrome/browser/browser_state_metrics", "//ios/chrome/browser/browser_state_metrics",
"//ios/chrome/browser/browsing_data",
"//ios/chrome/browser/content_settings", "//ios/chrome/browser/content_settings",
"//ios/chrome/browser/desktop_promotion", "//ios/chrome/browser/desktop_promotion",
"//ios/chrome/browser/dom_distiller", "//ios/chrome/browser/dom_distiller",
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "ios/chrome/browser/autofill/personal_data_manager_factory.h" #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h" #include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remover_factory.h"
#include "ios/chrome/browser/content_settings/cookie_settings_factory.h" #include "ios/chrome/browser/content_settings/cookie_settings_factory.h"
#include "ios/chrome/browser/desktop_promotion/desktop_promotion_sync_service_factory.h" #include "ios/chrome/browser/desktop_promotion/desktop_promotion_sync_service_factory.h"
#include "ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h" #include "ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h"
...@@ -101,6 +102,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() { ...@@ -101,6 +102,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() {
AuthenticationServiceFactory::GetInstance(); AuthenticationServiceFactory::GetInstance();
BrowserListFactory::GetInstance(); BrowserListFactory::GetInstance();
BrowserListSessionServiceFactory::GetInstance(); BrowserListSessionServiceFactory::GetInstance();
BrowsingDataRemoverFactory::GetInstance();
DesktopPromotionSyncServiceFactory::GetInstance(); DesktopPromotionSyncServiceFactory::GetInstance();
feature_engagement::TrackerFactory::GetInstance(); feature_engagement::TrackerFactory::GetInstance();
IOSChromeGCMProfileServiceFactory::GetInstance(); IOSChromeGCMProfileServiceFactory::GetInstance();
......
...@@ -11,8 +11,11 @@ source_set("browsing_data_remove_mask") { ...@@ -11,8 +11,11 @@ source_set("browsing_data_remove_mask") {
source_set("browsing_data") { source_set("browsing_data") {
sources = [ sources = [
"ios_chrome_browsing_data_remover.h", "browsing_data_remover.h",
"ios_chrome_browsing_data_remover.mm", "browsing_data_remover_factory.cc",
"browsing_data_remover_factory.h",
"browsing_data_remover_impl.h",
"browsing_data_remover_impl.mm",
] ]
deps = [ deps = [
"//base", "//base",
...@@ -21,6 +24,7 @@ source_set("browsing_data") { ...@@ -21,6 +24,7 @@ source_set("browsing_data") {
"//components/browsing_data/core", "//components/browsing_data/core",
"//components/history/core/browser", "//components/history/core/browser",
"//components/keyed_service/core", "//components/keyed_service/core",
"//components/keyed_service/ios",
"//components/language/core/browser", "//components/language/core/browser",
"//components/omnibox/browser", "//components/omnibox/browser",
"//components/open_from_clipboard", "//components/open_from_clipboard",
......
specific_include_rules = { specific_include_rules = {
# TODO(crbug.com/619783): Remove this exception. # TODO(crbug.com/619783): Remove this exception.
"^ios_chrome_browsing_data_remover\.mm$": [ "^browsing_data_remover_impl\.mm$": [
"+ios/web/web_state/ui/wk_web_view_configuration_provider.h", "+ios/web/web_state/ui/wk_web_view_configuration_provider.h",
], ],
} }
...@@ -28,9 +28,6 @@ class ChromeBrowserState; ...@@ -28,9 +28,6 @@ class ChromeBrowserState;
timePeriod:(browsing_data::TimePeriod)timePeriod timePeriod:(browsing_data::TimePeriod)timePeriod
completionHandler:(ProceduralBlock)completionHandler; completionHandler:(ProceduralBlock)completionHandler;
// Called when |browserState| is destroyed.
- (void)browserStateDestroyed:(ios::ChromeBrowserState*)browserState;
// Returns YES if browsing data for |browserState| is still being cleared. // Returns YES if browsing data for |browserState| is still being cleared.
- (BOOL)hasPendingRemovalOperations:(ios::ChromeBrowserState*)browserState; - (BOOL)hasPendingRemovalOperations:(ios::ChromeBrowserState*)browserState;
......
...@@ -12,19 +12,14 @@ ...@@ -12,19 +12,14 @@
#include "base/logging.h" #include "base/logging.h"
#import "base/mac/bind_objc_block.h" #import "base/mac/bind_objc_block.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h" #include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h" #include "ios/chrome/browser/browsing_data/browsing_data_remover.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remover_factory.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
@implementation BrowsingDataRemovalController { @implementation BrowsingDataRemovalController
// Mapping from ChromeBrowserState to the IOSChromeBrowsingDataRemover used
// for removal of the data on that instance.
base::flat_map<ios::ChromeBrowserState*,
std::unique_ptr<IOSChromeBrowsingDataRemover>>
_browingDataRemovers;
}
- (void)removeBrowsingDataFromBrowserState: - (void)removeBrowsingDataFromBrowserState:
(ios::ChromeBrowserState*)browserState (ios::ChromeBrowserState*)browserState
...@@ -32,39 +27,18 @@ ...@@ -32,39 +27,18 @@
timePeriod:(browsing_data::TimePeriod)timePeriod timePeriod:(browsing_data::TimePeriod)timePeriod
completionHandler:(ProceduralBlock)completionHandler { completionHandler:(ProceduralBlock)completionHandler {
DCHECK(browserState); DCHECK(browserState);
BrowsingDataRemoverFactory::GetForBrowserState(browserState)
// The block capture |self| (via accessing the ivar _browingDataRemovers). ->Remove(timePeriod, mask, base::BindBlockArc(^{
// This is a workaround to ensure the callback is invoked even if the object
// is destroyed when getting out of scope.
__block BrowsingDataRemovalController* strongSelf = self;
ProceduralBlock browsingDataCleared = ^{
if (completionHandler) if (completionHandler)
completionHandler(); completionHandler();
strongSelf = nil; }));
};
auto iterator = _browingDataRemovers.find(browserState);
if (iterator == _browingDataRemovers.end()) {
iterator =
_browingDataRemovers
.emplace(
browserState,
std::make_unique<IOSChromeBrowsingDataRemover>(browserState))
.first;
DCHECK(iterator != _browingDataRemovers.end());
}
iterator->second->Remove(timePeriod, mask,
base::BindBlockArc(browsingDataCleared));
} }
- (BOOL)hasPendingRemovalOperations:(ios::ChromeBrowserState*)browserState { - (BOOL)hasPendingRemovalOperations:(ios::ChromeBrowserState*)browserState {
auto iterator = _browingDataRemovers.find(browserState); DCHECK(browserState);
return iterator != _browingDataRemovers.end() && BrowsingDataRemover* browsingDataRemover =
iterator->second->is_removing(); BrowsingDataRemoverFactory::GetForBrowserStateIfExists(browserState);
} return browsingDataRemover && browsingDataRemover->IsRemoving();
- (void)browserStateDestroyed:(ios::ChromeBrowserState*)browserState {
_browingDataRemovers.erase(browserState);
} }
@end @end
...@@ -71,7 +71,6 @@ TEST_F(BrowsingDataRemovalControllerTest, PerformAfterBrowserStateDestruction) { ...@@ -71,7 +71,6 @@ TEST_F(BrowsingDataRemovalControllerTest, PerformAfterBrowserStateDestruction) {
}]; }];
// Destroy the BrowserState immediately. // Destroy the BrowserState immediately.
[removal_controller browserStateDestroyed:browser_state_.get()];
browser_state_.reset(); browser_state_.reset();
run_loop.RunUntilIdle(); run_loop.RunUntilIdle();
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_H_
#define IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_H_
#include "base/callback.h"
#include "base/macros.h"
#include "components/browsing_data/core/browsing_data_utils.h"
#include "components/keyed_service/core/keyed_service.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
// BrowsingDataRemover is responsible for removing data related to
// browsing: history, downloads, cookies, ...
class BrowsingDataRemover : public KeyedService {
public:
BrowsingDataRemover() = default;
~BrowsingDataRemover() override = default;
// Is the service currently in the process of removing data?
virtual bool IsRemoving() const = 0;
// Removes browsing data for the given |time_period| with data types specified
// by |remove_mask|. The |callback| is invoked asynchronously when the data
// has been removed.
virtual void Remove(browsing_data::TimePeriod time_period,
BrowsingDataRemoveMask remove_mask,
base::OnceClosure callback) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemover);
};
#endif // IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_H_
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/browsing_data/browsing_data_remover_factory.h"
#include <utility>
#include "base/memory/singleton.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remover_impl.h"
// static
BrowsingDataRemover* BrowsingDataRemoverFactory::GetForBrowserState(
ios::ChromeBrowserState* browser_state) {
return static_cast<BrowsingDataRemover*>(
GetInstance()->GetServiceForBrowserState(browser_state, true));
}
// static
BrowsingDataRemover* BrowsingDataRemoverFactory::GetForBrowserStateIfExists(
ios::ChromeBrowserState* browser_state) {
return static_cast<BrowsingDataRemover*>(
GetInstance()->GetServiceForBrowserState(browser_state, false));
}
// static
BrowsingDataRemoverFactory* BrowsingDataRemoverFactory::GetInstance() {
return base::Singleton<BrowsingDataRemoverFactory>::get();
}
BrowsingDataRemoverFactory::BrowsingDataRemoverFactory()
: BrowserStateKeyedServiceFactory(
"BrowsingDataRemover",
BrowserStateDependencyManager::GetInstance()) {}
BrowsingDataRemoverFactory::~BrowsingDataRemoverFactory() = default;
std::unique_ptr<KeyedService>
BrowsingDataRemoverFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromBrowserState(context);
return std::make_unique<BrowsingDataRemoverImpl>(browser_state);
}
web::BrowserState* BrowsingDataRemoverFactory::GetBrowserStateToUse(
web::BrowserState* context) const {
return GetBrowserStateOwnInstanceInIncognito(context);
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_FACTORY_H_
#define IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_FACTORY_H_
#include <memory>
#include "base/macros.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
namespace base {
template <typename T>
struct DefaultSingletonTraits;
} // namespace base
namespace ios {
class ChromeBrowserState;
}
class BrowsingDataRemover;
// Singleton that owns all BrowsingDataRemovers and associates them with
// ios::ChromeBrowserState.
class BrowsingDataRemoverFactory : public BrowserStateKeyedServiceFactory {
public:
static BrowsingDataRemover* GetForBrowserState(
ios::ChromeBrowserState* browser_state);
static BrowsingDataRemover* GetForBrowserStateIfExists(
ios::ChromeBrowserState* browser_state);
static BrowsingDataRemoverFactory* GetInstance();
private:
friend struct base::DefaultSingletonTraits<BrowsingDataRemoverFactory>;
BrowsingDataRemoverFactory();
~BrowsingDataRemoverFactory() override;
// BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
web::BrowserState* GetBrowserStateToUse(
web::BrowserState* context) const override;
DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverFactory);
};
#endif // IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_FACTORY_H_
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_BROWSING_DATA_IOS_CHROME_BROWSING_DATA_REMOVER_H_ #ifndef IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_
#define IOS_CHROME_BROWSER_BROWSING_DATA_IOS_CHROME_BROWSING_DATA_REMOVER_H_ #define IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_
#include <memory> #include <memory>
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "components/prefs/pref_member.h" #include "components/prefs/pref_member.h"
#include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h" #include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remover.h"
namespace ios { namespace ios {
class ChromeBrowserState; class ChromeBrowserState;
...@@ -27,24 +28,23 @@ namespace net { ...@@ -27,24 +28,23 @@ namespace net {
class URLRequestContextGetter; class URLRequestContextGetter;
} }
// IOSChromeBrowsingDataRemover is responsible for removing data related to // BrowsingDataRemoverImpl is the concrete implementation of the
// browsing: visits in url database, downloads, cookies ... // BrowsingDataRemover abstract interface.
class IOSChromeBrowsingDataRemover { class BrowsingDataRemoverImpl : public BrowsingDataRemover {
public: public:
// Creates a IOSChromeBrowsingDataRemover to remove browser data from the // Creates a BrowsingDataRemoverImpl to remove browser data from the
// specified ChromeBrowserstate. Use Remove to initiate the removal. // specified ChromeBrowserstate. Use Remove to initiate the removal.
explicit IOSChromeBrowsingDataRemover(ios::ChromeBrowserState* browser_state); explicit BrowsingDataRemoverImpl(ios::ChromeBrowserState* browser_state);
~IOSChromeBrowsingDataRemover(); ~BrowsingDataRemoverImpl() override;
// Is the object currently in the process of removing data? // KeyedService implementation.
bool is_removing() { return is_removing_; } void Shutdown() override;
// Removes browsing data for the given |time_range| with data types specified // BrowsingDataRemover implementation.
// by |remove_mask|. The |callback| is invoked asynchronously when the data bool IsRemoving() const override;
// has been removed.
void Remove(browsing_data::TimePeriod time_period, void Remove(browsing_data::TimePeriod time_period,
BrowsingDataRemoveMask remove_mask, BrowsingDataRemoveMask remove_mask,
base::OnceClosure callback); base::OnceClosure callback) override;
private: private:
// Represents a single removal task. Contains all parameters to execute it. // Represents a single removal task. Contains all parameters to execute it.
...@@ -98,9 +98,9 @@ class IOSChromeBrowsingDataRemover { ...@@ -98,9 +98,9 @@ class IOSChromeBrowsingDataRemover {
// created by this method have been invoked. // created by this method have been invoked.
base::OnceClosure CreatePendingTaskCompletionClosure(); base::OnceClosure CreatePendingTaskCompletionClosure();
// Returns a weak pointer to IOSChromeBrowsingDataRemover for internal // Returns a weak pointer to BrowsingDataRemoverImpl for internal
// purposes. // purposes.
base::WeakPtr<IOSChromeBrowsingDataRemover> GetWeakPtr(); base::WeakPtr<BrowsingDataRemoverImpl> GetWeakPtr();
// This object is sequence affine. // This object is sequence affine.
SEQUENCE_CHECKER(sequence_checker_); SEQUENCE_CHECKER(sequence_checker_);
...@@ -125,9 +125,9 @@ class IOSChromeBrowsingDataRemover { ...@@ -125,9 +125,9 @@ class IOSChromeBrowsingDataRemover {
std::unique_ptr<TemplateURLService::Subscription> template_url_subscription_; std::unique_ptr<TemplateURLService::Subscription> template_url_subscription_;
base::WeakPtrFactory<IOSChromeBrowsingDataRemover> weak_ptr_factory_; base::WeakPtrFactory<BrowsingDataRemoverImpl> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(IOSChromeBrowsingDataRemover); DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImpl);
}; };
#endif // IOS_CHROME_BROWSER_BROWSING_DATA_IOS_CHROME_BROWSING_DATA_REMOVER_H_ #endif // IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h" #include "ios/chrome/browser/browsing_data/browsing_data_remover_impl.h"
#import <WebKit/WebKit.h> #import <WebKit/WebKit.h>
...@@ -153,8 +153,7 @@ void ClearChannelIDs( ...@@ -153,8 +153,7 @@ void ClearChannelIDs(
} // namespace } // namespace
IOSChromeBrowsingDataRemover::RemovalTask::RemovalTask( BrowsingDataRemoverImpl::RemovalTask::RemovalTask(base::Time delete_begin,
base::Time delete_begin,
base::Time delete_end, base::Time delete_end,
BrowsingDataRemoveMask mask, BrowsingDataRemoveMask mask,
base::OnceClosure callback) base::OnceClosure callback)
...@@ -163,12 +162,12 @@ IOSChromeBrowsingDataRemover::RemovalTask::RemovalTask( ...@@ -163,12 +162,12 @@ IOSChromeBrowsingDataRemover::RemovalTask::RemovalTask(
mask(mask), mask(mask),
callback(std::move(callback)) {} callback(std::move(callback)) {}
IOSChromeBrowsingDataRemover::RemovalTask::RemovalTask( BrowsingDataRemoverImpl::RemovalTask::RemovalTask(
RemovalTask&& other) noexcept = default; RemovalTask&& other) noexcept = default;
IOSChromeBrowsingDataRemover::RemovalTask::~RemovalTask() = default; BrowsingDataRemoverImpl::RemovalTask::~RemovalTask() = default;
IOSChromeBrowsingDataRemover::IOSChromeBrowsingDataRemover( BrowsingDataRemoverImpl::BrowsingDataRemoverImpl(
ios::ChromeBrowserState* browser_state) ios::ChromeBrowserState* browser_state)
: browser_state_(browser_state), : browser_state_(browser_state),
context_getter_(browser_state->GetRequestContext()), context_getter_(browser_state->GetRequestContext()),
...@@ -177,10 +176,10 @@ IOSChromeBrowsingDataRemover::IOSChromeBrowsingDataRemover( ...@@ -177,10 +176,10 @@ IOSChromeBrowsingDataRemover::IOSChromeBrowsingDataRemover(
DCHECK(browser_state); DCHECK(browser_state);
} }
IOSChromeBrowsingDataRemover::~IOSChromeBrowsingDataRemover() { BrowsingDataRemoverImpl::~BrowsingDataRemoverImpl() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (is_removing()) { if (is_removing_) {
VLOG(1) << "IOSChromeBrowsingDataRemover shuts down with " VLOG(1) << "BrowsingDataRemoverImpl shuts down with "
<< removal_queue_.size() << " pending tasks" << removal_queue_.size() << " pending tasks"
<< (pending_tasks_count_ ? " (including one in progress)" : ""); << (pending_tasks_count_ ? " (including one in progress)" : "");
} }
...@@ -204,13 +203,24 @@ IOSChromeBrowsingDataRemover::~IOSChromeBrowsingDataRemover() { ...@@ -204,13 +203,24 @@ IOSChromeBrowsingDataRemover::~IOSChromeBrowsingDataRemover() {
} }
} }
void IOSChromeBrowsingDataRemover::SetRemoving(bool is_removing) { void BrowsingDataRemoverImpl::Shutdown() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
weak_ptr_factory_.InvalidateWeakPtrs();
browser_state_ = nullptr;
}
bool BrowsingDataRemoverImpl::IsRemoving() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return is_removing_;
}
void BrowsingDataRemoverImpl::SetRemoving(bool is_removing) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(is_removing_ != is_removing); DCHECK(is_removing_ != is_removing);
is_removing_ = is_removing; is_removing_ = is_removing;
} }
void IOSChromeBrowsingDataRemover::Remove(browsing_data::TimePeriod time_period, void BrowsingDataRemoverImpl::Remove(browsing_data::TimePeriod time_period,
BrowsingDataRemoveMask mask, BrowsingDataRemoveMask mask,
base::OnceClosure callback) { base::OnceClosure callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
...@@ -254,7 +264,7 @@ void IOSChromeBrowsingDataRemover::Remove(browsing_data::TimePeriod time_period, ...@@ -254,7 +264,7 @@ void IOSChromeBrowsingDataRemover::Remove(browsing_data::TimePeriod time_period,
} }
} }
void IOSChromeBrowsingDataRemover::RunNextTask() { void BrowsingDataRemoverImpl::RunNextTask() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!removal_queue_.empty()); DCHECK(!removal_queue_.empty());
const RemovalTask& removal_task = removal_queue_.front(); const RemovalTask& removal_task = removal_queue_.front();
...@@ -262,7 +272,7 @@ void IOSChromeBrowsingDataRemover::RunNextTask() { ...@@ -262,7 +272,7 @@ void IOSChromeBrowsingDataRemover::RunNextTask() {
removal_task.mask); removal_task.mask);
} }
void IOSChromeBrowsingDataRemover::RemoveImpl(base::Time delete_begin, void BrowsingDataRemoverImpl::RemoveImpl(base::Time delete_begin,
base::Time delete_end, base::Time delete_end,
BrowsingDataRemoveMask mask) { BrowsingDataRemoveMask mask) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
...@@ -357,7 +367,7 @@ void IOSChromeBrowsingDataRemover::RemoveImpl(base::Time delete_begin, ...@@ -357,7 +367,7 @@ void IOSChromeBrowsingDataRemover::RemoveImpl(base::Time delete_begin,
if (keywords_model && !keywords_model->loaded()) { if (keywords_model && !keywords_model->loaded()) {
template_url_subscription_ = template_url_subscription_ =
keywords_model->RegisterOnLoadedCallback(AdaptCallbackForRepeating( keywords_model->RegisterOnLoadedCallback(AdaptCallbackForRepeating(
base::BindOnce(&IOSChromeBrowsingDataRemover::OnKeywordsLoaded, base::BindOnce(&BrowsingDataRemoverImpl::OnKeywordsLoaded,
GetWeakPtr(), delete_begin, delete_end, GetWeakPtr(), delete_begin, delete_end,
CreatePendingTaskCompletionClosure()))); CreatePendingTaskCompletionClosure())));
keywords_model->Load(); keywords_model->Load();
...@@ -542,7 +552,7 @@ void IOSChromeBrowsingDataRemover::RemoveImpl(base::Time delete_begin, ...@@ -542,7 +552,7 @@ void IOSChromeBrowsingDataRemover::RemoveImpl(base::Time delete_begin,
// TODO(crbug.com/619783): removing data from WkWebsiteDataStore should be // TODO(crbug.com/619783): removing data from WkWebsiteDataStore should be
// implemented by //ios/web. Once this is available remove this and use the // implemented by //ios/web. Once this is available remove this and use the
// new API. // new API.
void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore( void BrowsingDataRemoverImpl::RemoveDataFromWKWebsiteDataStore(
base::Time delete_begin, base::Time delete_begin,
base::Time delete_end, base::Time delete_end,
BrowsingDataRemoveMask mask) { BrowsingDataRemoveMask mask) {
...@@ -587,7 +597,7 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore( ...@@ -587,7 +597,7 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore(
if (IsRemoveDataMaskSet(mask, BrowsingDataRemoveMask::REMOVE_VISITED_LINKS)) { if (IsRemoveDataMaskSet(mask, BrowsingDataRemoveMask::REMOVE_VISITED_LINKS)) {
ProceduralBlock previous_completion_block = completion_block; ProceduralBlock previous_completion_block = completion_block;
base::WeakPtr<IOSChromeBrowsingDataRemover> weak_ptr = GetWeakPtr(); base::WeakPtr<BrowsingDataRemoverImpl> weak_ptr = GetWeakPtr();
// TODO(crbug.com/557963): Purging the WKProcessPool is a workaround for // TODO(crbug.com/557963): Purging the WKProcessPool is a workaround for
// the fact that there is no public API to clear visited links in // the fact that there is no public API to clear visited links in
...@@ -597,7 +607,7 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore( ...@@ -597,7 +607,7 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore(
// it is not a problem in practice since there is no UI to only have // it is not a problem in practice since there is no UI to only have
// visited links be removed but not cookies. // visited links be removed but not cookies.
completion_block = ^{ completion_block = ^{
if (IOSChromeBrowsingDataRemover* strong_ptr = weak_ptr.get()) { if (BrowsingDataRemoverImpl* strong_ptr = weak_ptr.get()) {
web::WKWebViewConfigurationProvider::FromBrowserState( web::WKWebViewConfigurationProvider::FromBrowserState(
strong_ptr->browser_state_) strong_ptr->browser_state_)
.Purge(); .Purge();
...@@ -633,13 +643,12 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore( ...@@ -633,13 +643,12 @@ void IOSChromeBrowsingDataRemover::RemoveDataFromWKWebsiteDataStore(
} }
} }
void IOSChromeBrowsingDataRemover::OnKeywordsLoaded( void BrowsingDataRemoverImpl::OnKeywordsLoaded(base::Time delete_begin,
base::Time delete_begin,
base::Time delete_end, base::Time delete_end,
base::OnceClosure callback) { base::OnceClosure callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// Deletes the entries from the model, and if we're not waiting on anything // Deletes the entries from the model, and if we're not waiting on anything
// else notifies observers and deletes this IOSChromeBrowsingDataRemover. // else notifies observers and deletes this BrowsingDataRemoverImpl.
TemplateURLService* model = TemplateURLService* model =
ios::TemplateURLServiceFactory::GetForBrowserState(browser_state_); ios::TemplateURLServiceFactory::GetForBrowserState(browser_state_);
model->RemoveAutoGeneratedBetween(delete_begin, delete_end); model->RemoveAutoGeneratedBetween(delete_begin, delete_end);
...@@ -647,7 +656,7 @@ void IOSChromeBrowsingDataRemover::OnKeywordsLoaded( ...@@ -647,7 +656,7 @@ void IOSChromeBrowsingDataRemover::OnKeywordsLoaded(
std::move(callback).Run(); std::move(callback).Run();
} }
void IOSChromeBrowsingDataRemover::NotifyRemovalComplete() { void BrowsingDataRemoverImpl::NotifyRemovalComplete() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!removal_queue_.empty()); DCHECK(!removal_queue_.empty());
...@@ -679,10 +688,10 @@ void IOSChromeBrowsingDataRemover::NotifyRemovalComplete() { ...@@ -679,10 +688,10 @@ void IOSChromeBrowsingDataRemover::NotifyRemovalComplete() {
// RunNextTask() is not called before the callback has been invoked. // RunNextTask() is not called before the callback has been invoked.
current_task_runner->PostTask( current_task_runner->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&IOSChromeBrowsingDataRemover::RunNextTask, GetWeakPtr())); base::BindOnce(&BrowsingDataRemoverImpl::RunNextTask, GetWeakPtr()));
} }
void IOSChromeBrowsingDataRemover::OnTaskComplete() { void BrowsingDataRemoverImpl::OnTaskComplete() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// TODO(crbug.com/305259): This should also observe session clearing (what // TODO(crbug.com/305259): This should also observe session clearing (what
...@@ -697,17 +706,15 @@ void IOSChromeBrowsingDataRemover::OnTaskComplete() { ...@@ -697,17 +706,15 @@ void IOSChromeBrowsingDataRemover::OnTaskComplete() {
} }
base::OnceClosure base::OnceClosure
IOSChromeBrowsingDataRemover::CreatePendingTaskCompletionClosure() { BrowsingDataRemoverImpl::CreatePendingTaskCompletionClosure() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++pending_tasks_count_; ++pending_tasks_count_;
return base::BindOnce(&IOSChromeBrowsingDataRemover::OnTaskComplete, return base::BindOnce(&BrowsingDataRemoverImpl::OnTaskComplete, GetWeakPtr());
GetWeakPtr());
} }
base::WeakPtr<IOSChromeBrowsingDataRemover> base::WeakPtr<BrowsingDataRemoverImpl> BrowsingDataRemoverImpl::GetWeakPtr() {
IOSChromeBrowsingDataRemover::GetWeakPtr() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::WeakPtr<IOSChromeBrowsingDataRemover> weak_ptr = base::WeakPtr<BrowsingDataRemoverImpl> weak_ptr =
weak_ptr_factory_.GetWeakPtr(); weak_ptr_factory_.GetWeakPtr();
// Immediately bind the weak pointer to the current sequence. This makes it // Immediately bind the weak pointer to the current sequence. This makes it
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#import "ios/chrome/browser/ui/main/browser_view_information.h" #import "ios/chrome/browser/ui/main/browser_view_information.h"
@protocol ApplicationCommands; @protocol ApplicationCommands;
@class BrowsingDataRemovalController;
@class DeviceSharingManager; @class DeviceSharingManager;
@protocol TabModelObserver; @protocol TabModelObserver;
...@@ -58,10 +57,8 @@ class ChromeBrowserState; ...@@ -58,10 +57,8 @@ class ChromeBrowserState;
// tab model. This class creates and manages the state of the sharing manager. // tab model. This class creates and manages the state of the sharing manager.
- (void)updateDeviceSharingManager; - (void)updateDeviceSharingManager;
// Delete any incognito tab model state, using |removalController| to handle // Delete the incognito tab model state.
// the storage removal. - (void)deleteIncognitoTabModelState;
- (void)deleteIncognitoTabModelState:
(BrowsingDataRemovalController*)removalController;
// Called before the instance is deallocated. // Called before the instance is deallocated.
- (void)shutdown; - (void)shutdown;
......
...@@ -4,11 +4,10 @@ ...@@ -4,11 +4,10 @@
#import "ios/chrome/browser/ui/main/browser_view_wrangler.h" #import "ios/chrome/browser/ui/main/browser_view_wrangler.h"
#include "base/files/file_path.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/browsing_data/browsing_data_removal_controller.h"
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h"
#include "ios/chrome/browser/crash_report/crash_report_helper.h" #include "ios/chrome/browser/crash_report/crash_report_helper.h"
#import "ios/chrome/browser/device_sharing/device_sharing_manager.h" #import "ios/chrome/browser/device_sharing/device_sharing_manager.h"
#import "ios/chrome/browser/sessions/session_ios.h" #import "ios/chrome/browser/sessions/session_ios.h"
...@@ -253,8 +252,7 @@ ...@@ -253,8 +252,7 @@
[self.deviceSharingManager updateActiveURL:activeURL]; [self.deviceSharingManager updateActiveURL:activeURL];
} }
- (void)deleteIncognitoTabModelState: - (void)deleteIncognitoTabModelState {
(BrowsingDataRemovalController*)removalController {
// It is theoretically possible that a Tab has been added to |_otrTabModel| // It is theoretically possible that a Tab has been added to |_otrTabModel|
// since the deletion has been scheduled. It is unlikely to happen for real // since the deletion has been scheduled. It is unlikely to happen for real
// because it would require superhuman speed. // because it would require superhuman speed.
...@@ -269,9 +267,6 @@ ...@@ -269,9 +267,6 @@
// following code. // following code.
BOOL otrBVCIsCurrent = self.currentBVC == _otrBVC; BOOL otrBVCIsCurrent = self.currentBVC == _otrBVC;
@autoreleasepool { @autoreleasepool {
ios::ChromeBrowserState* otrBrowserState =
_browserState->GetOffTheRecordChromeBrowserState();
[removalController browserStateDestroyed:otrBrowserState];
self.otrBVC = nil; self.otrBVC = nil;
// There's no guarantee the tab model was ever added to the BVC (or even // There's no guarantee the tab model was ever added to the BVC (or even
// that the BVC was created), so ensure the tab model gets notified. // that the BVC was created), so ensure the tab model gets notified.
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/browsing_data/browsing_data_removal_controller.h" #import "ios/chrome/browser/browsing_data/browsing_data_removal_controller.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h" #include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h"
#include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/chrome_url_constants.h"
#include "ios/chrome/browser/experimental_flags.h" #include "ios/chrome/browser/experimental_flags.h"
#include "ios/chrome/browser/feature_engagement/tracker_factory.h" #include "ios/chrome/browser/feature_engagement/tracker_factory.h"
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#import "ios/chrome/app/main_controller.h" #import "ios/chrome/app/main_controller.h"
#import "ios/chrome/app/main_controller_private.h" #import "ios/chrome/app/main_controller_private.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h" #include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
#import "ios/chrome/test/app/chrome_test_util.h" #import "ios/chrome/test/app/chrome_test_util.h"
#import "ios/testing/wait_util.h" #import "ios/testing/wait_util.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment