// Copyright (c) 2016 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_SPDY_SERVER_PUSH_DELEGATE_H_
#define NET_SPDY_SERVER_PUSH_DELEGATE_H_

#include <memory>

#include "net/base/net_export.h"
#include "net/log/net_log_with_source.h"
#include "url/gurl.h"

namespace net {

// An interface to a class that should be notified when session receives server
// push.
class NET_EXPORT_PRIVATE ServerPushDelegate {
 public:
  // An interface to a class that reflects information on the pushed request.
  class NET_EXPORT ServerPushHelper {
   public:
    virtual ~ServerPushHelper() {}

    // Cancels the push if it is not claimed yet.
    virtual void Cancel() = 0;

    // Gets the URL of the pushed request.
    virtual const GURL& GetURL() const = 0;

    // Gets the network isolation key for the pushed request.
    virtual NetworkIsolationKey GetNetworkIsolationKey() const = 0;
  };

  virtual ~ServerPushDelegate() {}

  // Invoked by session when a push promise has been received.
  virtual void OnPush(std::unique_ptr<ServerPushHelper> push_helper,
                      const NetLogWithSource& session_net_log) = 0;
};

}  // namespace net

#endif  // NET_SPDY_SERVER_PUSH_DELEGATE_H_
