libchromeos: Move mime_utils from Buffet to libchromeos

BUG=chromium:405714
TEST=USE=buffet ./build_packages

Change-Id: I4e0bf9600aedda9a9ac913a1234ab1b20da72777
Reviewed-on: https://chromium-review.googlesource.com/213364
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index bbbe8dc..b95637f 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -34,7 +34,6 @@
         'http_transport_curl.cc',
         'http_utils.cc',
         'manager.cc',
-        'mime_utils.cc',
         'storage_impls.cc',
       ],
     },
@@ -86,7 +85,6 @@
             'http_connection_fake.cc',
             'http_transport_fake.cc',
             'http_utils_unittest.cc',
-            'mime_utils_unittest.cc',
           ],
         },
       ],
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 9e59d78..3e09f30 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -11,6 +11,7 @@
 #include <base/json/json_writer.h>
 #include <base/values.h>
 #include <chromeos/data_encoding.h>
+#include <chromeos/mime_utils.h>
 #include <chromeos/string_utils.h>
 #include <chromeos/url_utils.h>
 
@@ -19,7 +20,6 @@
 #include "buffet/device_registration_storage_keys.h"
 #include "buffet/http_transport_curl.h"
 #include "buffet/http_utils.h"
-#include "buffet/mime_utils.h"
 #include "buffet/storage_impls.h"
 
 const char buffet::kErrorDomainOAuth2[] = "oauth2";
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc
index f883802..268e56e 100644
--- a/buffet/device_registration_info_unittest.cc
+++ b/buffet/device_registration_info_unittest.cc
@@ -5,6 +5,7 @@
 #include <base/json/json_reader.h>
 #include <base/values.h>
 #include <chromeos/bind_lambda.h>
+#include <chromeos/mime_utils.h>
 #include <gtest/gtest.h>
 
 #include "buffet/commands/command_manager.h"
@@ -13,7 +14,6 @@
 #include "buffet/device_registration_storage_keys.h"
 #include "buffet/http_request.h"
 #include "buffet/http_transport_fake.h"
-#include "buffet/mime_utils.h"
 #include "buffet/storage_impls.h"
 
 using namespace buffet;          // NOLINT(build/namespaces)
diff --git a/buffet/http_connection_fake.cc b/buffet/http_connection_fake.cc
index 1cc58e0..6cfdde3 100644
--- a/buffet/http_connection_fake.cc
+++ b/buffet/http_connection_fake.cc
@@ -5,10 +5,10 @@
 #include "buffet/http_connection_fake.h"
 
 #include <base/logging.h>
+#include <chromeos/mime_utils.h>
 #include <chromeos/string_utils.h>
 
 #include "buffet/http_request.h"
-#include "buffet/mime_utils.h"
 
 namespace buffet {
 namespace http {
@@ -48,7 +48,7 @@
                << " request at " << request_.GetURL();
     response_.ReplyText(status_code::NotFound,
                         "<html><body>Not found</body></html>",
-                        mime::text::kHtml);
+                        chromeos::mime::text::kHtml);
   } else {
     handler.Run(request_, &response_);
   }
diff --git a/buffet/http_request.cc b/buffet/http_request.cc
index 1c32efe..d818b07 100644
--- a/buffet/http_request.cc
+++ b/buffet/http_request.cc
@@ -5,12 +5,12 @@
 #include "buffet/http_request.h"
 
 #include <base/logging.h>
+#include <chromeos/mime_utils.h>
 #include <chromeos/string_utils.h>
 
 #include "buffet/http_connection_curl.h"
 #include "buffet/http_transport_curl.h"
 #include "buffet/map_utils.h"
