summaryrefslogtreecommitdiff
path: root/chromium/extensions/browser/api/web_request/form_data_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/extensions/browser/api/web_request/form_data_parser.h')
-rw-r--r--chromium/extensions/browser/api/web_request/form_data_parser.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/chromium/extensions/browser/api/web_request/form_data_parser.h b/chromium/extensions/browser/api/web_request/form_data_parser.h
new file mode 100644
index 00000000000..0c49caa0138
--- /dev/null
+++ b/chromium/extensions/browser/api/web_request/form_data_parser.h
@@ -0,0 +1,82 @@
+// 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 EXTENSIONS_BROWSER_API_WEB_REQUEST_FORM_DATA_PARSER_H_
+#define EXTENSIONS_BROWSER_API_WEB_REQUEST_FORM_DATA_PARSER_H_
+
+#include <string>
+
+#include "base/macros.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:
+ // Result encapsulates name-value pairs returned by GetNextNameValue.
+ class Result {
+ public:
+ Result();
+ ~Result();
+
+ const std::string& name() const { return name_; }
+ const std::string& value() const { return value_; }
+
+ void set_name(base::StringPiece str) { str.CopyToString(&name_); }
+ void set_value(base::StringPiece str) { str.CopyToString(&value_); }
+
+ 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;
+
+ // Gets the next name-value pair from the source data and stores it in
+ // |result|. Returns true if a pair was found. Callers must have previously
+ // succesfully called the SetSource method.
+ virtual bool GetNextNameValue(Result* result) = 0;
+
+ // Sets the |source| of the data to be parsed. One form data parser is only
+ // expected to be associated with one source, so generally, SetSource should
+ // be only called once. However, for technical reasons, the source might only
+ // be available in chunks for multipart encoded forms, in which case it is OK
+ // to call SetSource multiple times to add all chunks of a single source. The
+ // ownership of |source| 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(base::StringPiece source) = 0;
+
+ protected:
+ FormDataParser();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FormDataParser);
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_BROWSER_API_WEB_REQUEST_FORM_DATA_PARSER_H_