1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_BASE_DATA_URL_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_BASE_DATA_URL_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string> 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass GURL; 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 132557749644f9d25af9721533322db19197c49b49Kristian Monsen#include "net/base/net_export.h" 142557749644f9d25af9721533322db19197c49b49Kristian Monsen 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// See RFC 2397 for a complete description of the 'data' URL scheme. 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Briefly, a 'data' URL has the form: 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// data:[<mediatype>][;base64],<data> 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The <mediatype> is an Internet media type specification (with optional 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// parameters.) The appearance of ";base64" means that the data is encoded as 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// base64. Without ";base64", the data (as a sequence of octets) is represented 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// using ASCII encoding for octets inside the range of safe URL characters and 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// using the standard %xx hex encoding of URLs for octets outside that range. 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If <mediatype> is omitted, it defaults to text/plain;charset=US-ASCII. As a 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// shorthand, "text/plain" can be omitted but the charset parameter supplied. 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 312557749644f9d25af9721533322db19197c49b49Kristian Monsenclass NET_EXPORT DataURL { 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This method can be used to parse a 'data' URL into its component pieces. 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The resulting mime_type is normalized to lowercase. The data is the 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // decoded data (e.g.., if the data URL specifies base64 encoding, then the 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // returned data is base64 decoded, and any %-escaped bytes are unescaped). 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If the URL is malformed, then this method will return false, and its 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // output variables will remain unchanged. On success, true is returned. 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // OPTIONAL: If |data| is NULL, then the <data> section will not be parsed 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // or validated. 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static bool Parse(const GURL& url, 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string* mime_type, 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string* charset, 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string* data); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_BASE_DATA_URL_H_ 54