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