libweave: Remove mime_type from HttpClient interface

This simplifies platform side implementation. The implementation will
just submit all headers as is.

BUG=brillo:1250
TEST=`FEATURES=test emerge-gizmo libweave buffet`

Change-Id: Id7f968fab5c18ca30223e456c04d36c2a0becb7e
Reviewed-on: https://chromium-review.googlesource.com/291332
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/http_transport_client.cc b/buffet/http_transport_client.cc
index dd43550..4d68aa3 100644
--- a/buffet/http_transport_client.cc
+++ b/buffet/http_transport_client.cc
@@ -8,6 +8,7 @@
 #include <chromeos/errors/error.h>
 #include <chromeos/http/http_request.h>
 #include <chromeos/http/http_utils.h>
+#include <chromeos/streams/memory_stream.h>
 
 namespace buffet {
 
@@ -67,9 +68,14 @@
                                          const Headers& headers,
                                          const std::string& data,
                                          chromeos::ErrorPtr* error) {
-  return std::unique_ptr<weave::HttpClient::Response>{new ResponseImpl{
-      chromeos::http::SendRequestAndBlock(method, url, data.data(), data.size(),
-                                          "", headers, transport_, error)}};
+  chromeos::http::Request request(url, method, transport_);
+  request.AddHeaders(headers);
+  if (!data.empty()) {
+    if (!request.AddRequestBody(data.data(), data.size(), error))
+      return nullptr;
+  }
+   return std::unique_ptr<weave::HttpClient::Response>{
+      new ResponseImpl{request.GetResponseAndBlock(error)}};
 }
 
 int HttpTransportClient::SendRequest(const std::string& method,
@@ -78,10 +84,21 @@
                                      const std::string& data,
                                      const SuccessCallback& success_callback,
                                      const ErrorCallback& error_callback) {
-  return chromeos::http::SendRequest(
-      method, url, data.data(), data.size(), "", headers, transport_,
-      base::Bind(&OnSuccessCallback, success_callback),
-      base::Bind(&OnErrorCallback, error_callback));
+  chromeos::http::Request request(url, method, transport_);
+  request.AddHeaders(headers);
+  if (!data.empty()) {
+    auto stream = chromeos::MemoryStream::OpenCopyOf(data, nullptr);
+    CHECK_GT(stream->GetRemainingSize(), 0);
+    chromeos::ErrorPtr error;
+    if (!request.AddRequestBody(std::move(stream), &error)) {
+      transport_->RunCallbackAsync(
+          FROM_HERE,
+          base::Bind(error_callback, 0, base::Owned(error.release())));
+      return 0;
+    }
+  }
+  return request.GetResponse(base::Bind(&OnSuccessCallback, success_callback),
+                             base::Bind(&OnErrorCallback, error_callback));
 }
 
 }  // namespace buffet