diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 2b42492..a56a15a 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -583,7 +583,7 @@
       FROM_HERE, base::Bind(cb, base::Owned(value.release())));
 }
 
-using ResponsePtr = scoped_ptr<chromeos::http::Response>;
+using ResponsePtr = std::unique_ptr<chromeos::http::Response>;
 
 void SendRequestWithRetries(
     const std::string& method,
@@ -614,7 +614,7 @@
     int status_code = response->GetStatusCode();
     if (status_code >= chromeos::http::status_code::Continue &&
         status_code < chromeos::http::status_code::BadRequest) {
-      success_callback.Run(request_id, response.Pass());
+      success_callback.Run(request_id, std::move(response));
       return;
     }
 
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 6cf5371..4fa4c47 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -10,7 +10,6 @@
 #include <string>
 #include <utility>
 
-#include <base/callback.h>
 #include <base/macros.h>
 #include <base/memory/weak_ptr.h>
 #include <base/message_loop/message_loop.h>
diff --git a/leaderd/group.cc b/leaderd/group.cc
index b77eb0b..f7f6642 100644
--- a/leaderd/group.cc
+++ b/leaderd/group.cc
@@ -64,7 +64,7 @@
 }
 
 void IgnoreHttpSuccess(chromeos::http::RequestID request_id,
-                       scoped_ptr<Response> response) {
+                       std::unique_ptr<Response> response) {
 }
 
 void IgnoreHttpFailure(chromeos::http::RequestID request_id,
@@ -338,7 +338,7 @@
 }
 
 void Group::HandleLeaderDiscoverResponse(chromeos::http::RequestID request_id,
-                                         scoped_ptr<Response> response) {
+                                         std::unique_ptr<Response> response) {
   chromeos::ErrorPtr error;
   std::unique_ptr<base::DictionaryValue> json_resp =
       chromeos::http::ParseJsonResponse(response.get(), nullptr, &error);
@@ -376,7 +376,7 @@
 }
 
 void Group::HandleLeaderChallengeResponse(chromeos::http::RequestID request_id,
-                                          scoped_ptr<Response> response) {
+                                          std::unique_ptr<Response> response) {
   chromeos::ErrorPtr error;
   std::unique_ptr<base::DictionaryValue> json_resp =
       chromeos::http::ParseJsonResponse(response.get(), nullptr, &error);
diff --git a/leaderd/group.h b/leaderd/group.h
index 1565d73..dc14888 100644
--- a/leaderd/group.h
+++ b/leaderd/group.h
@@ -98,12 +98,12 @@
   void SendLeaderDiscover(const std::string& peer_id);
   void HandleLeaderDiscoverResponse(
       chromeos::http::RequestID request_id,
-      scoped_ptr<chromeos::http::Response> response);
+      std::unique_ptr<chromeos::http::Response> response);
   // These methods let us periodically challenge the leader to confirm fitness.
   void SendLeaderChallenge(const std::string& peer_id);
   void HandleLeaderChallengeResponse(
       chromeos::http::RequestID request_id,
-      scoped_ptr<chromeos::http::Response> response);
+      std::unique_ptr<chromeos::http::Response> response);
   void HandleLeaderChallengeFailure(chromeos::http::RequestID request_id,
                                     const chromeos::Error*);
   // These methods let us announce our leadership.  We ignore results.
diff --git a/libchromeos/chromeos/http/http_connection_fake.cc b/libchromeos/chromeos/http/http_connection_fake.cc
index a70dd5c..3aed590 100644
--- a/libchromeos/chromeos/http/http_connection_fake.cc
+++ b/libchromeos/chromeos/http/http_connection_fake.cc
@@ -74,8 +74,8 @@
   if (!FinishRequest(&error)) {
     error_callback.Run(1, error.get());
   } else {
-    scoped_ptr<Response> response{new Response{shared_from_this()}};
-    success_callback.Run(1, response.Pass());
+    std::unique_ptr<Response> response{new Response{shared_from_this()}};
+    success_callback.Run(1, std::move(response));
   }
 }
 
diff --git a/libchromeos/chromeos/http/http_request_unittest.cc b/libchromeos/chromeos/http/http_request_unittest.cc
index c77d2d9..09867ee 100644
--- a/libchromeos/chromeos/http/http_request_unittest.cc
+++ b/libchromeos/chromeos/http/http_request_unittest.cc
@@ -157,7 +157,7 @@
   };
 
   auto success_callback =