-#include "buffet/mime_utils.h"
 
 namespace buffet {
 namespace http {
diff --git a/buffet/http_transport_fake.cc b/buffet/http_transport_fake.cc
index abf822b..9aefbe3 100644
--- a/buffet/http_transport_fake.cc
+++ b/buffet/http_transport_fake.cc
@@ -10,12 +10,12 @@
 #include <base/json/json_writer.h>
 #include <base/logging.h>
 #include <chromeos/bind_lambda.h>
+#include <chromeos/mime_utils.h>
 #include <chromeos/string_utils.h>
 #include <chromeos/url_utils.h>
 
 #include "buffet/http_connection_fake.h"
 #include "buffet/http_request.h"
-#include "buffet/mime_utils.h"
 
 namespace buffet {
 
@@ -113,8 +113,9 @@
 
 std::unique_ptr<base::DictionaryValue>
     ServerRequestResponseBase::GetDataAsJson() const {
-  if (mime::RemoveParameters(GetHeader(request_header::kContentType)) ==
-      mime::application::kJson) {
+  if (chromeos::mime::RemoveParameters(
+          GetHeader(request_header::kContentType)) ==
+      chromeos::mime::application::kJson) {
     auto value = base::JSONReader::Read(GetDataAsString());
     if (value) {
       base::DictionaryValue* dict = nullptr;
@@ -152,9 +153,9 @@
 
 std::string ServerRequest::GetFormField(const std::string& field_name) const {
   if (!form_fields_parsed_) {
-    std::string mime_type = mime::RemoveParameters(
+    std::string mime_type = chromeos::mime::RemoveParameters(
         GetHeader(request_header::kContentType));
-    if (mime_type == mime::application::kWwwFormUrlEncoded &&
+    if (mime_type == chromeos::mime::application::kWwwFormUrlEncoded &&
         !GetData().empty()) {
       auto fields = chromeos::data_encoding::WebParamsDecode(GetDataAsString());
       form_fields_.insert(fields.begin(), fields.end());
@@ -187,9 +188,10 @@
   base::JSONWriter::WriteWithOptions(json,
                                      base::JSONWriter::OPTIONS_PRETTY_PRINT,
                                      &text);
-  std::string mime_type = mime::AppendParameter(mime::application::kJson,
-                                                mime::parameters::kCharset,
-                                                "utf-8");
+  std::string mime_type = chromeos::mime::AppendParameter(
+      chromeos::mime::application::kJson,
+      chromeos::mime::parameters::kCharset,
+      "utf-8");
   ReplyText(status_code, text, mime_type.c_str());
 }
 
diff --git a/buffet/http_utils.cc b/buffet/http_utils.cc
index 439acab..d61d176 100644
--- a/buffet/http_utils.cc
+++ b/buffet/http_utils.cc
@@ -11,8 +11,10 @@
 #include <base/values.h>
 #include <chromeos/data_encoding.h>
 #include <chromeos/error_codes.h>
+#include <chromeos/mime_utils.h>
 
-#include "buffet/mime_utils.h"
+using chromeos::mime::AppendParameter;
+using chromeos::mime::RemoveParameters;
 
 namespace buffet {
 namespace http {
@@ -47,7 +49,7 @@
                                    std::shared_ptr<Transport> transport,
                                    chromeos::ErrorPtr* error) {
   if (mime_type == nullptr) {
-    mime_type = mime::application::kWwwFormUrlEncoded;
+    mime_type = chromeos::mime::application::kWwwFormUrlEncoded;
   }
 
   return PostBinary(url, data, strlen(data), mime_type, headers, transport,
@@ -66,7 +68,7 @@
   request.AddHeaders(headers);
   if (data_size > 0) {
     if (mime_type == nullptr) {
-      mime_type = mime::application::kOctet_stream;
+      mime_type = chromeos::mime::application::kOctet_stream;
     }
     request.SetContentType(mime_type);
     if (!request.AddRequestBody(data, data_size, error))
@@ -91,7 +93,7 @@
                                        chromeos::ErrorPtr* error) {
   std::string encoded_data = chromeos::data_encoding::WebParamsEncode(data);
   return PostBinary(url, encoded_data.c_str(), encoded_data.size(),
-                    mime::application::kWwwFormUrlEncoded,
+                    chromeos::mime::application::kWwwFormUrlEncoded,
                     headers, transport, error);
 }
 
@@ -104,9 +106,9 @@
   std::string data;
   if (json)
     base::JSONWriter::Write(json, &data);
-  std::string mime_type = mime::AppendParameter(mime::application::kJson,
-                                                mime::parameters::kCharset,
-                                                "utf-8");
+  std::string mime_type = AppendParameter(chromeos::mime::application::kJson,
+                                          chromeos::mime::parameters::kCharset,
+                                          "utf-8");
   return PostBinary(url, data.c_str(), data.size(),
                     mime_type.c_str(), headers, transport, error);
 }
@@ -119,9 +121,9 @@
   std::string data;
   if (json)
     base::JSONWriter::Write(json, &data);
-  std::string mime_type = mime::AppendParameter(mime::application::kJson,
-                                                mime::parameters::kCharset,
-                                                "utf-8");
+  std::string mime_type = AppendParameter(chromeos::mime::application::kJson,
+                                          chromeos::mime::parameters::kCharset,
+                                          "utf-8");
   return SendRequest(request_type::kPatch, url, data.c_str(), data.size(),
                      mime_type.c_str(), headers, transport, error);
 }
@@ -136,9 +138,9 @@
 
   // Make sure we have a correct content type. Do not try to parse
   // binary files, or HTML output. Limit to application/json and text/plain.
-  auto content_type = mime::RemoveParameters(response->GetContentType());
-  if (content_type != mime::application::kJson &&
-      content_type != mime::text::kPlain) {
+  auto content_type = RemoveParameters(response->GetContentType());
+  if (content_type != chromeos::mime::application::kJson &&
+      content_type != chromeos::mime::text::kPlain) {
     chromeos::Error::AddTo(error, chromeos::errors::json::kDomain,
                            "non_json_content_type",
                            "Unexpected response content type: " + content_type);
diff --git a/buffet/http_utils_unittest.cc b/buffet/http_utils_unittest.cc
index 4bb8383..8f40ad7 100644
--- a/buffet/http_utils_unittest.cc
+++ b/buffet/http_utils_unittest.cc
@@ -7,13 +7,13 @@
 
 #include <base/values.h>
 #include <chromeos/bind_lambda.h>
+#include <chromeos/mime_utils.h>
 #include <chromeos/string_utils.h>
 #include <chromeos/url_utils.h>
 #include <gtest/gtest.h>
 
 #include "buffet/http_transport_fake.h"
 #include "buffet/http_utils.h"
-#include "buffet/mime_utils.h"
 
 using namespace buffet;        // NOLINT(build/namespaces)
 using namespace buffet::http;  // NOLINT(build/namespaces)
@@ -33,7 +33,8 @@
 // Returns the request method as a plain text response.
 static void EchoMethodHandler(const fake::ServerRequest& request,
                               fake::ServerResponse* response) {
-  response->ReplyText(status_code::Ok, request.GetMethod(), mime::text::kPlain);
+  response->ReplyText(status_code::Ok, request.GetMethod(),
+                      chromeos::mime::text::kPlain);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -46,10 +47,11 @@
   std::vector<unsigned char> custom_data{0xFF, 0x00, 0x80, 0x40, 0xC0, 0x7F};
   auto response = http::SendRequest(request_type::kPost, kEchoUrl,
                                     custom_data.data(), custom_data.size(),
-                                    mime::application::kOctet_stream,
+                                    chromeos::mime::application::kOctet_stream,
                                     HeaderList(), transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::application::kOctet_stream, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::application::kOctet_stream,
+            response->GetContentType());
   EXPECT_EQ(custom_data.size(), response->GetData().size());
   EXPECT_EQ(custom_data, response->GetData());
 }
@@ -64,10 +66,10 @@
   // Check the correct HTTP method used.
   auto response = http::SendRequest(request_type::kPost, kMethodEchoUrl,
                                     custom_data.data(), custom_data.size(),
-                                    mime::application::kOctet_stream,
+                                    chromeos::mime::application::kOctet_stream,
                                     HeaderList(), transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ(request_type::kPost, response->GetDataAsString());
 }
 
@@ -79,7 +81,7 @@
                                     nullptr, 0, nullptr,
                                     HeaderList(), transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ(request_type::kGet, response->GetDataAsString());
 }
 
@@ -91,7 +93,7 @@
                                     nullptr, 0, nullptr,
                                     HeaderList(), transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ(request_type::kPut, response->GetDataAsString());
 }
 
@@ -123,13 +125,13 @@
                         base::Bind(JsonEchoHandler));
   auto response = http::SendRequest(
       request_type::kPost, json_echo_url, "abcd", 4,
-      mime::application::kOctet_stream, {
+      chromeos::mime::application::kOctet_stream, {
         {request_header::kCookie, "flavor=vanilla"},
         {request_header::kIfMatch, "*"},
       }, transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::application::kJson,
-            mime::RemoveParameters(response->GetContentType()));
+  EXPECT_EQ(chromeos::mime::application::kJson,
+            chromeos::mime::RemoveParameters(response->GetContentType()));
   auto json = ParseJsonResponse(response.get(), nullptr, nullptr);
   std::string value;
   EXPECT_TRUE(json->GetString("method", &value));
@@ -139,7 +141,7 @@
   EXPECT_TRUE(json->GetString("header.Cookie", &value));
   EXPECT_EQ("flavor=vanilla", value);
   EXPECT_TRUE(json->GetString("header.Content-Type", &value));
-  EXPECT_EQ(mime::application::kOctet_stream, value);
+  EXPECT_EQ(chromeos::mime::application::kOctet_stream, value);
   EXPECT_TRUE(json->GetString("header.Content-Length", &value));
   EXPECT_EQ("4", value);
   EXPECT_TRUE(json->GetString("header.If-Match", &value));
@@ -156,7 +158,7 @@
     EXPECT_EQ("0", request.GetHeader(request_header::kContentLength));
     EXPECT_EQ("", request.GetHeader(request_header::kContentType));
     response->ReplyText(status_code::Ok, request.GetFormField("test"),
-                        mime::text::kPlain);
+                        chromeos::mime::text::kPlain);
   };
 
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
@@ -166,7 +168,7 @@
   // Make sure Get/GetAsString actually do the GET request
   auto response = http::Get(kMethodEchoUrl, transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ(request_type::kGet, response->GetDataAsString());
   EXPECT_EQ(request_type::kGet,
             http::GetAsString(kMethodEchoUrl, transport, nullptr));
@@ -184,7 +186,7 @@
     EXPECT_EQ("0", request.GetHeader(request_header::kContentLength));
     EXPECT_EQ("", request.GetHeader(request_header::kContentType));
     response->ReplyText(status_code::Ok, "blah",
-                        mime::text::kPlain);
+                        chromeos::mime::text::kPlain);
   };
 
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
@@ -192,7 +194,7 @@
 
   auto response = http::Head(kFakeUrl, transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ("", response->GetDataAsString());  // Must not have actual body.
   EXPECT_EQ("4", response->GetHeader(request_header::kContentLength));
 }
@@ -202,7 +204,7 @@
                     fake::ServerResponse* response) {
     EXPECT_EQ(request_type::kPost, request.GetMethod());
     EXPECT_EQ("256", request.GetHeader(request_header::kContentLength));
-    EXPECT_EQ(mime::application::kOctet_stream,
+    EXPECT_EQ(chromeos::mime::application::kOctet_stream,
               request.GetHeader(request_header::kContentType));
     const auto& data = request.GetData();
     EXPECT_EQ(256, data.size());
@@ -210,7 +212,7 @@
     // Sum up all the bytes.
     int sum = std::accumulate(data.begin(), data.end(), 0);
     EXPECT_EQ(32640, sum);  // sum(i, i => [0, 255]) = 32640.
-    response->ReplyText(status_code::Ok, "", mime::text::kPlain);
+    response->ReplyText(status_code::Ok, "", chromeos::mime::text::kPlain);
   };
 
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
@@ -232,19 +234,20 @@
     EXPECT_EQ(request_type::kPost, request.GetMethod());
     EXPECT_EQ(fake_data.size(),
               std::stoul(request.GetHeader(request_header::kContentLength)));
-    EXPECT_EQ(mime::text::kPlain,
+    EXPECT_EQ(chromeos::mime::text::kPlain,
               request.GetHeader(request_header::kContentType));
     response->ReplyText(status_code::Ok, request.GetDataAsString(),
-                       mime::text::kPlain);
+                       chromeos::mime::text::kPlain);
   };
 
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
   transport->AddHandler(kFakeUrl, request_type::kPost, base::Bind(PostHandler));
 
   auto response = http::PostText(kFakeUrl, fake_data.c_str(),
-                                 mime::text::kPlain, transport, nullptr);
+                                 chromeos::mime::text::kPlain,
+                                 transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::text::kPlain, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kPlain, response->GetContentType());
   EXPECT_EQ(fake_data, response->GetDataAsString());
 }
 
@@ -258,16 +261,17 @@
                       {"field", "field value"},
                   }, transport, nullptr);
   EXPECT_TRUE(response->IsSuccessful());
-  EXPECT_EQ(mime::application::kWwwFormUrlEncoded, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::application::kWwwFormUrlEncoded,
+            response->GetContentType());
   EXPECT_EQ("key=value&field=field+value", response->GetDataAsString());
 }
 
 TEST(HttpUtils, PostPatchJson) {
   auto JsonHandler = [](const fake::ServerRequest& request,
                         fake::ServerResponse* response) {
-    auto mime_type = mime::RemoveParameters(
+    auto mime_type = chromeos::mime::RemoveParameters(
         request.GetHeader(request_header::kContentType));
-    EXPECT_EQ(mime::application::kJson, mime_type);
+    EXPECT_EQ(chromeos::mime::application::kJson, mime_type);
     response->ReplyJson(status_code::Ok, {
       {"method", request.GetMethod()},
       {"data", request.GetDataAsString()},
@@ -328,7 +332,7 @@
   // Test invalid (non-JSON) response.
   auto response = http::Get("http://bad.url", transport, nullptr);
   EXPECT_EQ(status_code::NotFound, response->GetStatusCode());
-  EXPECT_EQ(mime::text::kHtml, response->GetContentType());
+  EXPECT_EQ(chromeos::mime::text::kHtml, response->GetContentType());
   int code = 0;
   auto json = http::ParseJsonResponse(response.get(), &code, nullptr);
   EXPECT_EQ(nullptr, json.get());
diff --git a/buffet/mime_utils.cc b/buffet/mime_utils.cc
deleted file mode 100644
index 5747405..0000000
--- a/buffet/mime_utils.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/mime_utils.h"
-
-#include <algorithm>
-#include <base/strings/string_util.h>
-#include <chromeos/string_utils.h>
-
-namespace buffet {
-
-// ***************************************************************************
-// ******************************* MIME types ********************************
-// ***************************************************************************
-const char mime::types::kApplication[]             = "application";
-const char mime::types::kAudio[]                   = "audio";
-const char mime::types::kImage[]                   = "image";
-const char mime::types::kMessage[]                 = "message";
-const char mime::types::kMultipart[]               = "multipart";
-const char mime::types::kText[]                    = "text";
-const char mime::types::kVideo[]                   = "video";
-
-const char mime::parameters::kCharset[]            = "charset";
-
-const char mime::image::kJpeg[]                    = "image/jpeg";
-const char mime::image::kPng[]                     = "image/png";
-const char mime::image::kBmp[]                     = "image/bmp";
-const char mime::image::kTiff[]                    = "image/tiff";
-const char mime::image::kGif[]                     = "image/gif";
-
-const char mime::text::kPlain[]                    = "text/plain";
-const char mime::text::kHtml[]                     = "text/html";
-const char mime::text::kXml[]                      = "text/xml";
-
-const char mime::application::kOctet_stream[]      = "application/octet-stream";
-const char mime::application::kJson[]              = "application/json";
-const char mime::application::kWwwFormUrlEncoded[] =
-    "application/x-www-form-urlencoded";
-
-// ***************************************************************************
-// **************************** Utility Functions ****************************
-// ***************************************************************************
-static std::string EncodeParam(const std::string& param) {
-  // If the string contains one of "tspecials" characters as
-  // specified in RFC 1521, enclose it in quotes.
-  if (param.find_first_of("()<>@,;:\\\"/[]?=") != std::string::npos) {
-    return '"' + param + '"';
-  }
-  return param;
-}
-
-static std::string DecodeParam(const std::string& param) {
-  if (param.size() > 1 && param.front() == '"' && param.back() == '"') {
-    return param.substr(1, param.size() - 2);
-  }
-  return param;
-}
-
-// ***************************************************************************
-// ******************** Main MIME manipulation functions *********************
-// ***************************************************************************
-
-bool mime::Split(const std::string& mime_string,
-                 std::string* type, std::string* subtype,
-                 mime::Parameters* parameters) {
-  std::vector<std::string> parts = chromeos::string_utils::Split(mime_string,
-                                                                 ';');
-  if (parts.empty())
-    return false;
-
-  if (!mime::Split(parts.front(), type, subtype))
-    return false;
-
-  if (parameters) {
-    parameters->clear();
-    parameters->reserve(parts.size() - 1);
-    for (size_t i = 1; i < parts.size(); i++) {
-      auto pair = chromeos::string_utils::SplitAtFirst(parts[i], '=');
-      pair.second = DecodeParam(pair.second);
-      parameters->push_back(pair);
-    }
-  }
-  return true;
-}
-
-bool mime::Split(const std::string& mime_string,
-                 std::string* type, std::string* subtype) {
-  std::string mime = mime::RemoveParameters(mime_string);
-  auto types = chromeos::string_utils::SplitAtFirst(mime, '/');
-
-  if (type)
-    *type = types.first;
-
-  if (subtype)
-    *subtype = types.second;
-
-  return !types.first.empty() && !types.second.empty();
-}
-
-std::string mime::Combine(const std::string& type, const std::string& subtype,
-                          const mime::Parameters& parameters) {
-  std::vector<std::string> parts;
-  parts.push_back(chromeos::string_utils::Join('/', type, subtype));
-  for (const auto& pair : parameters) {
-    parts.push_back(chromeos::string_utils::Join('=',
-                                                 pair.first,
-                                                 EncodeParam(pair.second)));
-  }
-  return chromeos::string_utils::Join("; ", parts);
-}
-
-std::string mime::GetType(const std::string& mime_string) {
-  std::string mime = mime::RemoveParameters(mime_string);
-  return chromeos::string_utils::SplitAtFirst(mime, '/').first;
-}
-
-std::string mime::GetSubtype(const std::string& mime_string) {
-  std::string mime = mime::RemoveParameters(mime_string);
-  return chromeos::string_utils::SplitAtFirst(mime, '/').second;
-}
-
-mime::Parameters mime::GetParameters(const std::string& mime_string) {
-  std::string type;
-  std::string subtype;
-  mime::Parameters parameters;
-
-  if (mime::Split(mime_string, &type, &subtype, &parameters))
-    return std::move(parameters);
-
-  return mime::Parameters();
-}
-
-std::string mime::RemoveParameters(const std::string& mime_string) {
-  return chromeos::string_utils::SplitAtFirst(mime_string, ';').first;
-}
-
-std::string mime::AppendParameter(const std::string& mime_string,
-                                  const std::string& paramName,
-                                  const std::string& paramValue) {
-  std::string mime(mime_string);
-  mime += "; ";
-  mime += chromeos::string_utils::Join('=', paramName, EncodeParam(paramValue));
-  return mime;
-}
-
-std::string mime::GetParameterValue(const std::string& mime_string,
-                                    const std::string& paramName) {
-  mime::Parameters params = mime::GetParameters(mime_string);
-  for (const auto& pair : params) {
-    if (base::strcasecmp(pair.first.c_str(), paramName.c_str()) == 0)
-      return pair.second;
-  }
-  return std::string();
-}
-
-}  // namespace buffet
diff --git a/buffet/mime_utils.h b/buffet/mime_utils.h
deleted file mode 100644
index 999b677..0000000
--- a/buffet/mime_utils.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2014 The Chromium OS 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 BUFFET_MIME_UTILS_H_
-#define BUFFET_MIME_UTILS_H_
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <base/basictypes.h>
-
-namespace buffet {
-
-namespace mime {
-
-namespace types {
-  // Main MIME type categories
-  extern const char kApplication[];        // application
-  extern const char kAudio[];              // audio
-  extern const char kImage[];              // image
-  extern const char kMessage[];            // message
-  extern const char kMultipart[];          // multipart
-  extern const char kText[];               // test
-  extern const char kVideo[];              // video
-}
-
-namespace parameters {
-  // Common MIME parameters
-  extern const char kCharset[];            // charset=...
-}
-
-namespace image {
-  // Common image MIME types
-  extern const char kJpeg[];               // image/jpeg
-  extern const char kPng[];                // image/png
-  extern const char kBmp[];                // image/bmp
-  extern const char kTiff[];               // image/tiff
-  extern const char kGif[];                // image/gif
-}
-
-namespace text {
-  // Common text MIME types
-  extern const char kPlain[];              // text/plain
-  extern const char kHtml[];               // text/html
-  extern const char kXml[];                // text/xml
-}
-
-namespace application {
-  // Common application MIME types
-  extern const char kOctet_stream[];       // application/octet-stream
-  extern const char kJson[];               // application/json
-  extern const char kWwwFormUrlEncoded[];  // application/x-www-form-urlencoded
-}
-
-typedef std::vector<std::pair<std::string, std::string>> Parameters;
-
-// Combine a MIME type, subtype and parameters into a MIME string.
-// e.g. Combine("text", "plain", {{"charset", "utf-8"}}) will give:
-//      "text/plain; charset=utf-8"
-std::string Combine(const std::string& type, const std::string& subtype,
-                    const Parameters& parameters = {}) WARN_UNUSED_RESULT;
-
-// Splits a MIME string into type and subtype.
-// "text/plain;charset=utf-8" => ("text", "plain")
-bool Split(const std::string& mime_string,
-           std::string* type, std::string* subtype);
-
-// Splits a MIME string into type, subtype, and parameters.
-// "text/plain;charset=utf-8" => ("text", "plain", {{"charset","utf-8"}})
-bool Split(const std::string& mime_string,
-           std::string* type, std::string* subtype, Parameters* parameters);
-
-// Returns the MIME type from MIME string.
-// "text/plain;charset=utf-8" => "text"
-std::string GetType(const std::string& mime_string);
-
-// Returns the MIME sub-type from MIME string.
-// "text/plain;charset=utf-8" => "plain"
-std::string GetSubtype(const std::string& mime_string);
-
-// Returns the MIME parameters from MIME string.
-// "text/plain;charset=utf-8" => {{"charset","utf-8"}}
-Parameters GetParameters(const std::string& mime_string);
-
-// Removes parameters from a MIME string
-// "text/plain;charset=utf-8" => "text/plain"
-std::string RemoveParameters(const std::string& mime_string) WARN_UNUSED_RESULT;
-
-// Appends a parameter to a MIME string.
-// "text/plain" => "text/plain; charset=utf-8"
-std::string AppendParameter(const std::string& mime_string,
-                            const std::string& paramName,
-                            const std::string& paramValue) WARN_UNUSED_RESULT;
-
-// Returns the value of a parameter on a MIME string (empty string if missing).
-// ("text/plain;charset=utf-8","charset") => "utf-8"
-std::string GetParameterValue(const std::string& mime_string,
-                              const std::string& paramName);
-
-}  // namespace mime
-}  // namespace buffet
-
-#endif  // BUFFET_MIME_UTILS_H_
diff --git a/buffet/mime_utils_unittest.cc b/buffet/mime_utils_unittest.cc
deleted file mode 100644
index a705dfa..0000000
--- a/buffet/mime_utils_unittest.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/mime_utils.h"
-
-#include <gtest/gtest.h>
-
-using namespace buffet;  // NOLINT(build/namespaces)
-
-TEST(MimeUtils, Combine) {
-  std::string mime_string = mime::Combine(mime::types::kText, "xml");
-  EXPECT_EQ(mime::text::kXml, mime_string);
-  EXPECT_EQ("application/json; charset=utf-8",
-            mime::Combine(mime::types::kApplication, "json",
-                          {{"charset", "utf-8"}}));
-}
-
-TEST(MimeUtils, Split) {
-  std::string s1, s2;
-  EXPECT_TRUE(mime::Split(mime::image::kJpeg, &s1, &s2));
-  EXPECT_EQ(mime::types::kImage, s1);
-  EXPECT_EQ("jpeg", s2);
-
-  mime::Parameters parameters;
-  EXPECT_TRUE(mime::Split("application/json;charset=utf-8",
-    &s1, &s2, &parameters));
-  EXPECT_EQ(mime::types::kApplication, s1);
-  EXPECT_EQ("json", s2);
-  EXPECT_EQ(mime::application::kJson, mime::Combine(s1, s2));
-  EXPECT_EQ(1, parameters.size());
-  EXPECT_EQ(mime::parameters::kCharset, parameters.front().first);
-  EXPECT_EQ("utf-8", parameters.front().second);
-  EXPECT_EQ("application/json; charset=utf-8",
-            mime::Combine(s1, s2, parameters));
-}
-
-TEST(MimeUtils, ExtractParts) {
-  mime::Parameters parameters;
-
-  EXPECT_EQ(mime::types::kText, mime::GetType(mime::text::kPlain));
-  EXPECT_EQ("plain", mime::GetSubtype(mime::text::kPlain));
-
-  parameters = mime::GetParameters("text/plain; charset=iso-8859-1;foo=bar");
-  EXPECT_EQ(2, parameters.size());
-  EXPECT_EQ(mime::parameters::kCharset, parameters[0].first);
-  EXPECT_EQ("iso-8859-1", parameters[0].second);
-  EXPECT_EQ("foo", parameters[1].first);
-  EXPECT_EQ("bar", parameters[1].second);
-}
-
-TEST(MimeUtils, AppendRemoveParams) {
-  std::string mime_string = mime::AppendParameter(mime::text::kXml,
-                                                  mime::parameters::kCharset,
-                                                  "utf-8");
-  EXPECT_EQ("text/xml; charset=utf-8", mime_string);
-  mime_string = mime::AppendParameter(mime_string, "foo", "bar");
-  EXPECT_EQ("text/xml; charset=utf-8; foo=bar", mime_string);
-  EXPECT_EQ("utf-8", mime::GetParameterValue(mime_string,
-                                             mime::parameters::kCharset));
-  EXPECT_EQ("bar", mime::GetParameterValue(mime_string, "foo"));
-  EXPECT_EQ("", mime::GetParameterValue(mime_string, "baz"));
-  mime_string = mime::RemoveParameters(mime_string);
-  EXPECT_EQ(mime::text::kXml, mime_string);
-}