15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_CHANNEL_ID_HELPER_H_ 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_CHANNEL_ID_HELPER_H_ 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <map> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/callback.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/ssl/channel_id_store.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace net { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass URLRequestContextGetter; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// BrowsingDataChannelIDHelper is an interface for classes dealing with 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// aggregating and deleting browsing data stored in the channel ID store. 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// A client of this class need to call StartFetching from the UI thread to 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// initiate the flow, and it'll be notified by the callback in its UI thread at 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// some later point. 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BrowsingDataChannelIDHelper 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : public base::RefCountedThreadSafe<BrowsingDataChannelIDHelper> { 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Create a BrowsingDataChannelIDHelper instance for the given 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |request_context|. 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static BrowsingDataChannelIDHelper* Create( 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::URLRequestContextGetter* request_context); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) typedef base::Callback< 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void(const net::ChannelIDStore::ChannelIDList&)> 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FetchResultCallback; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Starts the fetching process, which will notify its completion via 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // callback. 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // This must be called only in the UI thread. 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void StartFetching(const FetchResultCallback& callback) = 0; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Requests a single channel ID to be deleted. This must be called in 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the UI thread. 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DeleteChannelID(const std::string& server_id) = 0; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) friend class base::RefCountedThreadSafe<BrowsingDataChannelIDHelper>; 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~BrowsingDataChannelIDHelper() {} 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// This class is a thin wrapper around BrowsingDataChannelIDHelper that 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// does not fetch its information from the ChannelIDService, but gets them 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// passed as a parameter during construction. 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class CannedBrowsingDataChannelIDHelper 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : public BrowsingDataChannelIDHelper { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CannedBrowsingDataChannelIDHelper(); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Add an ChannelID to the set of canned channel IDs that is 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // returned by this helper. 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void AddChannelID( 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const net::ChannelIDStore::ChannelID& channel_id); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Clears the list of canned channel IDs. 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Reset(); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // True if no ChannelIDs are currently stored. 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool empty() const; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns the current number of channel IDs. 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) size_t GetChannelIDCount() const; 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // BrowsingDataChannelIDHelper methods. 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void StartFetching(const FetchResultCallback& callback) OVERRIDE; 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DeleteChannelID(const std::string& server_id) OVERRIDE; 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~CannedBrowsingDataChannelIDHelper(); 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void FinishFetching(); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) typedef std::map<std::string, net::ChannelIDStore::ChannelID> 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChannelIDMap; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChannelIDMap channel_id_map_; 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FetchResultCallback completion_callback_; 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CannedBrowsingDataChannelIDHelper); 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_CHANNEL_ID_HELPER_H_ 89