diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index a796de2..c9ac80d 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -27,7 +27,6 @@
         'commands/prop_values.cc',
         'commands/schema_constants.cc',
         'commands/schema_utils.cc',
-        'data_encoding.cc',
         'dbus_constants.cc',
         'device_registration_info.cc',
         'http_request.cc',
@@ -84,7 +83,6 @@
             'commands/object_schema_unittest.cc',
             'commands/schema_utils_unittest.cc',
             'commands/unittest_utils.cc',
-            'data_encoding_unittest.cc',
             'device_registration_info_unittest.cc',
             'http_connection_fake.cc',
             'http_transport_fake.cc',
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index ce8a928..7c0c454 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -12,6 +12,7 @@
 #include <base/memory/ref_counted.h>
 #include <base/memory/scoped_ptr.h>
 #include <base/values.h>
+#include <chromeos/data_encoding.h>
 #include <chromeos/dbus_utils.h>
 #include <dbus/bus.h>
 #include <dbus/message.h>
@@ -19,7 +20,6 @@
 #include <dbus/object_manager.h>
 #include <dbus/values_util.h>
 
-#include "buffet/data_encoding.h"
 #include "buffet/dbus_constants.h"
 
 using namespace buffet::dbus_constants;  // NOLINT(build/namespaces)
