// Copyright 2014 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 NET_BASE_SDCH_OBSERVER_H_
#define NET_BASE_SDCH_OBSERVER_H_

#include <iosfwd>
#include <string>

#include "net/base/net_export.h"

class GURL;

namespace net {

class SdchManager;

// Observer interface for SDCH.  Observers can register with
// the SdchManager to receive notifications of various SDCH events.
class NET_EXPORT SdchObserver {
 public:
  virtual ~SdchObserver();

  // A dictionary has been added to the observed manager.
  virtual void OnDictionaryAdded(const GURL& dictionary_url,
                                 const std::string& server_hash) = 0;

  // A dictionary has been removed from the observed manager. Note that this is
  // not called when dictionaries are cleared, so observers that want to track
  // the loaded dictionary set need to observe OnClearDictionaries as well.
  virtual void OnDictionaryRemoved(const std::string& server_hash) = 0;

  // TODO(rdsmith): Add signal that an Avail-Dictionary header was generated.
  // Should be added if/when an observer wants to use it to fine-tune
  // dictionary deprecation (e.g. if Avail-Dictionary is generated and
  // the remote *doesn't* use it, that should deprecate the dictionary faster)

  // A SDCH encoded response was received and the specified dictionary
  // was used to decode it.  This notification only occurs for successful
  // decodes.  Note that this notification may occur for dictionaries that
  // have been deleted from the SdchManager, since DictionarySets retain
  // references to deleted dictionaries.  Observers must handle this case.
  // TODO(rdsmith): Should this notification indicate how much
  // compression the dictionary provided?
  virtual void OnDictionaryUsed(const std::string& server_hash) = 0;

  // A "Get-Dictionary" header has been seen.
  virtual void OnGetDictionary(const GURL& request_url,
                               const GURL& dictionary_url) = 0;

  // Notification that SDCH has received a request to clear all
  // its dictionaries.
  virtual void OnClearDictionaries() = 0;
};

}  // namespace net

#endif  // NET_BASE_SDCH_MANAGER_H_