-      [this, &resp_data](RequestID request_id, scoped_ptr<Response> resp) {
+      [this, &resp_data](RequestID request_id, std::unique_ptr<Response> resp) {
     EXPECT_EQ(23, request_id);
     EXPECT_CALL(*connection_, GetResponseStatusCode())
         .WillOnce(Return(status_code::Partial));
@@ -183,8 +183,8 @@
 
     EXPECT_CALL(*connection_, MockExtractDataStream(_))
       .WillOnce(Return(mock_stream.release()));
-    scoped_ptr<Response> resp{new Response{connection_}};
-    success_callback.Run(23, resp.Pass());
+    std::unique_ptr<Response> resp{new Response{connection_}};
+    success_callback.Run(23, std::move(resp));
   };
 
   EXPECT_CALL(
diff --git a/libchromeos/chromeos/http/http_transport.h b/libchromeos/chromeos/http/http_transport.h
index 0329a96..f3f5e47 100644
--- a/libchromeos/chromeos/http/http_transport.h
+++ b/libchromeos/chromeos/http/http_transport.h
@@ -13,7 +13,6 @@
 #include <base/callback_forward.h>
 #include <base/location.h>
 #include <base/macros.h>
-#include <base/memory/scoped_ptr.h>
 #include <base/time/time.h>
 #include <chromeos/chromeos_export.h>
 #include <chromeos/errors/error.h>
@@ -30,7 +29,8 @@
 using RequestID = int;
 
 using HeaderList = std::vector<std::pair<std::string, std::string>>;
-using SuccessCallback = base::Callback<void(RequestID, scoped_ptr<Response>)>;
+using SuccessCallback =
+    base::Callback<void(RequestID, std::unique_ptr<Response>)>;
 using ErrorCallback = base::Callback<void(RequestID, const chromeos::Error*)>;
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libchromeos/chromeos/http/http_transport_curl.cc b/libchromeos/chromeos/http/http_transport_curl.cc
index 0ab5e1d..5c3b54c 100644
--- a/libchromeos/chromeos/http/http_transport_curl.cc
+++ b/libchromeos/chromeos/http/http_transport_curl.cc
@@ -462,11 +462,11 @@
                                   p->second->request_id,
                                   base::Owned(error.release())));
     } else {
-      scoped_ptr<Response> response{new Response{request_data->connection}};
+      std::unique_ptr<Response> resp{new Response{request_data->connection}};
       RunCallbackAsync(FROM_HERE,
                        base::Bind(request_data->success_callback,
                                   p->second->request_id,
-                                  base::Passed(&response)));
+                                  base::Passed(&resp)));
     }
   }
   // In case of an error on CURL side, we would have dispatched the error
diff --git a/libchromeos/chromeos/http/http_transport_curl_unittest.cc b/libchromeos/chromeos/http/http_transport_curl_unittest.cc
index b8142e6..df36abf 100644
--- a/libchromeos/chromeos/http/http_transport_curl_unittest.cc
+++ b/libchromeos/chromeos/http/http_transport_curl_unittest.cc
@@ -228,7 +228,7 @@
   // Success/error callback needed to report the result of an async operation.
   int success_call_count = 0;
   auto success_callback = [&success_call_count, &run_loop](
-      RequestID request_id, scoped_ptr<http::Response> resp) {
+      RequestID request_id, std::unique_ptr<http::Response> resp) {
     base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure());
     success_call_count++;
   };
diff --git a/libchromeos/chromeos/http/http_utils_unittest.cc b/libchromeos/chromeos/http/http_utils_unittest.cc
index fa4bb55..c006b10 100644
--- a/libchromeos/chromeos/http/http_utils_unittest.cc
+++ b/libchromeos/chromeos/http/http_utils_unittest.cc
@@ -68,7 +68,7 @@
   // Test binary data round-tripping.
   std::vector<uint8_t> custom_data{0xFF, 0x00, 0x80, 0x40, 0xC0, 0x7F};
   auto success_callback =
-      [&custom_data](RequestID id, scoped_ptr<http::Response> response) {
+      [&custom_data](RequestID id, std::unique_ptr<http::Response> response) {
     EXPECT_TRUE(response->IsSuccessful());
     EXPECT_EQ(chromeos::mime::application::kOctet_stream,
               response->GetContentType());
@@ -157,7 +157,7 @@
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
   // Test failed response (URL not found).
   auto success_callback =
-      [](RequestID request_id, scoped_ptr<http::Response> response) {
+      [](RequestID request_id, std::unique_ptr<http::Response> response) {
     EXPECT_FALSE(response->IsSuccessful());
     EXPECT_EQ(status_code::NotFound, response->GetStatusCode());
   };
@@ -463,7 +463,7 @@
   Error::AddTo(&error, FROM_HERE, "test_domain", "test_code", "Test message");
   transport->SetCreateConnectionError(std::move(error));
   auto success_callback =
-      [](RequestID request_id, scoped_ptr<http::Response> response) {
+      [](RequestID request_id, std::unique_ptr<http::Response> response) {
     FAIL() << "This callback shouldn't have been called";
   };
   auto error_callback = [](RequestID request_id, const Error* error) {