@@ -149,7 +149,7 @@
     chromeos::dbus_utils::Dictionary params;
 
     if (!args.empty()) {
-      auto key_values = buffet::data_encoding::WebParamsDecode(args.front());
+      auto key_values = chromeos::data_encoding::WebParamsDecode(args.front());
       for (const auto& pair : key_values) {
         params.insert(std::make_pair(
             pair.first, std::unique_ptr<base::Value>(
diff --git a/buffet/data_encoding.cc b/buffet/data_encoding.cc
deleted file mode 100644
index 8614d2a..0000000
--- a/buffet/data_encoding.cc
+++ /dev/null
@@ -1,100 +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/data_encoding.h"
-
-#include <base/strings/stringprintf.h>
-#include <chromeos/string_utils.h>
-#include <cstring>
-
-namespace {
-
-inline int HexToDec(int hex) {
-  int dec = -1;
-  if (hex >= '0' && hex <= '9') {
-    dec = hex - '0';
-  } else if (hex >= 'A' && hex <= 'F') {
-    dec = hex - 'A' + 10;
-  } else if (hex >= 'a' && hex <= 'f') {
-    dec = hex - 'a' + 10;
-  }
-  return dec;
-}
-
-}  // namespace
-
-/////////////////////////////////////////////////////////////////////////
-namespace buffet {
-namespace data_encoding {
-
-std::string UrlEncode(const char* data, bool encodeSpaceAsPlus) {
-  std::string result;
-
-  while (*data) {
-    char c = *data++;
-    // According to RFC3986 (http://www.faqs.org/rfcs/rfc3986.html),
-    // section 2.3. - Unreserved Characters
-    if ((c >= '0' && c <= '9') ||
-        (c >= 'A' && c <= 'Z') ||
-        (c >= 'a' && c <= 'z') ||
-        c == '-' || c == '.' || c == '_' || c == '~') {
-      result += c;
-    } else if (c == ' ' && encodeSpaceAsPlus) {
-      // For historical reasons, some URLs have spaces encoded as '+',
-      // this also applies to form data encoded as
-      // 'application/x-www-form-urlencoded'
-      result += '+';
-    } else {
-      base::StringAppendF(&result, "%%%02X",
-                          static_cast<unsigned char>(c));  // Encode as %NN
-    }
-  }
-  return result;
-}
-
-std::string UrlDecode(const char* data) {
-  std::string result;
-  while (*data) {
-    char c = *data++;
-    int part1 = 0, part2 = 0;
-    // HexToDec would return -1 even for character 0 (end of string),
-    // so it is safe to access data[0] and data[1] without overrunning the buf.
-    if (c == '%' &&
-        (part1 = HexToDec(data[0])) >= 0 && (part2 = HexToDec(data[1])) >= 0) {
-      c = static_cast<char>((part1 << 4) | part2);
-      data += 2;
-    } else if (c == '+') {
-      c = ' ';
-    }
-    result += c;
-  }
-  return result;
-}
-
-std::string WebParamsEncode(const WebParamList& params,
-                            bool encodeSpaceAsPlus) {
-  std::vector<std::string> pairs;
-  pairs.reserve(params.size());
-  for (const auto& p : params) {
-    std::string key = UrlEncode(p.first.c_str(), encodeSpaceAsPlus);
-    std::string value = UrlEncode(p.second.c_str(), encodeSpaceAsPlus);
-    pairs.push_back(chromeos::string_utils::Join('=', key, value));
-  }
-
-  return chromeos::string_utils::Join('&', pairs);
-}
-
-WebParamList WebParamsDecode(const std::string& data) {
-  WebParamList result;
-  std::vector<std::string> params = chromeos::string_utils::Split(data, '&');
-  for (const auto& p : params) {
-    auto pair = chromeos::string_utils::SplitAtFirst(p, '=');
-    result.emplace_back(UrlDecode(pair.first.c_str()),
-                        UrlDecode(pair.second.c_str()));
-  }
-  return result;
-}
-
-}  // namespace data_encoding
-}  // namespace buffet
diff --git a/buffet/data_encoding.h b/buffet/data_encoding.h
deleted file mode 100644
index e493e36..0000000
--- a/buffet/data_encoding.h
+++ /dev/null
@@ -1,46 +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_DATA_ENCODING_H_
-#define BUFFET_DATA_ENCODING_H_
-
-#include <string>
-#include <utility>
-#include <vector>
-
-namespace buffet {
-namespace data_encoding {
-
-typedef std::vector<std::pair<std::string, std::string>> WebParamList;
-
-// Encode/escape string to be used in the query portion of a URL.
-// If |encodeSpaceAsPlus| is set to true, spaces are encoded as '+' instead
-// of "%20"
-std::string UrlEncode(const char* data, bool encodeSpaceAsPlus);
-
-inline std::string UrlEncode(const char* data) {
-  return UrlEncode(data, true);
-}
-
-// Decodes/unescapes a URL. Replaces all %XX sequences with actual characters.
-// Also replaces '+' with spaces.
-std::string UrlDecode(const char* data);
-
-// Converts a list of key-value pairs into a string compatible with
-// 'application/x-www-form-urlencoded' content encoding.
-std::string WebParamsEncode(const WebParamList& params, bool encodeSpaceAsPlus);
-
-inline std::string WebParamsEncode(const WebParamList& params) {
-  return WebParamsEncode(params, true);
-}
-
-// Parses a string of '&'-delimited key-value pairs (separated by '=') and
-// encoded in a way compatible with 'application/x-www-form-urlencoded'
-// content encoding.
-WebParamList WebParamsDecode(const std::string& data);
-
-}  // namespace data_encoding
-}  // namespace buffet
-
-#endif  // BUFFET_DATA_ENCODING_H_
diff --git a/buffet/data_encoding_unittest.cc b/buffet/data_encoding_unittest.cc
deleted file mode 100644
index ed6295c..0000000
--- a/buffet/data_encoding_unittest.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2011 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/data_encoding.h"
-
-#include <gtest/gtest.h>
-
-using namespace buffet::data_encoding;  // NOLINT(build/namespaces)
-
-TEST(data_encoding, UrlEncoding) {
-  std::string test = "\"http://sample/path/0014.html \"";
-  std::string encoded = UrlEncode(test.c_str());
-  EXPECT_EQ("%22http%3A%2F%2Fsample%2Fpath%2F0014.html+%22",
-            encoded);
-  EXPECT_EQ(test, UrlDecode(encoded.c_str()));
-
-  test = "\"http://sample/path/0014.html \"";
-  encoded = UrlEncode(test.c_str(), false);
-  EXPECT_EQ("%22http%3A%2F%2Fsample%2Fpath%2F0014.html%20%22",
-            encoded);
-  EXPECT_EQ(test, UrlDecode(encoded.c_str()));
-}
-
-TEST(data_encoding, WebParamsEncoding) {
-  std::string encoded = WebParamsEncode({{"q", "test"},
-                                         {"path", "/usr/bin"},
-                                         {"#", "%"}});
-  EXPECT_EQ("q=test&path=%2Fusr%2Fbin&%23=%25", encoded);
-
-  auto params = WebParamsDecode(encoded);
-  EXPECT_EQ(3, params.size());
-  EXPECT_EQ("q", params[0].first);
-  EXPECT_EQ("test", params[0].second);
-  EXPECT_EQ("path", params[1].first);
-  EXPECT_EQ("/usr/bin", params[1].second);
-  EXPECT_EQ("#", params[2].first);
-  EXPECT_EQ("%", params[2].second);
-}
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index b111de1..5624d0d 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -10,11 +10,11 @@
 
 #include <base/json/json_writer.h>
 #include <base/values.h>
+#include <chromeos/data_encoding.h>
 #include <chromeos/string_utils.h>
 
 #include "buffet/commands/command_definition.h"
 #include "buffet/commands/command_manager.h"
-#include "buffet/data_encoding.h"
 #include "buffet/device_registration_storage_keys.h"
 #include "buffet/http_transport_curl.h"
 #include "buffet/http_utils.h"
@@ -131,7 +131,7 @@
 
 std::string BuildURL(const std::string& url,
                      const std::vector<std::string>& subpaths,
-                     const buffet::data_encoding::WebParamList& params) {
+                     const chromeos::data_encoding::WebParamList& params) {
   std::string result = buffet::url::CombineMultiple(url, subpaths);
   return buffet::url::AppendQueryParams(result, params);
 }
@@ -165,20 +165,20 @@
 
 std::string DeviceRegistrationInfo::GetServiceURL(
     const std::string& subpath,
-    const data_encoding::WebParamList& params) const {
+    const chromeos::data_encoding::WebParamList& params) const {
   return BuildURL(service_url_, {subpath}, params);
 }
 
 std::string DeviceRegistrationInfo::GetDeviceURL(
     const std::string& subpath,
-    const data_encoding::WebParamList& params) const {
+    const chromeos::data_encoding::WebParamList& params) const {
   CHECK(!device_id_.empty()) << "Must have a valid device ID";
   return BuildURL(service_url_, {"devices", device_id_, subpath}, params);
 }
 
 std::string DeviceRegistrationInfo::GetOAuthURL(
     const std::string& subpath,
-    const data_encoding::WebParamList& params) const {
+    const chromeos::data_encoding::WebParamList& params) const {
   return BuildURL(oauth_url_, {subpath}, params);
 }
 
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 1985bb6..cdba4aa 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -12,9 +12,9 @@
 
 #include <base/basictypes.h>
 #include <base/time/time.h>
+#include <chromeos/data_encoding.h>
 #include <chromeos/error.h>
 
-#include "buffet/data_encoding.h"
 #include "buffet/http_transport.h"
 #include "buffet/storage_interface.h"
 
@@ -54,7 +54,7 @@
   // appended to the base URL which is normally
   //    https://www.googleapis.com/clouddevices/v1/".
   // If |params| are specified, each key-value pair is formatted using
-  // data_encoding::WebParamsEncode() and appended to URL as a query
+  // chromeos::data_encoding::WebParamsEncode() and appended to URL as a query
   // string.
   // So, calling:
   //    GetServiceURL("ticket", {{"key","apiKey"}})
@@ -62,20 +62,20 @@
   //    https://www.googleapis.com/clouddevices/v1/ticket?key=apiKey
   std::string GetServiceURL(
       const std::string& subpath = {},
-      const data_encoding::WebParamList& params = {}) const;
+      const chromeos::data_encoding::WebParamList& params = {}) const;
 
   // Returns a service URL to access the registered device on GCD server.
   // The base URL used to construct the full URL looks like this:
   //    https://www.googleapis.com/clouddevices/v1/devices/<device_id>/
   std::string GetDeviceURL(
     const std::string& subpath = {},
-    const data_encoding::WebParamList& params = {}) const;
+    const chromeos::data_encoding::WebParamList& params = {}) const;
 
   // Similar to GetServiceURL, GetOAuthURL() returns a URL of OAuth 2.0 server.
   // The base URL used is https://accounts.google.com/o/oauth2/.
   std::string GetOAuthURL(
     const std::string& subpath = {},
-    const data_encoding::WebParamList& params = {}) const;
+    const chromeos::data_encoding::WebParamList& params = {}) const;
 
   // Returns the registered device ID (GUID) or empty string if failed
   std::string GetDeviceId(chromeos::ErrorPtr* error);
diff --git a/buffet/http_transport_fake.cc b/buffet/http_transport_fake.cc
index 7df8567..40d8eff 100644
--- a/buffet/http_transport_fake.cc
+++ b/buffet/http_transport_fake.cc
@@ -156,7 +156,7 @@
         GetHeader(request_header::kContentType));
     if (mime_type == mime::application::kWwwFormUrlEncoded &&
         !GetData().empty()) {
-      auto fields = data_encoding::WebParamsDecode(GetDataAsString());
+      auto fields = chromeos::data_encoding::WebParamsDecode(GetDataAsString());
       form_fields_.insert(fields.begin(), fields.end());
     }
     form_fields_parsed_ = true;
diff --git a/buffet/http_utils.cc b/buffet/http_utils.cc
index 6111aa0..439acab 100644
--- a/buffet/http_utils.cc
+++ b/buffet/http_utils.cc
@@ -9,9 +9,9 @@
 #include <base/json/json_reader.h>
 #include <base/json/json_writer.h>
 #include <base/values.h>
+#include <chromeos/data_encoding.h>
 #include <chromeos/error_codes.h>
 
-#include "buffet/data_encoding.h"
 #include "buffet/mime_utils.h"
 
 namespace buffet {
@@ -89,7 +89,7 @@
                                        const HeaderList& headers,
                                        std::shared_ptr<Transport> transport,
                                        chromeos::ErrorPtr* error) {
-  std::string encoded_data = data_encoding::WebParamsEncode(data);
+  std::string encoded_data = chromeos::data_encoding::WebParamsEncode(data);
   return PostBinary(url, encoded_data.c_str(), encoded_data.size(),
                     mime::application::kWwwFormUrlEncoded,
                     headers, transport, error);
diff --git a/buffet/url_utils.cc b/buffet/url_utils.cc
index 3fcdb48..599fa5b 100644
--- a/buffet/url_utils.cc
+++ b/buffet/url_utils.cc
@@ -95,13 +95,13 @@
   return query_string;
 }
 
-data_encoding::WebParamList url::GetQueryStringParameters(
+chromeos::data_encoding::WebParamList url::GetQueryStringParameters(
     const std::string& url) {
   // Extract the query string and remove the leading '?'.
   std::string query_string = GetQueryString(url, true);
   if (!query_string.empty() && query_string.front() == '?')
     query_string.erase(query_string.begin());
-  return data_encoding::WebParamsDecode(query_string);
+  return chromeos::data_encoding::WebParamsDecode(query_string);
 }
 
 std::string url::GetQueryStringValue(
@@ -110,7 +110,7 @@
 }
 
 std::string url::GetQueryStringValue(
-    const data_encoding::WebParamList& params,
+    const chromeos::data_encoding::WebParamList& params,
     const std::string& name) {
   for (const auto& pair : params) {
     if (name.compare(pair.first) == 0)
@@ -139,7 +139,7 @@
 
 std::string url::AppendQueryParams(
     const std::string& url,
-    const data_encoding::WebParamList& params) {
+    const chromeos::data_encoding::WebParamList& params) {
   if (params.empty())
     return url;
   size_t query_pos, query_len;
@@ -151,7 +151,7 @@
   } else if (query_len > 1) {
     result += '&';
   }
-  result += data_encoding::WebParamsEncode(params);
+  result += chromeos::data_encoding::WebParamsEncode(params);
   if (fragment_pos < url.size()) {
     result += url.substr(fragment_pos);
   }
diff --git a/buffet/url_utils.h b/buffet/url_utils.h
index d9bce25..f0e9080 100644
--- a/buffet/url_utils.h
+++ b/buffet/url_utils.h
@@ -9,8 +9,7 @@
 #include <vector>
 
 #include <base/basictypes.h>
-
-#include "buffet/data_encoding.h"
+#include <chromeos/data_encoding.h>
 
 namespace buffet {
 
@@ -42,13 +41,15 @@
 std::string GetQueryString(const std::string& url, bool remove_fragment);
 
 // Parses the query string into a set of key-value pairs.
-data_encoding::WebParamList GetQueryStringParameters(const std::string& url);
+chromeos::data_encoding::WebParamList GetQueryStringParameters(
+    const std::string& url);
 
 // Returns a value of the specified query parameter, or empty string if missing.
 std::string GetQueryStringValue(const std::string& url,
                                 const std::string& name);
-std::string GetQueryStringValue(const data_encoding::WebParamList& params,
-                                const std::string& name);
+std::string GetQueryStringValue(
+    const chromeos::data_encoding::WebParamList& params,
+    const std::string& name);
 
 // Removes the query string and/or a fragment part from URL.
 // If |remove_fragment| is specified, the fragment is also removed.
@@ -66,7 +67,7 @@
 // Appends a list of query parameters to the URL.
 std::string AppendQueryParams(
     const std::string& url,
-    const data_encoding::WebParamList& params) WARN_UNUSED_RESULT;
+    const chromeos::data_encoding::WebParamList& params) WARN_UNUSED_RESULT;
 
 // Checks if the URL has query parameters.
 bool HasQueryString(const std::string& url);
