blob: 89495480cdd8011ba56b4b167905786a7bfa02c6 [file] [log] [blame]
// Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_WEB_REQUEST_FORM_DATA_PARSER_H_
#define CHROME_BROWSER_EXTENSIONS_API_WEB_REQUEST_FORM_DATA_PARSER_H_
#include <string>
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
// Cannot forward declare StringPiece because it is a typedef.
#include "base/strings/string_piece.h"
namespace net {
class URLRequest;
}
namespace extensions {
// Interface for the form data parsers.
class FormDataParser {
public:
class Result {
public:
Result();
~Result();
const std::string& name() const {
return name_;
}
const std::string& value() const {
return value_;
}
void set_value(const base::StringPiece& str) {
str.CopyToString(&value_);
}
void set_name(const std::string& str) {
name_ = str;
}
void set_value(const std::string& str) {
value_ = str;
}
private:
std::string name_;
std::string value_;
DISALLOW_COPY_AND_ASSIGN(Result);
};
virtual ~FormDataParser();
// Creates a correct parser instance based on the |request|. Returns NULL
// on failure.
static scoped_ptr<FormDataParser> Create(const net::URLRequest& request);
// Creates a correct parser instance based on |content_type_header|, the
// "Content-Type" request header value. If |content_type_header| is NULL, it
// defaults to "application/x-www-form-urlencoded". Returns NULL on failure.
static scoped_ptr<FormDataParser> CreateFromContentTypeHeader(
const std::string* content_type_header);
// Returns true if there was some data, it was well formed and all was read.
virtual bool AllDataReadOK() = 0;
// Returns the next name-value pair as |result|. After SetSource has
// succeeded, this allows to iterate over all pairs in the source.
// Returns true as long as a new pair was successfully found.
virtual bool GetNextNameValue(Result* result) = 0;
// Sets the |source| of the data to be parsed. The ownership is left with the
// caller and the source should live until |this| dies or |this->SetSource()|
// is called again, whichever comes sooner. Returns true on success.
virtual bool SetSource(const base::StringPiece& source) = 0;
protected:
FormDataParser();
private:
DISALLOW_COPY_AND_ASSIGN(FormDataParser);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_WEB_REQUEST_FORM_DATA_PARSER_H_