blob: 276e1766d7429278b1e6d4178f2001ad56df8a3a [file] [log] [blame]
/*
* Copyright 2012 Google Inc.
*
* 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.
*/
// Author: jefftk@google.com (Jeff Kaufman)
//
// A collection of content-types and their attributes.
#ifndef PAGESPEED_KERNEL_HTTP_SEMANTIC_TYPE_H_
#define PAGESPEED_KERNEL_HTTP_SEMANTIC_TYPE_H_
#include "pagespeed/kernel/base/string.h"
#include "pagespeed/kernel/base/string_util.h"
namespace net_instaweb {
namespace semantic_type {
// When we see a url, we are pretty sure what kind of resource it points to from
// context. See resource_tag_scanner.h for the definitions of the categories.
// They are broader categories than ContentType::Type because contextual
// information is limited. <img src="URL"> may be kPng, kGif, kJpeg, kWebp, or
// another image type. Another difference is that content type represents the
// actual type we found when we fetched the resource, while the semantic type is
// just what we expect to find when we do. If the webmaster writes something
// like <img src=song.mp3> and song.mp3 is a css file served with content type
// text/javascript, the semantic type will be kImage, the content type will by
// kJavascript, and we'll ignore the extension (mp3) and actual contents of the
// file (which will look like css).
enum Category {
kHyperlink,
kImage,
kOtherResource,
kPrefetch,
kScript,
kStylesheet,
kUndefined
};
// Determine the value of the category enum corresponding to the given string.
// Case insensitive. Valid categories are:
// Script
// Image
// Stylesheet
// OtherResource
// - This is any other url that will be automatically loaded by the browser
// along with the main page. For example, the 'manifest' attribute of the
// 'html' element or the 'src' attribute of an 'iframe' element.
// Prefetch
// - This is to prefetch the given url or dns-prefetch for the given domain.
// Hyperlink
// - A link to another page or other resource that a browser wouldn't
// normally load in connection to this page. For example the 'href'
// attribute of an 'a' element.
bool ParseCategory(const StringPiece& category_str, Category* category);
// Determine the string representation for a given category.
GoogleString GetCategoryString(Category category);
} // namespace semantic_type
} // namespace net_instaweb
#endif // PAGESPEED_KERNEL_HTTP_SEMANTIC_TYPE_H_