// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_NETWORK_BRIDGE_COOKIE_JAR_H_
#define COBALT_NETWORK_BRIDGE_COOKIE_JAR_H_

#include <string>

#include "googleurl/src/gurl.h"

namespace cobalt {
namespace network_bridge {

// An interface to allow interaction with the cookie store, which is owned
// by the network module, without requiring a dependency on the network module.
class CookieJar {
 public:
  CookieJar() {}
  virtual ~CookieJar() {}
  // Return all the cookies for this origin in a string, delimited by ';'
  virtual std::string GetCookies(const GURL& origin) = 0;
  // Set a single cookie for the origin. Format should be as per
  // CookieStore::SetCookieWithOptionsAsync()
  virtual void SetCookie(const GURL& origin,
                         const std::string& cookie_line) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(CookieJar);
};

}  // namespace network_bridge
}  // namespace cobalt

#endif  // COBALT_NETWORK_BRIDGE_COOKIE_JAR_H_
