Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(776)

Unified Diff: util/net/http_multipart_builder.h

Issue 681303003: Add HTTPMultipartBuilder and its test. (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: util/net/http_multipart_builder.h
diff --git a/util/net/http_multipart_builder.h b/util/net/http_multipart_builder.h
new file mode 100644
index 0000000000000000000000000000000000000000..00ce49b0ca1435a126723d2ef6847f9aafa84f0c
--- /dev/null
+++ b/util/net/http_multipart_builder.h
@@ -0,0 +1,82 @@
+// Copyright 2014 The Crashpad 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 CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_
+#define CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_
+
+#include "base/basictypes.h"
+#include "base/files/file_path.h"
+#include "base/memory/scoped_ptr.h"
+
+#include <map>
Mark Mentovai 2014/10/28 22:34:28 C++ system headers should precede project-local he
Robert Sesek 2014/10/29 19:52:01 Done.
+#include <string>
+
+namespace crashpad {
+
+class HTTPBodyStream;
+
+//! \brief This class is used to build a MIME multipart message, conforming to
+//! RFC 2046, for use as a HTTP request body.
+class HTTPMultipartBuilder {
+ public:
+ HTTPMultipartBuilder();
+ ~HTTPMultipartBuilder();
+
+ //! \brief Sets a `Content-Disposition: form-data` key-value pair.
+ //!
+ //! \param[in] key The key of the form data, specified as the `name` in the
+ //! multipart message.
+ //! \param[in] value The value to set at the \a key. This will overwrite any
+ //! previously set value with the specified key.
+ void SetFormData(const std::string& key, const std::string& value);
Mark Mentovai 2014/10/28 22:34:28 |key| in this method and [the key, see below] in S
Robert Sesek 2014/10/29 19:52:01 Right, I was playing both sides of this coin by en
+
+ //! \brief Specifies the file at \a path to have its contents uploaded as
+ //! multipart data, available at `name` of \a upload_file_name.
Mark Mentovai 2014/10/28 22:34:28 I think this should be a 3-argument call: (const s
Robert Sesek 2014/10/29 19:52:01 Done.
+ //!
+ //! \param[in] upload_file_name The name to give this multipart data. If a
+ //! \a path has already been supplied at this name, a subsequent call
+ //! will overwrite the path with the newly specified one. This is used
+ //! as the `name` in the multipart message.
+ //! \param[in] path The path of the files whose contents will be uploaded.
+ void SetFileAttachment(const std::string& upload_file_name,
+ const base::FilePath& path);
+
+ //! \brief Generates the HTTPBodyStream for the data currently supplied to
+ //! the builder.
+ //!
+ //! \return A caller-owned HTTPBodyStream object.
+ scoped_ptr<HTTPBodyStream> GetBodyStream();
+
+ private:
+ // Generates a random string suitable for use as a multipart boundary.
+ static std::string GenerateBoundaryString();
Mark Mentovai 2014/10/28 22:34:28 Is there even a reason to expose these private sta
Robert Sesek 2014/10/29 19:52:01 No, moved to anon.
+
+ // Escapes the specified name to be suitable for the name field of a
+ // form-data part.
+ static std::string EncodeFieldName(const std::string& name);
+
+ // Returns a string, formatted with a multipart boundary and a field name,
+ // after which the contents of the part at |name| can be appended.
+ static std::string GetFormDataBoundary(const std::string& boundary,
+ const std::string& name);
+
+ std::map<std::string, std::string> form_data_;
+ std::map<std::string, base::FilePath> file_attachments_;
+
+ DISALLOW_COPY_AND_ASSIGN(HTTPMultipartBuilder);
+};
+
+} // namespace crashpad
+
+#endif // CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_

Powered by Google App Engine
This is Rietveld 408576698