// Copyright 2015 The Cobalt Authors. 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_CSSOM_URL_VALUE_H_
#define COBALT_CSSOM_URL_VALUE_H_

#include <string>

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "cobalt/base/polymorphic_equatable.h"
#include "cobalt/cssom/property_value.h"
#include "googleurl/src/gurl.h"

namespace cobalt {
namespace cssom {

class PropertyValueVisitor;

// A URL is a pointer to a resource and corresponds to the URI token in the
// grammar. It is generated by CSS parser when parsing URL values.
//  https://www.w3.org/TR/css3-values/#urls
class URLValue : public PropertyValue {
 public:
  explicit URLValue(const std::string& url);

  void Accept(PropertyValueVisitor* visitor) override;

  const std::string& value() const { return url_; }

  std::string ToString() const override { return "url(" + url_ + ")"; }

  GURL Resolve(const GURL& base_url) const;

  bool is_absolute() const { return is_absolute_; }

  bool operator==(const URLValue& other) const { return url_ == other.url_; }

  DEFINE_POLYMORPHIC_EQUATABLE_TYPE(URLValue);

 private:
  ~URLValue() override {}

  const std::string url_;
  const bool is_absolute_;

  DISALLOW_COPY_AND_ASSIGN(URLValue);
};

}  // namespace cssom
}  // namespace cobalt

#endif  // COBALT_CSSOM_URL_VALUE_H_
