blob: 22e21fa7ed53ab5246ed54ea6a700b8e2b8f2ce4 [file] [log] [blame]
// Copyright 2019 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_WEB_BROWSING_DATA_BROWSING_DATA_REMOVER_H_
#define IOS_WEB_BROWSING_DATA_BROWSING_DATA_REMOVER_H_
#import <Foundation/Foundation.h>
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/supports_user_data.h"
#include "base/time/time.h"
#import "ios/web/public/browsing_data/browsing_data_removing_util.h"
@protocol BrowsingDataRemoverObserver;
@class WKWebView;
namespace web {
class BrowserState;
// Class used to removes the browsing data stored by the WebKit data store.
class BrowsingDataRemover : public base::SupportsUserData::Data {
public:
explicit BrowsingDataRemover(web::BrowserState* browser_state);
~BrowsingDataRemover() override;
// Returns the BrowsingDataRemover associated with |browser_state.|
// Lazily creates one if an BrowsingDataRemover is not already associated with
// the |browser_state|. |browser_state| cannot be a nullptr.
static BrowsingDataRemover* FromBrowserState(BrowserState* browser_state);
// Clears the browsing data. |modified_since| is the data since which all data
// is removed. |closure| is called when the browsing data have been cleared.
void ClearBrowsingData(ClearBrowsingDataMask types,
base::Time modified_since,
base::OnceClosure closure);
void AddObserver(id<BrowsingDataRemoverObserver> observer);
void RemoveObserver(id<BrowsingDataRemoverObserver> observer);
private:
web::BrowserState* browser_state_; // weak, owns this object.
// The list of observers. Holds weak references.
NSHashTable<id<BrowsingDataRemoverObserver>>* observers_list_;
// Dummy WKWebView. A WKWebView object is created before deleting cookies. and
// is deleted after deleting cookies is completed. this is a workaround that
// makes sure that there is a WKWebView object alive while accessing
// WKHTTPCookieStore.
WKWebView* dummy_web_view_ = nil;
base::WeakPtrFactory<BrowsingDataRemover> weak_ptr_factory_;
};
} // namespace web
#endif // IOS_WEB_BROWSING_DATA_BROWSING_DATA_REMOVER_H_