Adjust URLFetcher::Create API so that object is returned as scoped_ptr.

Most interfaces were storing the object in a scoped_ptr already. This
adjusts the API so that it is a little clearer of the ownership
transfer.

A number of clients put the URLFetcher in a table and do memory
management on it themselves; this is likely templatable code
for a future CL. The scope of this CL was to change the API but
no control flow changes. Making this change found one memory leak;
(http://crbug.com/482459) has been addressed separately.

BUG=371201
TESTS=net_unittests google_api_unittests
TBR=jochen@chromium.org, thakis@chromium.org, oshima@chromium.org, armansito@chromium.org, reillyg@chromium.org, rogerta@chromium.org, stuartmorgan@chromium.org, wez@chromium.org, pavely@chromium.org, rouslan@chromium.org

Review URL: https://codereview.chromium.org/1117703002

Cr-Commit-Position: refs/heads/master@{#327901}
diff --git a/chrome/browser/apps/drive/drive_app_converter.cc b/chrome/browser/apps/drive/drive_app_converter.cc
index b7a8c338..e1df7c9e 100644
--- a/chrome/browser/apps/drive/drive_app_converter.cc
+++ b/chrome/browser/apps/drive/drive_app_converter.cc
@@ -44,8 +44,7 @@
   ~IconFetcher() override {}
 
   void Start() {
-    fetcher_.reset(
-        net::URLFetcher::Create(icon_url_, net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(icon_url_, net::URLFetcher::GET, this);
     fetcher_->SetRequestContext(converter_->profile_->GetRequestContext());
     fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
     fetcher_->Start();
diff --git a/chrome/browser/autocomplete/zero_suggest_provider.cc b/chrome/browser/autocomplete/zero_suggest_provider.cc
index bb9f460..3df4f4d 100644
--- a/chrome/browser/autocomplete/zero_suggest_provider.cc
+++ b/chrome/browser/autocomplete/zero_suggest_provider.cc
@@ -330,10 +330,8 @@
     }
   } else {
     const int kFetcherID = 1;
-    fetcher_.reset(
-        net::URLFetcher::Create(kFetcherID,
-            suggest_url,
-            net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(kFetcherID, suggest_url,
+                                       net::URLFetcher::GET, this);
     fetcher_->SetRequestContext(profile_->GetRequestContext());
     fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
     // Add Chrome experiment state to the request headers.
diff --git a/chrome/browser/bitmap_fetcher/bitmap_fetcher.cc b/chrome/browser/bitmap_fetcher/bitmap_fetcher.cc
index 5c6ddc7d..f99f3c20 100644
--- a/chrome/browser/bitmap_fetcher/bitmap_fetcher.cc
+++ b/chrome/browser/bitmap_fetcher/bitmap_fetcher.cc
@@ -26,7 +26,7 @@
   if (url_fetcher_ != NULL)
     return;
 
-  url_fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
+  url_fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(request_context);
   url_fetcher_->SetReferrer(referrer);
   url_fetcher_->SetReferrerPolicy(referrer_policy);
diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.cc b/chrome/browser/chromeos/attestation/attestation_ca_client.cc
index 4a9aca6..ab1ae86 100644
--- a/chrome/browser/chromeos/attestation/attestation_ca_client.cc
+++ b/chrome/browser/chromeos/attestation/attestation_ca_client.cc
@@ -77,10 +77,9 @@
                                    const std::string& request,
                                    const DataCallback& on_response) {
   // The first argument allows the use of TestURLFetcherFactory in tests.
-  net::URLFetcher* fetcher = net::URLFetcher::Create(0,
-                                                     GURL(url),
-                                                     net::URLFetcher::POST,
-                                                     this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(0, GURL(url), net::URLFetcher::POST, this)
+          .release();
   fetcher->SetRequestContext(g_browser_process->system_request_context());
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                         net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/chromeos/customization/customization_document.cc b/chrome/browser/chromeos/customization/customization_document.cc
index 368908b..bec7f55 100644
--- a/chrome/browser/chromeos/customization/customization_document.cc
+++ b/chrome/browser/chromeos/customization/customization_document.cc
@@ -567,8 +567,7 @@
 }
 
 void ServicesCustomizationDocument::DoStartFileFetch() {
-  url_fetcher_.reset(net::URLFetcher::Create(
-      url_, net::URLFetcher::GET, this));
+  url_fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(g_browser_process->system_request_context());
   url_fetcher_->AddExtraRequestHeader("Accept: application/json");
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/chromeos/customization/customization_wallpaper_downloader.cc b/chrome/browser/chromeos/customization/customization_wallpaper_downloader.cc
index 3213831d..08537c6 100644
--- a/chrome/browser/chromeos/customization/customization_wallpaper_downloader.cc
+++ b/chrome/browser/chromeos/customization/customization_wallpaper_downloader.cc
@@ -86,8 +86,8 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   DCHECK(wallpaper_url_.is_valid());
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(wallpaper_url_, net::URLFetcher::GET, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(wallpaper_url_, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(url_context_getter_.get());
   url_fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE |
                              net::LOAD_DISABLE_CACHE |
diff --git a/chrome/browser/chromeos/extensions/wallpaper_api.cc b/chrome/browser/chromeos/extensions/wallpaper_api.cc
index b57296cb..2ae5cc1 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_api.cc
+++ b/chrome/browser/chromeos/extensions/wallpaper_api.cc
@@ -48,9 +48,7 @@
   void FetchWallpaper(const GURL& url, FetchCallback callback) {
     CancelPreviousFetch();
     callback_ = callback;
-    url_fetcher_.reset(net::URLFetcher::Create(url,
-                                               net::URLFetcher::GET,
-                                               this));
+    url_fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
     url_fetcher_->SetRequestContext(
         g_browser_process->system_request_context());
     url_fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
diff --git a/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc b/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc
index 78987897..164a8f4 100644
--- a/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc
+++ b/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc
@@ -93,8 +93,8 @@
   }
 
   // Start downloading the Terms of Service.
-  terms_of_service_fetcher_.reset(net::URLFetcher::Create(
-      GURL(terms_of_service_url), net::URLFetcher::GET, this));
+  terms_of_service_fetcher_ = net::URLFetcher::Create(
+      GURL(terms_of_service_url), net::URLFetcher::GET, this);
   terms_of_service_fetcher_->SetRequestContext(
       g_browser_process->system_request_context());
   // Request a text/plain MIME type as only plain-text Terms of Service are
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
index 6f7280a1a..9e9f1a8 100644
--- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
@@ -376,28 +376,25 @@
 class WizardControllerTestURLFetcherFactory
     : public net::TestURLFetcherFactory {
  public:
-  net::URLFetcher* CreateURLFetcher(int id,
-                                    const GURL& url,
-                                    net::URLFetcher::RequestType request_type,
-                                    net::URLFetcherDelegate* d) override {
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
+      int id,
+      const GURL& url,
+      net::URLFetcher::RequestType request_type,
+      net::URLFetcherDelegate* d) override {
     if (StartsWithASCII(
             url.spec(),
             SimpleGeolocationProvider::DefaultGeolocationProviderURL().spec(),
             true)) {
-      return new net::FakeURLFetcher(url,
-                                     d,
-                                     std::string(kGeolocationResponseBody),
-                                     net::HTTP_OK,
-                                     net::URLRequestStatus::SUCCESS);
+      return scoped_ptr<net::URLFetcher>(new net::FakeURLFetcher(
+          url, d, std::string(kGeolocationResponseBody), net::HTTP_OK,
+          net::URLRequestStatus::SUCCESS));
     }
     if (StartsWithASCII(url.spec(),
                         chromeos::DefaultTimezoneProviderURL().spec(),
                         true)) {
-      return new net::FakeURLFetcher(url,
-                                     d,
-                                     std::string(kTimezoneResponseBody),
-                                     net::HTTP_OK,
-                                     net::URLRequestStatus::SUCCESS);
+      return scoped_ptr<net::URLFetcher>(new net::FakeURLFetcher(
+          url, d, std::string(kTimezoneResponseBody), net::HTTP_OK,
+          net::URLRequestStatus::SUCCESS));
     }
     return net::TestURLFetcherFactory::CreateURLFetcher(
         id, url, request_type, d);
diff --git a/chrome/browser/chromeos/policy/cloud_external_data_manager_base_unittest.cc b/chrome/browser/chromeos/policy/cloud_external_data_manager_base_unittest.cc
index 24396491..93d35c7 100644
--- a/chrome/browser/chromeos/policy/cloud_external_data_manager_base_unittest.cc
+++ b/chrome/browser/chromeos/policy/cloud_external_data_manager_base_unittest.cc
@@ -70,10 +70,11 @@
   ~FakeURLFetcherFactory() override;
 
   // net::FakeURLFetcherFactory:
-  net::URLFetcher* CreateURLFetcher(int id,
-                                    const GURL& url,
-                                    net::URLFetcher::RequestType request_type,
-                                    net::URLFetcherDelegate* delegate) override;
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
+      int id,
+      const GURL& url,
+      net::URLFetcher::RequestType request_type,
+      net::URLFetcherDelegate* delegate) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(FakeURLFetcherFactory);
@@ -86,15 +87,16 @@
 FakeURLFetcherFactory::~FakeURLFetcherFactory() {
 }
 
-net::URLFetcher* FakeURLFetcherFactory::CreateURLFetcher(
+scoped_ptr<net::URLFetcher> FakeURLFetcherFactory::CreateURLFetcher(
     int id,
     const GURL& url,
     net::URLFetcher::RequestType request_type,
     net::URLFetcherDelegate* delegate) {
-  net::URLFetcher* fetcher = net::FakeURLFetcherFactory::CreateURLFetcher(
-      id, url, request_type, delegate);
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::FakeURLFetcherFactory::CreateURLFetcher(id, url, request_type,
+                                                   delegate);
   EXPECT_TRUE(fetcher);
-  return fetcher;
+  return fetcher.Pass();
 }
 
 }  // namespace
diff --git a/chrome/browser/chromeos/policy/upload_job.cc b/chrome/browser/chromeos/policy/upload_job.cc
index 6c0a621b..3ef63ff 100644
--- a/chrome/browser/chromeos/policy/upload_job.cc
+++ b/chrome/browser/chromeos/policy/upload_job.cc
@@ -314,8 +314,8 @@
   std::string content_type = kUploadContentType;
   content_type.append("; boundary=");
   content_type.append(*mime_boundary_.get());
-  upload_fetcher_.reset(
-      net::URLFetcher::Create(upload_url_, net::URLFetcher::POST, this));
+  upload_fetcher_ =
+      net::URLFetcher::Create(upload_url_, net::URLFetcher::POST, this);
   upload_fetcher_->SetRequestContext(url_context_getter_.get());
   upload_fetcher_->SetUploadData(content_type, *post_data_);
   upload_fetcher_->AddExtraRequestHeader(
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc
index 2f67ae2..3a5d3ca 100644
--- a/chrome/browser/devtools/devtools_ui_bindings.cc
+++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -590,7 +590,7 @@
   }
 
   net::URLFetcher* fetcher =
-      net::URLFetcher::Create(gurl, net::URLFetcher::GET, this);
+      net::URLFetcher::Create(gurl, net::URLFetcher::GET, this).release();
   pending_requests_[fetcher] = callback;
   fetcher->SetRequestContext(profile_->GetRequestContext());
   fetcher->SetExtraRequestHeaders(headers);
diff --git a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc
index 88b17b000..b220af0 100644
--- a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc
+++ b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc
@@ -84,7 +84,7 @@
 
   // Store the URL fetcher on this object so that it is destroyed before this
   // object is.
-  url_fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
+  url_fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
 
   url_fetcher_->SetRequestContext(request_context_);
   url_fetcher_->SaveResponseToFileAtPath(
diff --git a/chrome/browser/extensions/blacklist_state_fetcher.cc b/chrome/browser/extensions/blacklist_state_fetcher.cc
index 3af0bc5..c74831eb 100644
--- a/chrome/browser/extensions/blacklist_state_fetcher.cc
+++ b/chrome/browser/extensions/blacklist_state_fetcher.cc
@@ -139,10 +139,9 @@
   request.SerializeToString(&request_str);
 
   GURL request_url = RequestUrl();
-  net::URLFetcher* fetcher = net::URLFetcher::Create(url_fetcher_id_++,
-                                                     request_url,
-                                                     net::URLFetcher::POST,
-                                                     this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(url_fetcher_id_++, request_url,
+                              net::URLFetcher::POST, this).release();
   requests_[fetcher] = id;
   fetcher->SetAutomaticallyRetryOn5xx(false);  // Don't retry on error.
   fetcher->SetRequestContext(url_request_context_getter_.get());
diff --git a/chrome/browser/extensions/blob_reader.cc b/chrome/browser/extensions/blob_reader.cc
index bab8634d..c8d4218 100644
--- a/chrome/browser/extensions/blob_reader.cc
+++ b/chrome/browser/extensions/blob_reader.cc
@@ -28,9 +28,7 @@
     blob_url = GURL(std::string("blob:uuid/") + blob_uuid);
   }
   DCHECK(blob_url.is_valid());
-  fetcher_.reset(net::URLFetcher::Create(
-      blob_url, net::URLFetcher::GET,
-      this));
+  fetcher_ = net::URLFetcher::Create(blob_url, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(profile->GetRequestContext());
 }
 
diff --git a/chrome/browser/extensions/install_signer.cc b/chrome/browser/extensions/install_signer.cc
index 7ddaa62..1fca16a 100644
--- a/chrome/browser/extensions/install_signer.cc
+++ b/chrome/browser/extensions/install_signer.cc
@@ -369,8 +369,8 @@
                                      base::Unretained(this));
 
   delegate_.reset(new FetcherDelegate(closure));
-  url_fetcher_.reset(net::URLFetcher::Create(
-      GetBackendUrl(), net::URLFetcher::POST, delegate_.get()));
+  url_fetcher_ = net::URLFetcher::Create(GetBackendUrl(), net::URLFetcher::POST,
+                                         delegate_.get());
   url_fetcher_->SetRequestContext(context_getter_);
 
   // The request protocol is JSON of the form:
diff --git a/chrome/browser/extensions/webstore_data_fetcher.cc b/chrome/browser/extensions/webstore_data_fetcher.cc
index 0300519..0805cae 100644
--- a/chrome/browser/extensions/webstore_data_fetcher.cc
+++ b/chrome/browser/extensions/webstore_data_fetcher.cc
@@ -38,8 +38,8 @@
 void WebstoreDataFetcher::Start() {
   GURL webstore_data_url(extension_urls::GetWebstoreItemJsonDataURL(id_));
 
-  webstore_data_url_fetcher_.reset(net::URLFetcher::Create(
-      webstore_data_url, net::URLFetcher::GET, this));
+  webstore_data_url_fetcher_ =
+      net::URLFetcher::Create(webstore_data_url, net::URLFetcher::GET, this);
   webstore_data_url_fetcher_->SetRequestContext(request_context_);
   webstore_data_url_fetcher_->SetReferrer(referrer_url_.spec());
   webstore_data_url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/intranet_redirect_detector.cc b/chrome/browser/intranet_redirect_detector.cc
index ead73336..1a87952 100644
--- a/chrome/browser/intranet_redirect_detector.cc
+++ b/chrome/browser/intranet_redirect_detector.cc
@@ -80,8 +80,9 @@
     for (int j = 0; j < num_chars; ++j)
       url_string += ('a' + base::RandInt(0, 'z' - 'a'));
     GURL random_url(url_string + '/');
-    net::URLFetcher* fetcher = net::URLFetcher::Create(
-        random_url, net::URLFetcher::HEAD, this);
+    net::URLFetcher* fetcher =
+        net::URLFetcher::Create(random_url, net::URLFetcher::HEAD, this)
+            .release();
     // We don't want these fetches to affect existing state in the profile.
     fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE |
                           net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/local_discovery/gcd_api_flow_impl.cc b/chrome/browser/local_discovery/gcd_api_flow_impl.cc
index d4abd93..7e23c1b3 100644
--- a/chrome/browser/local_discovery/gcd_api_flow_impl.cc
+++ b/chrome/browser/local_discovery/gcd_api_flow_impl.cc
@@ -63,7 +63,7 @@
 void GCDApiFlowImpl::CreateRequest(const GURL& url) {
   net::URLFetcher::RequestType request_type = request_->GetRequestType();
 
-  url_fetcher_.reset(net::URLFetcher::Create(url, request_type, this));
+  url_fetcher_ = net::URLFetcher::Create(url, request_type, this);
 
   if (request_type != net::URLFetcher::GET) {
     std::string upload_type;
diff --git a/chrome/browser/local_discovery/privet_url_fetcher.cc b/chrome/browser/local_discovery/privet_url_fetcher.cc
index 401f051d..0a76ed2 100644
--- a/chrome/browser/local_discovery/privet_url_fetcher.cc
+++ b/chrome/browser/local_discovery/privet_url_fetcher.cc
@@ -146,9 +146,7 @@
 void PrivetURLFetcher::Try() {
   tries_++;
   if (tries_ < kPrivetMaxRetries) {
-
-
-    url_fetcher_.reset(net::URLFetcher::Create(url_, request_type_, this));
+    url_fetcher_ = net::URLFetcher::Create(url_, request_type_, this);
     // Privet requests are relevant to hosts on local network only.
     url_fetcher_->SetLoadFlags(url_fetcher_->GetLoadFlags() |
                                net::LOAD_BYPASS_PROXY |
diff --git a/chrome/browser/media/webrtc_log_uploader.cc b/chrome/browser/media/webrtc_log_uploader.cc
index 5b7abb76..b7e96e670 100644
--- a/chrome/browser/media/webrtc_log_uploader.cc
+++ b/chrome/browser/media/webrtc_log_uploader.cc
@@ -449,8 +449,8 @@
   content_type.append(kMultipartBoundary);
 
   net::URLFetcher* url_fetcher =
-      net::URLFetcher::Create(GURL(chrome::kUploadURL),
-                              net::URLFetcher::POST, this);
+      net::URLFetcher::Create(GURL(chrome::kUploadURL), net::URLFetcher::POST,
+                              this).release();
   url_fetcher->SetRequestContext(g_browser_process->system_request_context());
   url_fetcher->SetUploadData(content_type, *post_data);
   url_fetcher->Start();
diff --git a/chrome/browser/metrics/variations/variations_service.cc b/chrome/browser/metrics/variations/variations_service.cc
index 2ad9b02..a56fc54 100644
--- a/chrome/browser/metrics/variations/variations_service.cc
+++ b/chrome/browser/metrics/variations/variations_service.cc
@@ -446,8 +446,8 @@
 }
 
 void VariationsService::DoActualFetch() {
-  pending_seed_request_.reset(net::URLFetcher::Create(
-      0, variations_server_url_, net::URLFetcher::GET, this));
+  pending_seed_request_ = net::URLFetcher::Create(0, variations_server_url_,
+                                                  net::URLFetcher::GET, this);
   pending_seed_request_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                                       net::LOAD_DO_NOT_SAVE_COOKIES);
   pending_seed_request_->SetRequestContext(
diff --git a/chrome/browser/net/sdch_browsertest.cc b/chrome/browser/net/sdch_browsertest.cc
index 591ad3a..16bf982 100644
--- a/chrome/browser/net/sdch_browsertest.cc
+++ b/chrome/browser/net/sdch_browsertest.cc
@@ -277,7 +277,7 @@
 
   void FetchUrlDetailed(GURL url, net::URLRequestContextGetter* getter) {
     url_fetch_complete_ = false;
-    fetcher_.reset(net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
     fetcher_->SetRequestContext(getter);
     fetcher_->Start();
     if (!url_fetch_complete_) {
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
index f9c6c83..117fa16 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
@@ -142,10 +142,8 @@
                                                const std::string& brandcode)
     : fetch_callback_(callback) {
   DCHECK(!brandcode.empty());
-  config_fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
-                                                url,
-                                                net::URLFetcher::POST,
-                                                this));
+  config_fetcher_ = net::URLFetcher::Create(0 /* ID used for testing */, url,
+                                            net::URLFetcher::POST, this);
   config_fetcher_->SetRequestContext(
       g_browser_process->system_request_context());
   config_fetcher_->SetUploadData("text/xml", GetUploadData(brandcode));
diff --git a/chrome/browser/profiles/profile_downloader.cc b/chrome/browser/profiles/profile_downloader.cc
index 1b98bcd4..87ba86e 100644
--- a/chrome/browser/profiles/profile_downloader.cc
+++ b/chrome/browser/profiles/profile_downloader.cc
@@ -322,8 +322,8 @@
   }
   VLOG(1) << "Fetching profile image from " << image_url;
   picture_url_ = image_url;
-  profile_image_fetcher_.reset(net::URLFetcher::Create(
-      GURL(image_url), net::URLFetcher::GET, this));
+  profile_image_fetcher_ =
+      net::URLFetcher::Create(GURL(image_url), net::URLFetcher::GET, this);
   profile_image_fetcher_->SetRequestContext(
       delegate_->GetBrowserProfile()->GetRequestContext());
   profile_image_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc
index 5dd332a3..e7fab2f 100644
--- a/chrome/browser/safe_browsing/client_side_detection_service.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_service.cc
@@ -273,9 +273,9 @@
   if (enabled_) {
     // Start fetching the model either from the cache or possibly from the
     // network if the model isn't in the cache.
-    model_fetcher_.reset(net::URLFetcher::Create(
-        0 /* ID used for testing */, GURL(kClientModelUrl),
-        net::URLFetcher::GET, this));
+    model_fetcher_ = net::URLFetcher::Create(0 /* ID used for testing */,
+                                             GURL(kClientModelUrl),
+                                             net::URLFetcher::GET, this);
     model_fetcher_->SetRequestContext(request_context_getter_.get());
     model_fetcher_->Start();
   }
@@ -326,10 +326,10 @@
     return;
   }
 
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      0 /* ID used for testing */,
-      GetClientReportUrl(kClientReportPhishingUrl),
-      net::URLFetcher::POST, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(0 /* ID used for testing */,
+                              GetClientReportUrl(kClientReportPhishingUrl),
+                              net::URLFetcher::POST, this).release();
 
   // Remember which callback and URL correspond to the current fetcher object.
   ClientReportInfo* info = new ClientReportInfo;
@@ -367,10 +367,10 @@
     return;
   }
 
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      0 /* ID used for testing */,
-      GetClientReportUrl(kClientReportMalwareUrl),
-      net::URLFetcher::POST, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(0 /* ID used for testing */,
+                              GetClientReportUrl(kClientReportMalwareUrl),
+                              net::URLFetcher::POST, this).release();
 
   // Remember which callback and URL correspond to the current fetcher object.
   ClientMalwareReportInfo* info = new ClientMalwareReportInfo;
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc
index bb0e1a44..e53a9820 100644
--- a/chrome/browser/safe_browsing/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection_service.cc
@@ -773,10 +773,9 @@
 
     DVLOG(2) << "Sending a request for URL: "
              << item_->GetUrlChain().back();
-    fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
-                                           GetDownloadRequestUrl(),
-                                           net::URLFetcher::POST,
-                                           this));
+    fetcher_ = net::URLFetcher::Create(0 /* ID used for testing */,
+                                       GetDownloadRequestUrl(),
+                                       net::URLFetcher::POST, this);
     fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
     fetcher_->SetAutomaticallyRetryOn5xx(false);  // Don't retry on error.
     fetcher_->SetRequestContext(service_->request_context_getter_.get());
diff --git a/chrome/browser/safe_browsing/malware_details_cache.cc b/chrome/browser/safe_browsing/malware_details_cache.cc
index dc5fbc5..4e8ae12 100644
--- a/chrome/browser/safe_browsing/malware_details_cache.cc
+++ b/chrome/browser/safe_browsing/malware_details_cache.cc
@@ -78,8 +78,8 @@
     return;
   }
 
-  current_fetch_.reset(net::URLFetcher::Create(
-      GURL(resources_it_->first), net::URLFetcher::GET, this));
+  current_fetch_ = net::URLFetcher::Create(GURL(resources_it_->first),
+                                           net::URLFetcher::GET, this);
   current_fetch_->SetRequestContext(request_context_getter_.get());
   // Only from cache, and don't save cookies.
   current_fetch_->SetLoadFlags(net::LOAD_ONLY_FROM_CACHE |
diff --git a/chrome/browser/safe_browsing/ping_manager.cc b/chrome/browser/safe_browsing/ping_manager.cc
index 86b29d3..fb0a2d1 100644
--- a/chrome/browser/safe_browsing/ping_manager.cc
+++ b/chrome/browser/safe_browsing/ping_manager.cc
@@ -95,10 +95,11 @@
   GURL report_url = SafeBrowsingHitUrl(malicious_url, page_url,
                                        referrer_url, is_subresource,
                                        threat_type);
-  net::URLFetcher* report = net::URLFetcher::Create(
-      report_url,
-      post_data.empty() ? net::URLFetcher::GET : net::URLFetcher::POST,
-      this);
+  net::URLFetcher* report =
+      net::URLFetcher::Create(
+          report_url,
+          post_data.empty() ? net::URLFetcher::GET : net::URLFetcher::POST,
+          this).release();
   report->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   report->SetRequestContext(request_context_getter_.get());
   if (!post_data.empty())
@@ -111,8 +112,9 @@
 void SafeBrowsingPingManager::ReportMalwareDetails(
     const std::string& report) {
   GURL report_url = MalwareDetailsUrl();
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      report_url, net::URLFetcher::POST, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(report_url, net::URLFetcher::POST, this)
+          .release();
   fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   fetcher->SetRequestContext(request_context_getter_.get());
   fetcher->SetUploadData("application/octet-stream", report);
diff --git a/chrome/browser/safe_browsing/protocol_manager.cc b/chrome/browser/safe_browsing/protocol_manager.cc
index 234a0e7..e8b55e1 100644
--- a/chrome/browser/safe_browsing/protocol_manager.cc
+++ b/chrome/browser/safe_browsing/protocol_manager.cc
@@ -183,8 +183,9 @@
     return;
   }
   GURL gethash_url = GetHashUrl();
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      url_fetcher_id_++, gethash_url, net::URLFetcher::POST, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(url_fetcher_id_++, gethash_url,
+                              net::URLFetcher::POST, this).release();
   hash_requests_[fetcher] = FullHashDetails(callback, is_download);
 
   const std::string get_hash = safe_browsing::FormatGetHash(prefixes);
@@ -557,8 +558,8 @@
   backup_update_reason_ = backup_update_reason;
 
   GURL backup_update_url = BackupUpdateUrl(backup_update_reason);
-  request_.reset(net::URLFetcher::Create(
-      url_fetcher_id_++, backup_update_url, net::URLFetcher::POST, this));
+  request_ = net::URLFetcher::Create(url_fetcher_id_++, backup_update_url,
+                                     net::URLFetcher::POST, this);
   request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   request_->SetRequestContext(request_context_getter_.get());
   request_->SetUploadData("text/plain", update_list_data_);
@@ -584,8 +585,8 @@
   DCHECK(!next_chunk.url.empty());
   GURL chunk_url = NextChunkUrl(next_chunk.url);
   request_type_ = CHUNK_REQUEST;
-  request_.reset(net::URLFetcher::Create(
-      url_fetcher_id_++, chunk_url, net::URLFetcher::GET, this));
+  request_ = net::URLFetcher::Create(url_fetcher_id_++, chunk_url,
+                                     net::URLFetcher::GET, this);
   request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   request_->SetRequestContext(request_context_getter_.get());
   chunk_request_start_ = base::Time::Now();
@@ -635,8 +636,8 @@
   UMA_HISTOGRAM_COUNTS("SB2.UpdateRequestSize", update_list_data_.size());
 
   GURL update_url = UpdateUrl();
-  request_.reset(net::URLFetcher::Create(
-      url_fetcher_id_++, update_url, net::URLFetcher::POST, this));
+  request_ = net::URLFetcher::Create(url_fetcher_id_++, update_url,
+                                     net::URLFetcher::POST, this);
   request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   request_->SetRequestContext(request_context_getter_.get());
   request_->SetUploadData("text/plain", update_list_data_);
diff --git a/chrome/browser/safe_browsing/safe_browsing_test.cc b/chrome/browser/safe_browsing/safe_browsing_test.cc
index d5de0ad..faf3619 100644
--- a/chrome/browser/safe_browsing/safe_browsing_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_test.cc
@@ -472,8 +472,7 @@
   // Fetch a URL. If message_loop_started is true, starts the message loop
   // so the caller could wait till OnURLFetchComplete is called.
   net::URLRequestStatus::Status FetchUrl(const GURL& url) {
-    url_fetcher_.reset(net::URLFetcher::Create(
-        url, net::URLFetcher::GET, this));
+    url_fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
     url_fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
     url_fetcher_->SetRequestContext(request_context_);
     url_fetcher_->Start();
diff --git a/chrome/browser/safe_browsing/two_phase_uploader.cc b/chrome/browser/safe_browsing/two_phase_uploader.cc
index ac79e41..aafecec 100644
--- a/chrome/browser/safe_browsing/two_phase_uploader.cc
+++ b/chrome/browser/safe_browsing/two_phase_uploader.cc
@@ -160,8 +160,8 @@
 void TwoPhaseUploaderImpl::UploadMetadata() {
   DCHECK(CalledOnValidThread());
   state_ = UPLOAD_METADATA;
-  url_fetcher_.reset(net::URLFetcher::Create(base_url_, net::URLFetcher::POST,
-                                             this));
+  url_fetcher_ =
+      net::URLFetcher::Create(base_url_, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(url_request_context_getter_.get());
   url_fetcher_->SetExtraRequestHeaders(kStartHeader);
   url_fetcher_->SetUploadData(kUploadContentType, metadata_);
@@ -172,8 +172,8 @@
   DCHECK(CalledOnValidThread());
   state_ = UPLOAD_FILE;
 
-  url_fetcher_.reset(net::URLFetcher::Create(upload_url_, net::URLFetcher::PUT,
-                                             this));
+  url_fetcher_ =
+      net::URLFetcher::Create(upload_url_, net::URLFetcher::PUT, this);
   url_fetcher_->SetRequestContext(url_request_context_getter_.get());
   url_fetcher_->SetUploadFilePath(
       kUploadContentType, file_path_, 0, kuint64max, file_task_runner_);
diff --git a/chrome/browser/spellchecker/feedback_sender.cc b/chrome/browser/spellchecker/feedback_sender.cc
index ab83a50..5ed97bb 100644
--- a/chrome/browser/spellchecker/feedback_sender.cc
+++ b/chrome/browser/spellchecker/feedback_sender.cc
@@ -407,8 +407,9 @@
 
   // The tests use this identifier to mock the URL fetcher.
   static const int kUrlFetcherId = 0;
-  net::URLFetcher* sender = net::URLFetcher::Create(
-      kUrlFetcherId, feedback_service_url_, net::URLFetcher::POST, this);
+  net::URLFetcher* sender =
+      net::URLFetcher::Create(kUrlFetcherId, feedback_service_url_,
+                              net::URLFetcher::POST, this).release();
   sender->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                        net::LOAD_DO_NOT_SAVE_COOKIES);
   sender->SetUploadData("application/json", feedback);
diff --git a/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc b/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
index daac459..b2e73c4 100644
--- a/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
+++ b/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
@@ -230,7 +230,7 @@
   download_status_ = DOWNLOAD_IN_PROGRESS;
   FOR_EACH_OBSERVER(Observer, observers_, OnHunspellDictionaryDownloadBegin());
 
-  fetcher_.reset(net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+  fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(request_context_getter_);
   fetcher_->SetLoadFlags(
       net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/chrome/browser/spellchecker/spelling_service_client.cc b/chrome/browser/spellchecker/spelling_service_client.cc
index 5808e6f9..7248f8a 100644
--- a/chrome/browser/spellchecker/spelling_service_client.cc
+++ b/chrome/browser/spellchecker/spelling_service_client.cc
@@ -90,7 +90,7 @@
       api_key.c_str());
 
   GURL url = GURL(kSpellingServiceURL);
-  net::URLFetcher* fetcher = CreateURLFetcher(url);
+  net::URLFetcher* fetcher = CreateURLFetcher(url).release();
   fetcher->SetRequestContext(context->GetRequestContext());
   fetcher->SetUploadData("application/json", request);
   fetcher->SetLoadFlags(
@@ -253,6 +253,7 @@
   callback_data->callback.Run(success, callback_data->text, results);
 }
 
-net::URLFetcher* SpellingServiceClient::CreateURLFetcher(const GURL& url) {
+scoped_ptr<net::URLFetcher> SpellingServiceClient::CreateURLFetcher(
+    const GURL& url) {
   return net::URLFetcher::Create(url, net::URLFetcher::POST, this);
 }
diff --git a/chrome/browser/spellchecker/spelling_service_client.h b/chrome/browser/spellchecker/spelling_service_client.h
index 4b5b4df..e96c80e 100644
--- a/chrome/browser/spellchecker/spelling_service_client.h
+++ b/chrome/browser/spellchecker/spelling_service_client.h
@@ -115,7 +115,7 @@
   // Creates a URLFetcher object used for sending a JSON-RPC request. This
   // function is overridden by unit tests to prevent them from actually sending
   // requests to the Spelling service.
-  virtual net::URLFetcher* CreateURLFetcher(const GURL& url);
+  virtual scoped_ptr<net::URLFetcher> CreateURLFetcher(const GURL& url);
 
   // The URLFetcher object used for sending a JSON-RPC request.
   std::map<const net::URLFetcher*, TextCheckCallbackData*> spellcheck_fetchers_;
diff --git a/chrome/browser/spellchecker/spelling_service_client_unittest.cc b/chrome/browser/spellchecker/spelling_service_client_unittest.cc
index 3f2516d..09f5cce 100644
--- a/chrome/browser/spellchecker/spelling_service_client_unittest.cc
+++ b/chrome/browser/spellchecker/spelling_service_client_unittest.cc
@@ -166,13 +166,13 @@
   }
 
  private:
-  net::URLFetcher* CreateURLFetcher(const GURL& url) override {
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(const GURL& url) override {
     EXPECT_EQ("https://www.googleapis.com/rpc", url.spec());
     fetcher_ = new TestSpellingURLFetcher(0, url, this,
                                           request_type_, request_text_,
                                           request_language_,
                                           response_status_, response_data_);
-    return fetcher_;
+    return scoped_ptr<net::URLFetcher>(fetcher_);
   }
 
   int request_type_;
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
index 63211fe..c1b9921f 100644
--- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
+++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
@@ -167,8 +167,7 @@
 
   GURL url(kFamilyApiUrl + request_suffix_);
   const int id = 0;
-  url_fetcher_.reset(
-      net::URLFetcher::Create(id, url, request_type_, this));
+  url_fetcher_ = net::URLFetcher::Create(id, url, request_type_, this);
 
   url_fetcher_->SetRequestContext(request_context_);
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
index ac27806..0f868f453 100644
--- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
+++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
@@ -174,10 +174,8 @@
   DCHECK(it != requests_.end());
   (*it)->access_token = access_token;
 
-  (*it)->url_fetcher.reset(URLFetcher::Create((*it)->url_fetcher_id,
-                                              GetApiUrl(),
-                                              URLFetcher::POST,
-                                              this));
+  (*it)->url_fetcher = URLFetcher::Create((*it)->url_fetcher_id, GetApiUrl(),
+                                          URLFetcher::POST, this);
 
   (*it)->url_fetcher->SetRequestContext(context_);
   (*it)->url_fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc b/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc
index 5af4dc6f..8a0e73f 100644
--- a/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc
+++ b/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc
@@ -87,8 +87,8 @@
   const int kSafeId = 0;
   const int kUnsafeId = 1;
   int id = safe ? kSafeId : kUnsafeId;
-  scoped_ptr<net::URLFetcher> fetcher(URLFetcher::Create(
-      id, BuildSearchURL(api_key, url, safe), URLFetcher::GET, delegate));
+  scoped_ptr<net::URLFetcher> fetcher = URLFetcher::Create(
+      id, BuildSearchURL(api_key, url, safe), URLFetcher::GET, delegate);
   fetcher->SetRequestContext(context);
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                         net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fetcher.cc b/chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fetcher.cc
index 883ebaa..07a3bf8 100644
--- a/chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fetcher.cc
+++ b/chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fetcher.cc
@@ -156,7 +156,7 @@
   // unit tests.
   const int id = 1;
 
-  url_fetcher_.reset(URLFetcher::Create(id, url, URLFetcher::POST, this));
+  url_fetcher_ = URLFetcher::Create(id, url, URLFetcher::POST, this);
 
   url_fetcher_->SetRequestContext(context_);
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/sync/sync_stopped_reporter.cc b/chrome/browser/sync/sync_stopped_reporter.cc
index b57f03a..ad7b9f42 100644
--- a/chrome/browser/sync/sync_stopped_reporter.cc
+++ b/chrome/browser/sync/sync_stopped_reporter.cc
@@ -56,8 +56,8 @@
   std::string msg;
   event_request.SerializeToString(&msg);
 
-  fetcher_.reset(net::URLFetcher::Create(
-      sync_event_url_, net::URLFetcher::POST, this));
+  fetcher_ =
+      net::URLFetcher::Create(sync_event_url_, net::URLFetcher::POST, this);
   fetcher_->AddExtraRequestHeader(base::StringPrintf(
       "%s: Bearer %s", net::HttpRequestHeaders::kAuthorization,
       access_token.c_str()));
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc
index 6d5f0e02..edc19f0 100644
--- a/chrome/browser/sync/test/integration/sync_test.cc
+++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -860,8 +860,8 @@
   std::string sync_url = cl->GetSwitchValueASCII(switches::kSyncServiceURL);
   GURL sync_url_status(sync_url.append("/healthz"));
   SyncServerStatusChecker delegate;
-  scoped_ptr<net::URLFetcher> fetcher(net::URLFetcher::Create(
-    sync_url_status, net::URLFetcher::GET, &delegate));
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(sync_url_status, net::URLFetcher::GET, &delegate);
   fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE |
                         net::LOAD_DO_NOT_SEND_COOKIES |
                         net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc
index ed408d516..c0983ea 100644
--- a/chrome/browser/tracing/crash_service_uploader.cc
+++ b/chrome/browser/tracing/crash_service_uploader.cc
@@ -256,8 +256,8 @@
   content_type.append("; boundary=");
   content_type.append(kMultipartBoundary);
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(request_context_);
   url_fetcher_->SetUploadData(content_type, post_data);
   url_fetcher_->Start();
diff --git a/chrome/browser/ui/app_list/search/common/json_response_fetcher.cc b/chrome/browser/ui/app_list/search/common/json_response_fetcher.cc
index 967e0d6..d4a9c3af 100644
--- a/chrome/browser/ui/app_list/search/common/json_response_fetcher.cc
+++ b/chrome/browser/ui/app_list/search/common/json_response_fetcher.cc
@@ -30,10 +30,7 @@
 void JSONResponseFetcher::Start(const GURL& query_url) {
   Stop();
 
-  fetcher_.reset(net::URLFetcher::Create(
-      query_url,
-      net::URLFetcher::GET,
-      this));
+  fetcher_ = net::URLFetcher::Create(query_url, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(context_getter_);
   fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
                          net::LOAD_DISABLE_CACHE);
diff --git a/chrome/browser/ui/app_list/search/common/url_icon_source.cc b/chrome/browser/ui/app_list/search/common/url_icon_source.cc
index daa4046..0687f88 100644
--- a/chrome/browser/ui/app_list/search/common/url_icon_source.cc
+++ b/chrome/browser/ui/app_list/search/common/url_icon_source.cc
@@ -37,8 +37,8 @@
 void UrlIconSource::StartIconFetch() {
   icon_fetch_attempted_ = true;
 
-  icon_fetcher_.reset(
-      net::URLFetcher::Create(icon_url_, net::URLFetcher::GET, this));
+  icon_fetcher_ =
+      net::URLFetcher::Create(icon_url_, net::URLFetcher::GET, this);
   icon_fetcher_->SetRequestContext(context_getter_);
   icon_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
   icon_fetcher_->Start();
diff --git a/chrome/browser/ui/app_list/start_page_service.cc b/chrome/browser/ui/app_list/start_page_service.cc
index 8482ebc..25358f1f 100644
--- a/chrome/browser/ui/app_list/start_page_service.cc
+++ b/chrome/browser/ui/app_list/start_page_service.cc
@@ -623,8 +623,8 @@
 
   GURL google_base_url(UIThreadSearchTermsData(profile_).GoogleBaseURLValue());
   GURL doodle_url = google_base_url.ReplaceComponents(replacements);
-  doodle_fetcher_.reset(
-      net::URLFetcher::Create(0, doodle_url, net::URLFetcher::GET, this));
+  doodle_fetcher_ =
+      net::URLFetcher::Create(0, doodle_url, net::URLFetcher::GET, this);
   doodle_fetcher_->SetRequestContext(profile_->GetRequestContext());
   doodle_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
   doodle_fetcher_->Start();
diff --git a/chrome/browser/ui/omnibox/omnibox_navigation_observer.cc b/chrome/browser/ui/omnibox/omnibox_navigation_observer.cc
index 5002940..2b6bea4 100644
--- a/chrome/browser/ui/omnibox/omnibox_navigation_observer.cc
+++ b/chrome/browser/ui/omnibox/omnibox_navigation_observer.cc
@@ -63,8 +63,8 @@
       load_state_(LOAD_NOT_SEEN),
       fetch_state_(FETCH_NOT_COMPLETE) {
   if (alternate_nav_match_.destination_url.is_valid()) {
-    fetcher_.reset(net::URLFetcher::Create(alternate_nav_match_.destination_url,
-                                           net::URLFetcher::HEAD, this));
+    fetcher_ = net::URLFetcher::Create(alternate_nav_match_.destination_url,
+                                       net::URLFetcher::HEAD, this);
     fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
     fetcher_->SetStopOnRedirect(true);
   }
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc
index 2e9eb6f..ec8cd83 100644
--- a/chrome/browser/ui/webui/about_ui.cc
+++ b/chrome/browser/ui/webui/about_ui.cc
@@ -150,10 +150,9 @@
       : fetch_callback_(callback) {
     std::string eula_URL = base::StringPrintf(chrome::kOnlineEulaURLPath,
                                               locale.c_str());
-    eula_fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
-                                                GURL(eula_URL),
-                                                net::URLFetcher::GET,
-                                                this));
+    eula_fetcher_ =
+        net::URLFetcher::Create(0 /* ID used for testing */, GURL(eula_URL),
+                                net::URLFetcher::GET, this);
     eula_fetcher_->SetRequestContext(
         g_browser_process->system_request_context());
     eula_fetcher_->AddExtraRequestHeader("Accept: text/html");
diff --git a/chrome/browser/ui/webui/devtools_ui.cc b/chrome/browser/ui/webui/devtools_ui.cc
index 541fcc39..4360cf1 100644
--- a/chrome/browser/ui/webui/devtools_ui.cc
+++ b/chrome/browser/ui/webui/devtools_ui.cc
@@ -208,7 +208,7 @@
     return;
   }
   net::URLFetcher* fetcher =
-      net::URLFetcher::Create(url, net::URLFetcher::GET, this);
+      net::URLFetcher::Create(url, net::URLFetcher::GET, this).release();
   pending_[fetcher] = callback;
   fetcher->SetRequestContext(request_context_.get());
   fetcher->Start();
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher.cc b/chrome/service/cloud_print/cloud_print_url_fetcher.cc
index b1f0b51c..d095635 100644
--- a/chrome/service/cloud_print/cloud_print_url_fetcher.cc
+++ b/chrome/service/cloud_print/cloud_print_url_fetcher.cc
@@ -263,7 +263,7 @@
                             REQUEST_MAX);
   // Persist the additional headers in case we need to retry the request.
   additional_headers_ = additional_headers;
-  request_.reset(net::URLFetcher::Create(0, url, request_type, this));
+  request_ = net::URLFetcher::Create(0, url, request_type, this);
   request_->SetRequestContext(GetRequestContextGetter());
   // Since we implement our own retry logic, disable the retry in URLFetcher.
   request_->SetAutomaticallyRetryOn5xx(false);
diff --git a/chrome/test/chromedriver/net/net_util.cc b/chrome/test/chromedriver/net/net_util.cc
index 401b20d..1f386d3 100644
--- a/chrome/test/chromedriver/net/net_util.cc
+++ b/chrome/test/chromedriver/net/net_util.cc
@@ -37,7 +37,7 @@
   }
 
   void FetchOnIOThread() {
-    fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
     fetcher_->SetRequestContext(getter_);
     fetcher_->Start();
   }
diff --git a/chromeos/geolocation/simple_geolocation_request.cc b/chromeos/geolocation/simple_geolocation_request.cc
index f5720965..ee7692f 100644
--- a/chromeos/geolocation/simple_geolocation_request.cc
+++ b/chromeos/geolocation/simple_geolocation_request.cc
@@ -295,8 +295,8 @@
   RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_REQUEST_START);
   ++retries_;
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(request_url_, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(request_url_, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(url_context_getter_.get());
   url_fetcher_->SetUploadData("application/json",
                               std::string(kSimpleGeolocationRequestBody));
diff --git a/chromeos/timezone/timezone_request.cc b/chromeos/timezone/timezone_request.cc
index c530e46..0a41f9fb 100644
--- a/chromeos/timezone/timezone_request.cc
+++ b/chromeos/timezone/timezone_request.cc
@@ -332,8 +332,8 @@
   request_started_at_ = base::Time::Now();
   ++retries_;
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(request_url_, net::URLFetcher::GET, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(request_url_, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(url_context_getter_.get());
   url_fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE |
                              net::LOAD_DISABLE_CACHE |
diff --git a/components/autofill/content/browser/wallet/wallet_client.cc b/components/autofill/content/browser/wallet/wallet_client.cc
index 3ecb5a8..b5cd15e 100644
--- a/components/autofill/content/browser/wallet/wallet_client.cc
+++ b/components/autofill/content/browser/wallet/wallet_client.cc
@@ -530,8 +530,7 @@
   DCHECK_EQ(request_type_, NO_REQUEST);
   request_type_ = request_type;
 
-  request_.reset(net::URLFetcher::Create(
-      0, url, net::URLFetcher::POST, this));
+  request_ = net::URLFetcher::Create(0, url, net::URLFetcher::POST, this);
   request_->SetRequestContext(context_getter_.get());
   DVLOG(1) << "Making request to " << url << " with post_body=" << post_body;
   request_->SetUploadData(mime_type, post_body);
diff --git a/components/autofill/content/browser/wallet/wallet_signin_helper.cc b/components/autofill/content/browser/wallet/wallet_signin_helper.cc
index 92a228d..f7b0fbc 100644
--- a/components/autofill/content/browser/wallet/wallet_signin_helper.cc
+++ b/components/autofill/content/browser/wallet/wallet_signin_helper.cc
@@ -103,8 +103,7 @@
   DCHECK(!url_fetcher_);
 
   const GURL& url = wallet::GetPassiveAuthUrl(user_index);
-  url_fetcher_.reset(net::URLFetcher::Create(
-      0, url, net::URLFetcher::GET, this));
+  url_fetcher_ = net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(getter_);
   url_fetcher_->Start();
 }
diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc
index afe5679..87742344 100644
--- a/components/autofill/core/browser/autofill_download_manager.cc
+++ b/components/autofill/core/browser/autofill_download_manager.cc
@@ -177,9 +177,9 @@
 
   // Id is ignored for regular chrome, in unit test id's for fake fetcher
   // factory will be 0, 1, 2, ...
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      fetcher_id_for_unittest_++, request_url, net::URLFetcher::POST,
-      this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(fetcher_id_for_unittest_++, request_url,
+                              net::URLFetcher::POST, this).release();
   url_fetchers_[fetcher] = request_data;
   fetcher->SetAutomaticallyRetryOn5xx(false);
   fetcher->SetRequestContext(request_context);
diff --git a/components/autofill/core/browser/wallet/real_pan_wallet_client.cc b/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
index 9c3c4676..9d41ab4 100644
--- a/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
+++ b/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
@@ -216,8 +216,8 @@
 }
 
 void RealPanWalletClient::CreateRequest() {
-  request_.reset(net::URLFetcher::Create(
-      0, GetUnmaskCardRequestUrl(), net::URLFetcher::POST, this));
+  request_ = net::URLFetcher::Create(0, GetUnmaskCardRequestUrl(),
+                                     net::URLFetcher::POST, this);
   request_->SetRequestContext(context_getter_.get());
   request_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
       net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DISABLE_CACHE);
diff --git a/components/captive_portal/captive_portal_detector.cc b/components/captive_portal/captive_portal_detector.cc
index b7b8668..ceeffe6 100644
--- a/components/captive_portal/captive_portal_detector.cc
+++ b/components/captive_portal/captive_portal_detector.cc
@@ -34,10 +34,7 @@
   detection_callback_ = detection_callback;
 
   // The first 0 means this can use a TestURLFetcherFactory in unit tests.
-  url_fetcher_.reset(net::URLFetcher::Create(0,
-                                             url,
-                                             net::URLFetcher::GET,
-                                             this));
+  url_fetcher_ = net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
   url_fetcher_->SetAutomaticallyRetryOn5xx(false);
   url_fetcher_->SetRequestContext(request_context_.get());
 
diff --git a/components/copresence/rpc/http_post.cc b/components/copresence/rpc/http_post.cc
index bde0ed3..b841f63ad 100644
--- a/components/copresence/rpc/http_post.cc
+++ b/components/copresence/rpc/http_post.cc
@@ -58,8 +58,8 @@
   DCHECK(serialize_success);
 
   // Configure and send the request.
-  url_fetcher_.reset(net::URLFetcher::Create(
-      kUrlFetcherId, url, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(kUrlFetcherId, url, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(url_context_getter);
   url_fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE |
                              net::LOAD_DISABLE_CACHE |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
index fe8b897..20154b7 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
@@ -69,8 +69,8 @@
 
   void CheckIfSecureProxyIsAllowed(const GURL& secure_proxy_check_url,
                                    FetcherResponseCallback fetcher_callback) {
-    fetcher_.reset(net::URLFetcher::Create(secure_proxy_check_url,
-                                           net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(secure_proxy_check_url,
+                                       net::URLFetcher::GET, this);
     fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE | net::LOAD_BYPASS_PROXY);
     fetcher_->SetRequestContext(url_request_context_getter_.get());
     // Configure max retries to be at most kMaxRetries times for 5xx errors.
diff --git a/components/dom_distiller/core/distiller_url_fetcher.cc b/components/dom_distiller/core/distiller_url_fetcher.cc
index 8c1998d..f60efd7 100644
--- a/components/dom_distiller/core/distiller_url_fetcher.cc
+++ b/components/dom_distiller/core/distiller_url_fetcher.cc
@@ -39,14 +39,14 @@
   // Don't allow a fetch if one is pending.
   DCHECK(!url_fetcher_ || !url_fetcher_->GetStatus().is_io_pending());
   callback_ = callback;
-  url_fetcher_.reset(CreateURLFetcher(context_getter_, url));
+  url_fetcher_ = CreateURLFetcher(context_getter_, url);
   url_fetcher_->Start();
 }
 
-URLFetcher*  DistillerURLFetcher::CreateURLFetcher(
+scoped_ptr<URLFetcher> DistillerURLFetcher::CreateURLFetcher(
     net::URLRequestContextGetter* context_getter,
     const std::string& url) {
-  net::URLFetcher* fetcher =
+  scoped_ptr<net::URLFetcher> fetcher =
       URLFetcher::Create(GURL(url), URLFetcher::GET, this);
   fetcher->SetRequestContext(context_getter);
   static const int kMaxRetries = 5;
diff --git a/components/dom_distiller/core/distiller_url_fetcher.h b/components/dom_distiller/core/distiller_url_fetcher.h
index 4ed91cd..b8dd9e504 100644
--- a/components/dom_distiller/core/distiller_url_fetcher.h
+++ b/components/dom_distiller/core/distiller_url_fetcher.h
@@ -43,7 +43,7 @@
                         const URLFetcherCallback& callback);
 
  protected:
-  virtual net::URLFetcher* CreateURLFetcher(
+  virtual scoped_ptr<net::URLFetcher> CreateURLFetcher(
       net::URLRequestContextGetter* context_getter,
       const std::string& url);
 
diff --git a/components/domain_reliability/uploader.cc b/components/domain_reliability/uploader.cc
index 96ec845..031dac5b 100644
--- a/components/domain_reliability/uploader.cc
+++ b/components/domain_reliability/uploader.cc
@@ -76,7 +76,8 @@
     }
 
     net::URLFetcher* fetcher =
-        net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this);
+        net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this)
+            .release();
     fetcher->SetRequestContext(url_request_context_getter_.get());
     fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                           net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/components/enhanced_bookmarks/bookmark_server_cluster_service.cc b/components/enhanced_bookmarks/bookmark_server_cluster_service.cc
index b0e0dcd..4ab125b 100644
--- a/components/enhanced_bookmarks/bookmark_server_cluster_service.cc
+++ b/components/enhanced_bookmarks/bookmark_server_cluster_service.cc
@@ -127,8 +127,8 @@
   url = net::AppendQueryParameter(url, "v", model_->GetVersionString());
 
   // Build the URLFetcher to perform the request.
-  scoped_ptr<net::URLFetcher> url_fetcher(
-      net::URLFetcher::Create(url, net::URLFetcher::POST, this));
+  scoped_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::POST, this);
 
   // Binary encode a basic request proto.
   image_collections::ClusterRequest request_proto;
diff --git a/components/enhanced_bookmarks/bookmark_server_search_service.cc b/components/enhanced_bookmarks/bookmark_server_search_service.cc
index 063fa388..3236e73 100644
--- a/components/enhanced_bookmarks/bookmark_server_search_service.cc
+++ b/components/enhanced_bookmarks/bookmark_server_search_service.cc
@@ -76,8 +76,8 @@
   url = net::AppendQueryParameter(url, "v", model_->GetVersionString());
 
   // Build the URLFetcher to perform the request.
-  scoped_ptr<net::URLFetcher> url_fetcher(
-      net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+  scoped_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::GET, this);
 
   return url_fetcher;
 }
diff --git a/components/feedback/feedback_uploader_chrome.cc b/components/feedback/feedback_uploader_chrome.cc
index e5a52b1..aea651f4 100644
--- a/components/feedback/feedback_uploader_chrome.cc
+++ b/components/feedback/feedback_uploader_chrome.cc
@@ -46,12 +46,14 @@
   GURL post_url(url_);
 
   // Note: FeedbackUploaderDelegate deletes itself and the fetcher.
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      post_url, net::URLFetcher::POST,
-      new FeedbackUploaderDelegate(
-          data,
-          base::Bind(&FeedbackUploaderChrome::UpdateUploadTimer, AsWeakPtr()),
-          base::Bind(&FeedbackUploaderChrome::RetryReport, AsWeakPtr())));
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(
+          post_url, net::URLFetcher::POST,
+          new FeedbackUploaderDelegate(
+              data, base::Bind(&FeedbackUploaderChrome::UpdateUploadTimer,
+                               AsWeakPtr()),
+              base::Bind(&FeedbackUploaderChrome::RetryReport, AsWeakPtr())))
+          .release();
 
   // Tell feedback server about the variation state of this install.
   net::HttpRequestHeaders headers;
diff --git a/components/gcm_driver/gcm_channel_status_request.cc b/components/gcm_driver/gcm_channel_status_request.cc
index d609f550..3cdf3ec 100644
--- a/components/gcm_driver/gcm_channel_status_request.cc
+++ b/components/gcm_driver/gcm_channel_status_request.cc
@@ -64,8 +64,8 @@
      NOTREACHED();
   }
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(request_url, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(request_url, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(request_context_getter_.get());
   url_fetcher_->AddExtraRequestHeader("User-Agent: " + user_agent_);
   url_fetcher_->SetUploadData(kRequestContentType, upload_data);
diff --git a/components/google/core/browser/google_url_tracker.cc b/components/google/core/browser/google_url_tracker.cc
index dd72e35..25c51da7 100644
--- a/components/google/core/browser/google_url_tracker.cc
+++ b/components/google/core/browser/google_url_tracker.cc
@@ -148,8 +148,8 @@
     return;
 
   already_fetched_ = true;
-  fetcher_.reset(net::URLFetcher::Create(
-      fetcher_id_, GURL(kSearchDomainCheckURL), net::URLFetcher::GET, this));
+  fetcher_ = net::URLFetcher::Create(fetcher_id_, GURL(kSearchDomainCheckURL),
+                                     net::URLFetcher::GET, this);
   ++fetcher_id_;
   // We don't want this fetch to set new entries in the cache or cookies, lest
   // we alarm the user.
diff --git a/components/history/core/browser/web_history_service.cc b/components/history/core/browser/web_history_service.cc
index 91b498c..4a8b3aa7f 100644
--- a/components/history/core/browser/web_history_service.cc
+++ b/components/history/core/browser/web_history_service.cc
@@ -139,7 +139,7 @@
     UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", true);
 
     // Got an access token -- start the actual API request.
-    url_fetcher_.reset(CreateUrlFetcher(access_token));
+    url_fetcher_ = CreateUrlFetcher(access_token);
     url_fetcher_->Start();
   }
 
@@ -156,11 +156,12 @@
   }
 
   // Helper for creating a new URLFetcher for the API request.
-  net::URLFetcher* CreateUrlFetcher(const std::string& access_token) {
+  scoped_ptr<net::URLFetcher> CreateUrlFetcher(
+      const std::string& access_token) {
     net::URLFetcher::RequestType request_type = post_data_.empty() ?
         net::URLFetcher::GET : net::URLFetcher::POST;
-    net::URLFetcher* fetcher = net::URLFetcher::Create(
-        url_, request_type, this);
+    scoped_ptr<net::URLFetcher> fetcher =
+        net::URLFetcher::Create(url_, request_type, this);
     fetcher->SetRequestContext(request_context_.get());
     fetcher->SetMaxRetriesOn5xx(kMaxRetries);
     fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/components/invalidation/gcm_network_channel.cc b/components/invalidation/gcm_network_channel.cc
index 5d11990..8f9caed 100644
--- a/components/invalidation/gcm_network_channel.cc
+++ b/components/invalidation/gcm_network_channel.cc
@@ -207,8 +207,8 @@
   access_token_ = token;
 
   DVLOG(2) << "Got access token, sending message";
-  fetcher_.reset(net::URLFetcher::Create(
-      BuildUrl(registration_id_), net::URLFetcher::POST, this));
+  fetcher_ = net::URLFetcher::Create(BuildUrl(registration_id_),
+                                     net::URLFetcher::POST, this);
   fetcher_->SetRequestContext(request_context_getter_.get());
   const std::string auth_header("Authorization: Bearer " + access_token_);
   fetcher_->AddExtraRequestHeader(auth_header);
diff --git a/components/metrics/net/net_metrics_log_uploader.cc b/components/metrics/net/net_metrics_log_uploader.cc
index cf50077..9d0027e 100644
--- a/components/metrics/net/net_metrics_log_uploader.cc
+++ b/components/metrics/net/net_metrics_log_uploader.cc
@@ -39,8 +39,8 @@
 
 bool NetMetricsLogUploader::UploadLog(const std::string& compressed_log_data,
                                       const std::string& log_hash) {
-  current_fetch_.reset(
-      net::URLFetcher::Create(GURL(server_url_), net::URLFetcher::POST, this));
+  current_fetch_ =
+      net::URLFetcher::Create(GURL(server_url_), net::URLFetcher::POST, this);
   current_fetch_->SetRequestContext(request_context_getter_);
   current_fetch_->SetUploadData(mime_type_, compressed_log_data);
 
diff --git a/components/omnibox/base_search_provider.cc b/components/omnibox/base_search_provider.cc
index a7957fed..e0b6614 100644
--- a/components/omnibox/base_search_provider.cc
+++ b/components/omnibox/base_search_provider.cc
@@ -56,11 +56,9 @@
   GURL url(deletion_url);
   DCHECK(url.is_valid());
 
-  deletion_fetcher_.reset(net::URLFetcher::Create(
-      BaseSearchProvider::kDeletionURLFetcherID,
-      url,
-      net::URLFetcher::GET,
-      this));
+  deletion_fetcher_ =
+      net::URLFetcher::Create(BaseSearchProvider::kDeletionURLFetcherID, url,
+                              net::URLFetcher::GET, this);
   deletion_fetcher_->SetRequestContext(request_context);
   deletion_fetcher_->Start();
 }
diff --git a/components/omnibox/search_provider.cc b/components/omnibox/search_provider.cc
index d0abdd7..670debf 100644
--- a/components/omnibox/search_provider.cc
+++ b/components/omnibox/search_provider.cc
@@ -555,15 +555,13 @@
   time_suggest_request_sent_ = base::TimeTicks::Now();
 
   if (!query_is_private) {
-    default_fetcher_.reset(CreateSuggestFetcher(
-        kDefaultProviderURLFetcherID,
-        providers_.GetDefaultProviderURL(),
-        input_));
+    default_fetcher_ =
+        CreateSuggestFetcher(kDefaultProviderURLFetcherID,
+                             providers_.GetDefaultProviderURL(), input_);
   }
-  keyword_fetcher_.reset(CreateSuggestFetcher(
-      kKeywordProviderURLFetcherID,
-      providers_.GetKeywordProviderURL(),
-      keyword_input_));
+  keyword_fetcher_ =
+      CreateSuggestFetcher(kKeywordProviderURLFetcherID,
+                           providers_.GetKeywordProviderURL(), keyword_input_);
 
   // Both the above can fail if the providers have been modified or deleted
   // since the query began.
@@ -822,7 +820,7 @@
   }
 }
 
-net::URLFetcher* SearchProvider::CreateSuggestFetcher(
+scoped_ptr<net::URLFetcher> SearchProvider::CreateSuggestFetcher(
     int id,
     const TemplateURL* template_url,
     const AutocompleteInput& input) {
@@ -863,7 +861,7 @@
 
   LogOmniboxSuggestRequest(REQUEST_SENT);
 
-  net::URLFetcher* fetcher =
+  scoped_ptr<net::URLFetcher> fetcher =
       net::URLFetcher::Create(id, suggest_url, net::URLFetcher::GET, this);
   fetcher->SetRequestContext(client_->RequestContext());
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/components/omnibox/search_provider.h b/components/omnibox/search_provider.h
index 6c998e16..269914f 100644
--- a/components/omnibox/search_provider.h
+++ b/components/omnibox/search_provider.h
@@ -250,9 +250,10 @@
 
   // Starts a new URLFetcher requesting suggest results from |template_url|;
   // callers own the returned URLFetcher, which is NULL for invalid providers.
-  net::URLFetcher* CreateSuggestFetcher(int id,
-                                        const TemplateURL* template_url,
-                                        const AutocompleteInput& input);
+  scoped_ptr<net::URLFetcher> CreateSuggestFetcher(
+      int id,
+      const TemplateURL* template_url,
+      const AutocompleteInput& input);
 
   // Converts the parsed results to a set of AutocompleteMatches, |matches_|.
   void ConvertResultsToAutocompleteMatches();
diff --git a/components/password_manager/core/browser/affiliation_fetcher.cc b/components/password_manager/core/browser/affiliation_fetcher.cc
index 53069fa..943724b 100644
--- a/components/password_manager/core/browser/affiliation_fetcher.cc
+++ b/components/password_manager/core/browser/affiliation_fetcher.cc
@@ -88,8 +88,8 @@
 void AffiliationFetcher::StartRequest() {
   DCHECK(!fetcher_);
 
-  fetcher_.reset(
-      net::URLFetcher::Create(BuildQueryURL(), net::URLFetcher::POST, this));
+  fetcher_ =
+      net::URLFetcher::Create(BuildQueryURL(), net::URLFetcher::POST, this);
   fetcher_->SetRequestContext(request_context_getter_.get());
   fetcher_->SetUploadData("application/x-protobuf", PreparePayload());
   fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/components/policy/core/common/cloud/device_management_service.cc b/components/policy/core/common/cloud/device_management_service.cc
index a7f166d..fe17d8d 100644
--- a/components/policy/core/common/cloud/device_management_service.cc
+++ b/components/policy/core/common/cloud/device_management_service.cc
@@ -475,8 +475,9 @@
 
 void DeviceManagementService::StartJob(DeviceManagementRequestJobImpl* job) {
   std::string server_url = GetServerUrl();
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      kURLFetcherID, job->GetURL(server_url), net::URLFetcher::POST, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(kURLFetcherID, job->GetURL(server_url),
+                              net::URLFetcher::POST, this).release();
   job->ConfigureRequest(fetcher);
   pending_jobs_[fetcher] = job;
   fetcher->Start();
diff --git a/components/policy/core/common/cloud/external_policy_data_fetcher.cc b/components/policy/core/common/cloud/external_policy_data_fetcher.cc
index b8403b8..7dd4988 100644
--- a/components/policy/core/common/cloud/external_policy_data_fetcher.cc
+++ b/components/policy/core/common/cloud/external_policy_data_fetcher.cc
@@ -170,8 +170,9 @@
 void ExternalPolicyDataFetcherBackend::StartJob(
     ExternalPolicyDataFetcher::Job* job) {
   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
-  net::URLFetcher* fetcher = net::URLFetcher::Create(
-      ++last_fetch_id_, job->url, net::URLFetcher::GET, this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(++last_fetch_id_, job->url, net::URLFetcher::GET,
+                              this).release();
   fetcher->SetRequestContext(request_context_.get());
   fetcher->SetLoadFlags(net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE |
                         net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/components/policy/core/common/cloud/user_info_fetcher.cc b/components/policy/core/common/cloud/user_info_fetcher.cc
index b8f9f74d..b1f6cd9 100644
--- a/components/policy/core/common/cloud/user_info_fetcher.cc
+++ b/components/policy/core/common/cloud/user_info_fetcher.cc
@@ -41,9 +41,9 @@
 
 void UserInfoFetcher::Start(const std::string& access_token) {
   // Create a URLFetcher and start it.
-  url_fetcher_.reset(net::URLFetcher::Create(
-      0, GaiaUrls::GetInstance()->oauth_user_info_url(),
-      net::URLFetcher::GET, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(0, GaiaUrls::GetInstance()->oauth_user_info_url(),
+                              net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(context_);
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                              net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/components/precache/core/precache_fetcher.cc b/components/precache/core/precache_fetcher.cc
index 49f84a2..b6e75af 100644
--- a/components/precache/core/precache_fetcher.cc
+++ b/components/precache/core/precache_fetcher.cc
@@ -121,7 +121,7 @@
     net::URLRequestContextGetter* request_context, const GURL& url,
     const base::Callback<void(const URLFetcher&)>& callback)
     : callback_(callback) {
-  url_fetcher_.reset(URLFetcher::Create(url, URLFetcher::GET, this));
+  url_fetcher_ = URLFetcher::Create(url, URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(request_context);
   url_fetcher_->Start();
 }
diff --git a/components/rappor/log_uploader.cc b/components/rappor/log_uploader.cc
index 8ca6922..58e54557 100644
--- a/components/rappor/log_uploader.cc
+++ b/components/rappor/log_uploader.cc
@@ -108,8 +108,8 @@
     return;
   DVLOG(2) << "Upload to " << server_url_.spec() << " starting.";
   has_callback_pending_ = true;
-  current_fetch_.reset(
-      net::URLFetcher::Create(server_url_, net::URLFetcher::POST, this));
+  current_fetch_ =
+      net::URLFetcher::Create(server_url_, net::URLFetcher::POST, this);
   current_fetch_->SetRequestContext(request_context_.get());
   current_fetch_->SetUploadData(mime_type_, queued_logs_.front());
 
diff --git a/components/search_engines/template_url_fetcher.cc b/components/search_engines/template_url_fetcher.cc
index 542e4751..73fbd30 100644
--- a/components/search_engines/template_url_fetcher.cc
+++ b/components/search_engines/template_url_fetcher.cc
@@ -69,8 +69,8 @@
     const URLFetcherCustomizeCallback& url_fetcher_customize_callback,
     const ConfirmAddSearchProviderCallback& confirm_add_callback,
     ProviderType provider_type)
-    : url_fetcher_(net::URLFetcher::Create(
-          osdd_url, net::URLFetcher::GET, this)),
+    : url_fetcher_(
+          net::URLFetcher::Create(osdd_url, net::URLFetcher::GET, this).Pass()),
       fetcher_(fetcher),
       keyword_(keyword),
       osdd_url_(osdd_url),
diff --git a/components/search_provider_logos/logo_tracker.cc b/components/search_provider_logos/logo_tracker.cc
index 855fe1e..6e8ad20 100644
--- a/components/search_provider_logos/logo_tracker.cc
+++ b/components/search_provider_logos/logo_tracker.cc
@@ -208,7 +208,7 @@
   }
   url = append_queryparams_func_.Run(logo_url_, fingerprint, wants_cta_);
 
-  fetcher_.reset(net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+  fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(request_context_getter_.get());
   fetcher_->Start();
 }
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc
index 36f2dd0..e8a0cb7 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.cc
+++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -176,7 +176,7 @@
       if (dict->GetString("carryBackToken", &token) &&
           dict->GetString("url", &url)) {
         results_[token] = "null";
-        net::URLFetcher* fetcher = CreateFetcher(GURL(url));
+        net::URLFetcher* fetcher = CreateFetcher(GURL(url)).release();
         fetchers_[fetcher->GetOriginalURL()] = std::make_pair(token, fetcher);
         fetcher->Start();
       }
@@ -199,10 +199,10 @@
   GetCheckConnectionInfoCompleted(false);
 }
 
-net::URLFetcher*
+scoped_ptr<net::URLFetcher>
 GaiaCookieManagerService::ExternalCcResultFetcher::CreateFetcher(
     const GURL& url) {
-  net::URLFetcher* fetcher =
+  scoped_ptr<net::URLFetcher> fetcher =
       net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
   fetcher->SetRequestContext(helper_->request_context());
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
@@ -457,8 +457,8 @@
   VLOG(1) << "GaiaCookieManagerService::StartLogOutUrlFetch";
   GURL logout_url(GaiaUrls::GetInstance()->service_logout_url().Resolve(
       base::StringPrintf("?source=%s", source_.c_str())));
-  logout_url_request_.reset(
-      net::URLFetcher::Create(logout_url, net::URLFetcher::GET, this));
+  logout_url_request_ =
+      net::URLFetcher::Create(logout_url, net::URLFetcher::GET, this);
   logout_url_request_->SetRequestContext(
       signin_client_->GetURLRequestContext());
   logout_url_request_->Start();
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.h b/components/signin/core/browser/gaia_cookie_manager_service.h
index 941cb3529..d5b6c51f 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.h
+++ b/components/signin/core/browser/gaia_cookie_manager_service.h
@@ -128,7 +128,7 @@
         const GoogleServiceAuthError& error) override;
 
     // Creates and initializes a URL fetcher for doing a connection check.
-    net::URLFetcher* CreateFetcher(const GURL& url);
+    scoped_ptr<net::URLFetcher> CreateFetcher(const GURL& url);
 
     // Overridden from URLFetcherDelgate.
     void OnURLFetchComplete(const net::URLFetcher* source) override;
diff --git a/components/suggestions/suggestions_service.cc b/components/suggestions/suggestions_service.cc
index dbc7036..c301c6e 100644
--- a/components/suggestions/suggestions_service.cc
+++ b/components/suggestions/suggestions_service.cc
@@ -219,13 +219,14 @@
   if (pending_request_.get()) {
     return;
   }
-  pending_request_.reset(CreateSuggestionsRequest(url));
+  pending_request_ = CreateSuggestionsRequest(url);
   pending_request_->Start();
   last_request_started_time_ = TimeTicks::Now();
 }
 
-net::URLFetcher* SuggestionsService::CreateSuggestionsRequest(const GURL& url) {
-  net::URLFetcher* request =
+scoped_ptr<net::URLFetcher> SuggestionsService::CreateSuggestionsRequest(
+    const GURL& url) {
+  scoped_ptr<net::URLFetcher> request =
       net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
   request->SetLoadFlags(net::LOAD_DISABLE_CACHE);
   request->SetRequestContext(url_request_context_);
diff --git a/components/suggestions/suggestions_service.h b/components/suggestions/suggestions_service.h
index b0d0f4c..34e0362 100644
--- a/components/suggestions/suggestions_service.h
+++ b/components/suggestions/suggestions_service.h
@@ -111,7 +111,7 @@
   FRIEND_TEST_ALL_PREFIXES(SuggestionsServiceTest, UpdateBlacklistDelay);
 
   // Creates a request to the suggestions service, properly setting headers.
-  net::URLFetcher* CreateSuggestionsRequest(const GURL& url);
+  scoped_ptr<net::URLFetcher> CreateSuggestionsRequest(const GURL& url);
 
   // net::URLFetcherDelegate implementation.
   // Called when fetch request completes. Parses the received suggestions data,
diff --git a/components/translate/core/browser/translate_url_fetcher.cc b/components/translate/core/browser/translate_url_fetcher.cc
index 09704fd9..6a59517 100644
--- a/components/translate/core/browser/translate_url_fetcher.cc
+++ b/components/translate/core/browser/translate_url_fetcher.cc
@@ -45,11 +45,7 @@
   url_ = url;
   callback_ = callback;
 
-  fetcher_.reset(net::URLFetcher::Create(
-      id_,
-      url_,
-      net::URLFetcher::GET,
-      this));
+  fetcher_ = net::URLFetcher::Create(id_, url_, net::URLFetcher::GET, this);
   fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                          net::LOAD_DO_NOT_SAVE_COOKIES);
   fetcher_->SetRequestContext(
diff --git a/components/update_client/request_sender.cc b/components/update_client/request_sender.cc
index 726c2fa..6b89ca7 100644
--- a/components/update_client/request_sender.cc
+++ b/components/update_client/request_sender.cc
@@ -46,8 +46,8 @@
   DCHECK(cur_url_->is_valid());
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  url_fetcher_.reset(SendProtocolRequest(*cur_url_, request_string_, this,
-                                         config_.RequestContext()));
+  url_fetcher_ = SendProtocolRequest(*cur_url_, request_string_, this,
+                                     config_.RequestContext());
 }
 
 void RequestSender::OnURLFetchComplete(const net::URLFetcher* source) {
diff --git a/components/update_client/url_fetcher_downloader.cc b/components/update_client/url_fetcher_downloader.cc
index fd7f3da..4edc1c4c 100644
--- a/components/update_client/url_fetcher_downloader.cc
+++ b/components/update_client/url_fetcher_downloader.cc
@@ -33,8 +33,7 @@
 void UrlFetcherDownloader::DoStartDownload(const GURL& url) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(0, url, net::URLFetcher::GET, this));
+  url_fetcher_ = net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
   url_fetcher_->SetRequestContext(context_getter_);
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                              net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/components/update_client/utils.cc b/components/update_client/utils.cc
index 47bb4377..11e8060 100644
--- a/components/update_client/utils.cc
+++ b/components/update_client/utils.cc
@@ -115,13 +115,13 @@
   return request;
 }
 
-net::URLFetcher* SendProtocolRequest(
+scoped_ptr<net::URLFetcher> SendProtocolRequest(
     const GURL& url,
     const std::string& protocol_request,
     net::URLFetcherDelegate* url_fetcher_delegate,
     net::URLRequestContextGetter* url_request_context_getter) {
-  net::URLFetcher* url_fetcher(net::URLFetcher::Create(
-      0, url, net::URLFetcher::POST, url_fetcher_delegate));
+  scoped_ptr<net::URLFetcher> url_fetcher = net::URLFetcher::Create(
+      0, url, net::URLFetcher::POST, url_fetcher_delegate);
 
   url_fetcher->SetUploadData("application/xml", protocol_request);
   url_fetcher->SetRequestContext(url_request_context_getter);
diff --git a/components/update_client/utils.h b/components/update_client/utils.h
index 297eb97..b109764a 100644
--- a/components/update_client/utils.h
+++ b/components/update_client/utils.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_UPDATE_CLIENT_UTILS_H_
 
 #include <string>
+#include <base/memory/scoped_ptr.h>
 
 class GURL;
 
@@ -55,7 +56,7 @@
 // Sends a protocol request to the the service endpoint specified by |url|.
 // The body of the request is provided by |protocol_request| and it is
 // expected to contain XML data. The caller owns the returned object.
-net::URLFetcher* SendProtocolRequest(
+scoped_ptr<net::URLFetcher> SendProtocolRequest(
     const GURL& url,
     const std::string& protocol_request,
     net::URLFetcherDelegate* url_fetcher_delegate,
diff --git a/components/web_resource/web_resource_service.cc b/components/web_resource/web_resource_service.cc
index 40225b8c..398e6c5 100644
--- a/components/web_resource/web_resource_service.cc
+++ b/components/web_resource/web_resource_service.cc
@@ -112,8 +112,8 @@
                                                  application_locale_);
 
   DVLOG(1) << "WebResourceService StartFetch " << web_resource_server;
-  url_fetcher_.reset(
-      net::URLFetcher::Create(web_resource_server, net::URLFetcher::GET, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(web_resource_server, net::URLFetcher::GET, this);
   // Do not let url fetcher affect existing state in system context
   // (by setting cookies, for example).
   url_fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE |
diff --git a/content/browser/geolocation/network_location_request.cc b/content/browser/geolocation/network_location_request.cc
index 84ba5b0..253e321 100644
--- a/content/browser/geolocation/network_location_request.cc
+++ b/content/browser/geolocation/network_location_request.cc
@@ -123,8 +123,8 @@
   wifi_data_timestamp_ = timestamp;
 
   GURL request_url = FormRequestURL(url_);
-  url_fetcher_.reset(net::URLFetcher::Create(
-      url_fetcher_id_for_tests, request_url, net::URLFetcher::POST, this));
+  url_fetcher_ = net::URLFetcher::Create(url_fetcher_id_for_tests, request_url,
+                                         net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(url_context_.get());
   std::string upload_data;
   FormUploadData(wifi_data, timestamp, access_token, &upload_data);
diff --git a/content/browser/speech/google_one_shot_remote_engine.cc b/content/browser/speech/google_one_shot_remote_engine.cc
index a74a60ded..77f5c2c 100644
--- a/content/browser/speech/google_one_shot_remote_engine.cc
+++ b/content/browser/speech/google_one_shot_remote_engine.cc
@@ -210,10 +210,8 @@
                                       config_.audio_sample_rate,
                                       config_.audio_num_bits_per_sample));
   DCHECK(encoder_.get());
-  url_fetcher_.reset(net::URLFetcher::Create(url_fetcher_id_for_tests,
-                                             url,
-                                             net::URLFetcher::POST,
-                                             this));
+  url_fetcher_ = net::URLFetcher::Create(url_fetcher_id_for_tests, url,
+                                         net::URLFetcher::POST, this);
   url_fetcher_->SetChunkedUpload(encoder_->mime_type());
   url_fetcher_->SetRequestContext(url_context_.get());
   url_fetcher_->SetReferrer(config_.origin_url);
diff --git a/content/browser/speech/google_streaming_remote_engine.cc b/content/browser/speech/google_streaming_remote_engine.cc
index 11c7ac7..fc8c6d24 100644
--- a/content/browser/speech/google_streaming_remote_engine.cc
+++ b/content/browser/speech/google_streaming_remote_engine.cc
@@ -322,9 +322,8 @@
                       std::string(kDownstreamUrl) +
                       JoinString(downstream_args, '&'));
 
-  downstream_fetcher_.reset(URLFetcher::Create(
-      kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET,
-      this));
+  downstream_fetcher_ = URLFetcher::Create(
+      kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET, this);
   downstream_fetcher_->SetRequestContext(url_context_.get());
   downstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
                                     net::LOAD_DO_NOT_SEND_COOKIES |
@@ -375,8 +374,8 @@
                     std::string(kUpstreamUrl) +
                     JoinString(upstream_args, '&'));
 
-  upstream_fetcher_.reset(URLFetcher::Create(
-      kUpstreamUrlFetcherIdForTesting, upstream_url, URLFetcher::POST, this));
+  upstream_fetcher_ = URLFetcher::Create(kUpstreamUrlFetcherIdForTesting,
+                                         upstream_url, URLFetcher::POST, this);
   if (use_framed_post_data_)
     upstream_fetcher_->SetChunkedUpload("application/octet-stream");
   else
diff --git a/content/shell/browser/shell_devtools_frontend.cc b/content/shell/browser/shell_devtools_frontend.cc
index 8244717..3886f2f 100644
--- a/content/shell/browser/shell_devtools_frontend.cc
+++ b/content/shell/browser/shell_devtools_frontend.cc
@@ -216,7 +216,7 @@
     }
 
     net::URLFetcher* fetcher =
-        net::URLFetcher::Create(gurl, net::URLFetcher::GET, this);
+        net::URLFetcher::Create(gurl, net::URLFetcher::GET, this).release();
     pending_requests_[fetcher] = request_id;
     fetcher->SetRequestContext(web_contents()->GetBrowserContext()->
         GetRequestContext());
diff --git a/device/test/usb_test_gadget_impl.cc b/device/test/usb_test_gadget_impl.cc
index 2eea0580..26a318f3 100644
--- a/device/test/usb_test_gadget_impl.cc
+++ b/device/test/usb_test_gadget_impl.cc
@@ -123,8 +123,8 @@
     const GURL& url,
     net::URLFetcher::RequestType request_type,
     net::URLFetcherDelegate* delegate) {
-  scoped_ptr<net::URLFetcher> url_fetcher(
-      net::URLFetcher::Create(url, request_type, delegate));
+  scoped_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(url, request_type, delegate);
 
   url_fetcher->SetRequestContext(request_context_getter.get());
 
diff --git a/extensions/browser/content_hash_fetcher.cc b/extensions/browser/content_hash_fetcher.cc
index e4190be3..eefc991 100644
--- a/extensions/browser/content_hash_fetcher.cc
+++ b/extensions/browser/content_hash_fetcher.cc
@@ -237,8 +237,8 @@
   } else {
     VLOG(1) << "Missing verified contents for " << extension_id_
             << ", fetching...";
-    url_fetcher_.reset(
-        net::URLFetcher::Create(fetch_url_, net::URLFetcher::GET, this));
+    url_fetcher_ =
+        net::URLFetcher::Create(fetch_url_, net::URLFetcher::GET, this);
     url_fetcher_->SetRequestContext(request_context_);
     url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                                net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
index 28642909..9c2b738 100644
--- a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
+++ b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
@@ -25,7 +25,7 @@
 }
 
 void WebUIURLFetcher::Start() {
-  fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
+  fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(context_->GetRequestContext());
   fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
 
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc
index e1e61f8..87958ae4a 100644
--- a/extensions/browser/updater/extension_downloader.cc
+++ b/extensions/browser/updater/extension_downloader.cc
@@ -473,11 +473,9 @@
             << " for " << id_list;
   }
 
-  manifest_fetcher_.reset(
-      net::URLFetcher::Create(kManifestFetcherId,
-                              manifests_queue_.active_request()->full_url(),
-                              net::URLFetcher::GET,
-                              this));
+  manifest_fetcher_ = net::URLFetcher::Create(
+      kManifestFetcherId, manifests_queue_.active_request()->full_url(),
+      net::URLFetcher::GET, this);
   manifest_fetcher_->SetRequestContext(request_context_.get());
   manifest_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                                   net::LOAD_DO_NOT_SAVE_COOKIES |
@@ -762,8 +760,8 @@
 
 void ExtensionDownloader::CreateExtensionFetcher() {
   const ExtensionFetch* fetch = extensions_queue_.active_request();
-  extension_fetcher_.reset(net::URLFetcher::Create(
-      kExtensionFetcherId, fetch->url, net::URLFetcher::GET, this));
+  extension_fetcher_ = net::URLFetcher::Create(kExtensionFetcherId, fetch->url,
+                                               net::URLFetcher::GET, this);
   extension_fetcher_->SetRequestContext(request_context_.get());
   extension_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3);
 
diff --git a/extensions/browser/updater/update_service_browsertest.cc b/extensions/browser/updater/update_service_browsertest.cc
index c4ff0ef0..bd9a55e 100644
--- a/extensions/browser/updater/update_service_browsertest.cc
+++ b/extensions/browser/updater/update_service_browsertest.cc
@@ -105,7 +105,7 @@
   }
 
   // net::URLFetcherFactory:
-  net::URLFetcher* CreateURLFetcher(
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
       int id,
       const GURL& url,
       net::URLFetcher::RequestType request_type,
@@ -122,7 +122,7 @@
   }
 
  private:
-  net::URLFetcher* CreateUpdateManifestFetcher(
+  scoped_ptr<net::URLFetcher> CreateUpdateManifestFetcher(
       const GURL& url,
       net::URLFetcherDelegate* delegate) {
     // If we have a fake CRX for the ID, return a fake update blob for it.
@@ -138,13 +138,14 @@
       else
         response = CreateFakeUpdateResponse(extension_id, iter->second.size());
     }
-    return new net::FakeURLFetcher(url, delegate, response.first,
-                                   response.second,
-                                   net::URLRequestStatus::SUCCESS);
+    return scoped_ptr<net::URLFetcher>(
+        new net::FakeURLFetcher(url, delegate, response.first, response.second,
+                                net::URLRequestStatus::SUCCESS));
   }
 
-  net::URLFetcher* CreateCrxFetcher(const GURL& url,
-                                    net::URLFetcherDelegate* delegate) {
+  scoped_ptr<net::URLFetcher> CreateCrxFetcher(
+      const GURL& url,
+      net::URLFetcherDelegate* delegate) {
     FakeResponse response;
     std::string extension_id = url.path().substr(1, 32);
     const auto& iter = fake_extensions_.find(extension_id);
@@ -156,7 +157,7 @@
         new net::FakeURLFetcher(url, delegate, response.first, response.second,
                                 net::URLRequestStatus::SUCCESS);
     fetcher->SetResponseFilePath(base::FilePath::FromUTF8Unsafe(url.path()));
-    return fetcher;
+    return scoped_ptr<net::URLFetcher>(fetcher);
   }
 
   std::map<std::string, std::string> fake_extensions_;
diff --git a/google_apis/drive/base_requests.cc b/google_apis/drive/base_requests.cc
index bcd1bab6..164be2e 100644
--- a/google_apis/drive/base_requests.cc
+++ b/google_apis/drive/base_requests.cc
@@ -354,7 +354,7 @@
   DVLOG(1) << "URL: " << url.spec();
 
   URLFetcher::RequestType request_type = GetRequestType();
-  url_fetcher_.reset(URLFetcher::Create(url, request_type, this));
+  url_fetcher_ = URLFetcher::Create(url, request_type, this);
   url_fetcher_->SetRequestContext(sender_->url_request_context_getter());
   // Always set flags to neither send nor save cookies.
   url_fetcher_->SetLoadFlags(
diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_fetcher.cc
index a2f7aa0..a79a0fc 100644
--- a/google_apis/gaia/gaia_auth_fetcher.cc
+++ b/google_apis/gaia/gaia_auth_fetcher.cc
@@ -225,16 +225,15 @@
 }
 
 // static
-net::URLFetcher* GaiaAuthFetcher::CreateGaiaFetcher(
+scoped_ptr<net::URLFetcher> GaiaAuthFetcher::CreateGaiaFetcher(
     net::URLRequestContextGetter* getter,
     const std::string& body,
     const std::string& headers,
     const GURL& gaia_gurl,
     int load_flags,
     net::URLFetcherDelegate* delegate) {
-  net::URLFetcher* to_return = net::URLFetcher::Create(
-      0, gaia_gurl,
-      body.empty() ? net::URLFetcher::GET : net::URLFetcher::POST,
+  scoped_ptr<net::URLFetcher> to_return = net::URLFetcher::Create(
+      0, gaia_gurl, body.empty() ? net::URLFetcher::GET : net::URLFetcher::POST,
       delegate);
   to_return->SetRequestContext(getter);
   to_return->SetUploadData("application/x-www-form-urlencoded", body);
@@ -593,12 +592,9 @@
                                       login_token,
                                       login_captcha,
                                       allow_hosted_accounts);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   client_login_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, std::string(),
+                        client_login_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -611,12 +607,9 @@
   DVLOG(1) << "Starting IssueAuthToken for: " << service;
   requested_service_ = service;
   request_body_ = MakeIssueAuthTokenBody(sid, lsid, service);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   issue_auth_token_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, std::string(),
+                        issue_auth_token_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -630,12 +623,9 @@
   client_login_to_oauth2_gurl_ =
       GaiaUrls::GetInstance()->client_login_to_oauth2_url();
 
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   MakeGetAuthCodeHeader(auth_token),
-                                   client_login_to_oauth2_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(
+      getter_, request_body_, MakeGetAuthCodeHeader(auth_token),
+      client_login_to_oauth2_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -645,12 +635,9 @@
 
   DVLOG(1) << "Starting OAuth2 token revocation";
   request_body_ = MakeRevokeTokenBody(auth_token);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   oauth2_revoke_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, std::string(),
+                        oauth2_revoke_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -682,12 +669,9 @@
         base::StringPrintf(kDeviceIdHeaderFormat, device_id.c_str());
   }
 
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   device_id_header,
-                                   client_login_to_oauth2_gurl_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, device_id_header,
+                        client_login_to_oauth2_gurl_, net::LOAD_NORMAL, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -698,12 +682,9 @@
 
   DVLOG(1) << "Starting OAuth token pair fetch";
   request_body_ = MakeGetTokenPairBody(auth_code);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   oauth2_token_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, std::string(),
+                        oauth2_token_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -713,12 +694,9 @@
 
   DVLOG(1) << "Starting GetUserInfo for lsid=" << lsid;
   request_body_ = MakeGetUserInfoBody(lsid);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   get_user_info_gurl_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ =
+      CreateGaiaFetcher(getter_, request_body_, std::string(),
+                        get_user_info_gurl_, kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -740,12 +718,8 @@
   std::string continue_url("http://www.google.com");
   request_body_ = MakeMergeSessionBody(uber_token, external_cc_result,
       continue_url, source_);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   merge_session_gurl_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, request_body_, std::string(),
+                               merge_session_gurl_, net::LOAD_NORMAL, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -758,12 +732,8 @@
            << access_token;
   std::string authentication_header =
       base::StringPrintf(kOAuthHeaderFormat, access_token.c_str());
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   std::string(),
-                                   authentication_header,
-                                   uberauth_token_gurl_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, std::string(), authentication_header,
+                               uberauth_token_gurl_, net::LOAD_NORMAL, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -775,12 +745,8 @@
   request_body_ = MakeOAuthLoginBody(service, source_);
   std::string authentication_header =
       base::StringPrintf(kOAuth2BearerHeaderFormat, access_token.c_str());
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   authentication_header,
-                                   oauth_login_gurl_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, request_body_, authentication_header,
+                               oauth_login_gurl_, net::LOAD_NORMAL, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -788,12 +754,10 @@
 void GaiaAuthFetcher::StartListAccounts() {
   DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
 
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   " ",  // To force an HTTP POST.
-                                   "Origin: https://www.google.com",
-                                   list_accounts_gurl_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_,
+                               " ",  // To force an HTTP POST.
+                               "Origin: https://www.google.com",
+                               list_accounts_gurl_, net::LOAD_NORMAL, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -801,12 +765,9 @@
 void GaiaAuthFetcher::StartGetCheckConnectionInfo() {
   DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
 
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   std::string(),
-                                   std::string(),
-                                   get_check_connection_info_url_,
-                                   kLoadFlagsIgnoreCookies,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, std::string(), std::string(),
+                               get_check_connection_info_url_,
+                               kLoadFlagsIgnoreCookies, this);
   fetch_pending_ = true;
   fetcher_->Start();
 }
@@ -816,12 +777,8 @@
   DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
 
   request_body_ = MakeListIDPSessionsBody(scopes, domain);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   oauth2_iframe_url_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, request_body_, std::string(),
+                               oauth2_iframe_url_, net::LOAD_NORMAL, this);
   requested_service_ = kListIdpServiceRequested;
   fetch_pending_ = true;
   fetcher_->Start();
@@ -833,12 +790,8 @@
   DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
 
   request_body_ = MakeGetTokenResponseBody(scopes, domain, login_hint);
-  fetcher_.reset(CreateGaiaFetcher(getter_,
-                                   request_body_,
-                                   std::string(),
-                                   oauth2_iframe_url_,
-                                   net::LOAD_NORMAL,
-                                   this));
+  fetcher_ = CreateGaiaFetcher(getter_, request_body_, std::string(),
+                               oauth2_iframe_url_, net::LOAD_NORMAL, this);
 
   requested_service_ = kGetTokenResponseRequested;
   fetch_pending_ = true;
diff --git a/google_apis/gaia/gaia_auth_fetcher.h b/google_apis/gaia/gaia_auth_fetcher.h
index 0243d60..c2c8f64 100644
--- a/google_apis/gaia/gaia_auth_fetcher.h
+++ b/google_apis/gaia/gaia_auth_fetcher.h
@@ -411,7 +411,7 @@
   //
   // |load_flags| are passed to directly to net::URLFetcher::Create() when
   // creating the URL fetcher.
-  static net::URLFetcher* CreateGaiaFetcher(
+  static scoped_ptr<net::URLFetcher> CreateGaiaFetcher(
       net::URLRequestContextGetter* getter,
       const std::string& body,
       const std::string& headers,
diff --git a/google_apis/gaia/gaia_oauth_client.cc b/google_apis/gaia/gaia_oauth_client.cc
index adb8c6f..ab1f5d6 100644
--- a/google_apis/gaia/gaia_oauth_client.cc
+++ b/google_apis/gaia/gaia_oauth_client.cc
@@ -173,9 +173,9 @@
   request_type_ = type;
   delegate_ = delegate;
   num_retries_ = 0;
-  request_.reset(net::URLFetcher::Create(
+  request_ = net::URLFetcher::Create(
       kUrlFetcherId, GURL(GaiaUrls::GetInstance()->oauth_user_info_url()),
-      net::URLFetcher::GET, this));
+      net::URLFetcher::GET, this);
   request_->SetRequestContext(request_context_getter_.get());
   request_->AddExtraRequestHeader("Authorization: OAuth " + oauth_access_token);
   request_->SetMaxRetriesOn5xx(max_retries);
@@ -213,8 +213,8 @@
   DCHECK(!request_.get()) << "Tried to fetch two things at once!";
   delegate_ = delegate;
   num_retries_ = 0;
-  request_.reset(net::URLFetcher::Create(
-      kUrlFetcherId, url, net::URLFetcher::POST, this));
+  request_ =
+      net::URLFetcher::Create(kUrlFetcherId, url, net::URLFetcher::POST, this);
   request_->SetRequestContext(request_context_getter_.get());
   request_->SetUploadData("application/x-www-form-urlencoded", post_body);
   request_->SetMaxRetriesOn5xx(max_retries);
diff --git a/google_apis/gaia/gaia_oauth_client_unittest.cc b/google_apis/gaia/gaia_oauth_client_unittest.cc
index 56fdc916..530baef 100644
--- a/google_apis/gaia/gaia_oauth_client_unittest.cc
+++ b/google_apis/gaia/gaia_oauth_client_unittest.cc
@@ -88,10 +88,11 @@
         complete_immediately_(true) {
   }
   ~MockOAuthFetcherFactory() override {}
-  net::URLFetcher* CreateURLFetcher(int id,
-                                    const GURL& url,
-                                    net::URLFetcher::RequestType request_type,
-                                    net::URLFetcherDelegate* d) override {
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
+      int id,
+      const GURL& url,
+      net::URLFetcher::RequestType request_type,
+      net::URLFetcherDelegate* d) override {
     url_fetcher_ = new MockOAuthFetcher(
         response_code_,
         max_failure_count_,
@@ -100,7 +101,7 @@
         results_,
         request_type,
         d);
-    return url_fetcher_;
+    return scoped_ptr<net::URLFetcher>(url_fetcher_);
   }
   void set_response_code(int response_code) {
     response_code_ = response_code;
diff --git a/google_apis/gaia/mock_url_fetcher_factory.h b/google_apis/gaia/mock_url_fetcher_factory.h
index 68e30aa63..adc118b 100644
--- a/google_apis/gaia/mock_url_fetcher_factory.h
+++ b/google_apis/gaia/mock_url_fetcher_factory.h
@@ -48,12 +48,13 @@
         success_(true) {
   }
   ~MockURLFetcherFactory() {}
-  net::URLFetcher* CreateURLFetcher(
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
       int id,
       const GURL& url,
       net::URLFetcher::RequestType request_type,
       net::URLFetcherDelegate* d) override {
-    return new T(success_, url, results_, request_type, d);
+    return scoped_ptr<net::URLFetcher>(
+        new T(success_, url, results_, request_type, d));
   }
   void set_success(bool success) {
     success_ = success;
diff --git a/google_apis/gaia/oauth2_access_token_fetcher_impl.cc b/google_apis/gaia/oauth2_access_token_fetcher_impl.cc
index 08e45d2e..1d5980e 100644
--- a/google_apis/gaia/oauth2_access_token_fetcher_impl.cc
+++ b/google_apis/gaia/oauth2_access_token_fetcher_impl.cc
@@ -90,12 +90,12 @@
   }
 }
 
-static URLFetcher* CreateFetcher(URLRequestContextGetter* getter,
-                                 const GURL& url,
-                                 const std::string& body,
-                                 URLFetcherDelegate* delegate) {
+static scoped_ptr<URLFetcher> CreateFetcher(URLRequestContextGetter* getter,
+                                            const GURL& url,
+                                            const std::string& body,
+                                            URLFetcherDelegate* delegate) {
   bool empty_body = body.empty();
-  URLFetcher* result = net::URLFetcher::Create(
+  scoped_ptr<URLFetcher> result = net::URLFetcher::Create(
       0, url, empty_body ? URLFetcher::GET : URLFetcher::POST, delegate);
 
   result->SetRequestContext(getter);
@@ -155,12 +155,10 @@
 void OAuth2AccessTokenFetcherImpl::StartGetAccessToken() {
   CHECK_EQ(INITIAL, state_);
   state_ = GET_ACCESS_TOKEN_STARTED;
-  fetcher_.reset(
-      CreateFetcher(getter_,
-                    MakeGetAccessTokenUrl(),
-                    MakeGetAccessTokenBody(
-                        client_id_, client_secret_, refresh_token_, scopes_),
-                    this));
+  fetcher_ = CreateFetcher(getter_, MakeGetAccessTokenUrl(),
+                           MakeGetAccessTokenBody(client_id_, client_secret_,
+                                                  refresh_token_, scopes_),
+                           this);
   fetcher_->Start();  // OnURLFetchComplete will be called.
 }
 
diff --git a/google_apis/gaia/oauth2_access_token_fetcher_impl_unittest.cc b/google_apis/gaia/oauth2_access_token_fetcher_impl_unittest.cc
index 8225d79..8cd7244 100644
--- a/google_apis/gaia/oauth2_access_token_fetcher_impl_unittest.cc
+++ b/google_apis/gaia/oauth2_access_token_fetcher_impl_unittest.cc
@@ -61,11 +61,19 @@
   MockUrlFetcherFactory() : ScopedURLFetcherFactory(this) {}
   virtual ~MockUrlFetcherFactory() {}
 
-  MOCK_METHOD4(CreateURLFetcher,
+  MOCK_METHOD4(CreateURLFetcherMock,
                URLFetcher*(int id,
                            const GURL& url,
                            URLFetcher::RequestType request_type,
                            URLFetcherDelegate* d));
+
+  scoped_ptr<URLFetcher> CreateURLFetcher(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) override {
+    return scoped_ptr<URLFetcher>(
+        CreateURLFetcherMock(id, url, request_type, d));
+  }
 };
 
 class MockOAuth2AccessTokenConsumer : public OAuth2AccessTokenConsumer {
@@ -107,7 +115,7 @@
     if (!body.empty())
       url_fetcher->SetResponseString(body);
 
-    EXPECT_CALL(factory_, CreateURLFetcher(_, url, _, _))
+    EXPECT_CALL(factory_, CreateURLFetcherMock(_, url, _, _))
         .WillOnce(Return(url_fetcher));
     return url_fetcher;
   }
diff --git a/google_apis/gaia/oauth2_api_call_flow.cc b/google_apis/gaia/oauth2_api_call_flow.cc
index 3d65d7c..d02c8c6 100644
--- a/google_apis/gaia/oauth2_api_call_flow.cc
+++ b/google_apis/gaia/oauth2_api_call_flow.cc
@@ -42,7 +42,7 @@
   CHECK(state_ == INITIAL);
   state_ = API_CALL_STARTED;
 
-  url_fetcher_.reset(CreateURLFetcher(context, access_token));
+  url_fetcher_ = CreateURLFetcher(context, access_token);
   url_fetcher_->Start();  // OnURLFetchComplete will be called.
 }
 
@@ -71,15 +71,13 @@
   EndApiCall(source);
 }
 
-URLFetcher* OAuth2ApiCallFlow::CreateURLFetcher(
+scoped_ptr<URLFetcher> OAuth2ApiCallFlow::CreateURLFetcher(
     net::URLRequestContextGetter* context,
     const std::string& access_token) {
   std::string body = CreateApiCallBody();
   bool empty_body = body.empty();
-  URLFetcher* result = net::URLFetcher::Create(
-      0,
-      CreateApiCallUrl(),
-      empty_body ? URLFetcher::GET : URLFetcher::POST,
+  scoped_ptr<URLFetcher> result = net::URLFetcher::Create(
+      0, CreateApiCallUrl(), empty_body ? URLFetcher::GET : URLFetcher::POST,
       this);
 
   result->SetRequestContext(context);
diff --git a/google_apis/gaia/oauth2_api_call_flow.h b/google_apis/gaia/oauth2_api_call_flow.h
index fd4c6607..5aa3399 100644
--- a/google_apis/gaia/oauth2_api_call_flow.h
+++ b/google_apis/gaia/oauth2_api_call_flow.h
@@ -64,9 +64,9 @@
   // Template method CreateApiCallUrl is used to get the URL.
   // Template method CreateApiCallBody is used to get the body.
   // The URLFether's method will be GET if body is empty, POST otherwise.
-  // Caller owns the returned instance.
-  net::URLFetcher* CreateURLFetcher(net::URLRequestContextGetter* context,
-                                    const std::string& access_token);
+  scoped_ptr<net::URLFetcher> CreateURLFetcher(
+      net::URLRequestContextGetter* context,
+      const std::string& access_token);
 
   // Helper methods to implement the state machine for the flow.
   void BeginApiCall();
diff --git a/google_apis/gaia/oauth2_api_call_flow_unittest.cc b/google_apis/gaia/oauth2_api_call_flow_unittest.cc
index d5403277..1222ae3 100644
--- a/google_apis/gaia/oauth2_api_call_flow_unittest.cc
+++ b/google_apis/gaia/oauth2_api_call_flow_unittest.cc
@@ -61,12 +61,19 @@
   }
   virtual ~MockUrlFetcherFactory() {}
 
-  MOCK_METHOD4(
-      CreateURLFetcher,
-      URLFetcher* (int id,
-                   const GURL& url,
-                   URLFetcher::RequestType request_type,
-                   URLFetcherDelegate* d));
+  MOCK_METHOD4(CreateURLFetcherMock,
+               URLFetcher*(int id,
+                           const GURL& url,
+                           URLFetcher::RequestType request_type,
+                           URLFetcherDelegate* d));
+
+  scoped_ptr<URLFetcher> CreateURLFetcher(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) override {
+    return scoped_ptr<URLFetcher>(
+        CreateURLFetcherMock(id, url, request_type, d));
+  }
 };
 
 class MockApiCallFlow : public OAuth2ApiCallFlow {
@@ -118,7 +125,7 @@
     EXPECT_CALL(flow_, CreateApiCallUrl()).WillOnce(Return(url));
     TestURLFetcher* url_fetcher =
         CreateURLFetcher(url, succeeds, status, std::string());
-    EXPECT_CALL(factory_, CreateURLFetcher(_, url, _, _))
+    EXPECT_CALL(factory_, CreateURLFetcherMock(_, url, _, _))
         .WillOnce(Return(url_fetcher));
     return url_fetcher;
   }
diff --git a/google_apis/gcm/engine/checkin_request.cc b/google_apis/gcm/engine/checkin_request.cc
index 428e526..8a9ef033 100644
--- a/google_apis/gcm/engine/checkin_request.cc
+++ b/google_apis/gcm/engine/checkin_request.cc
@@ -143,8 +143,8 @@
   std::string upload_data;
   CHECK(request.SerializeToString(&upload_data));
 
-  url_fetcher_.reset(
-      net::URLFetcher::Create(checkin_url_, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(checkin_url_, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(request_context_getter_);
   url_fetcher_->SetUploadData(kRequestContentType, upload_data);
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/google_apis/gcm/engine/registration_request.cc b/google_apis/gcm/engine/registration_request.cc
index baffcc7..2e52fba5 100644
--- a/google_apis/gcm/engine/registration_request.cc
+++ b/google_apis/gcm/engine/registration_request.cc
@@ -126,8 +126,8 @@
          request_info_.sender_ids.size() <= kMaxSenders);
 
   DCHECK(!url_fetcher_.get());
-  url_fetcher_.reset(net::URLFetcher::Create(
-      registration_url_, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(registration_url_, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(request_context_getter_.get());
   url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                              net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/google_apis/gcm/engine/unregistration_request.cc b/google_apis/gcm/engine/unregistration_request.cc
index 7272fc7..9b33778 100644
--- a/google_apis/gcm/engine/unregistration_request.cc
+++ b/google_apis/gcm/engine/unregistration_request.cc
@@ -133,8 +133,8 @@
   DCHECK(request_info_.security_token != 0UL);
   DCHECK(!url_fetcher_.get());
 
-  url_fetcher_.reset(net::URLFetcher::Create(
-      registration_url_, net::URLFetcher::POST, this));
+  url_fetcher_ =
+      net::URLFetcher::Create(registration_url_, net::URLFetcher::POST, this);
   url_fetcher_->SetRequestContext(request_context_getter_.get());
 
   std::string android_id = base::Uint64ToString(request_info_.android_id);
diff --git a/ios/chrome/browser/net/image_fetcher.mm b/ios/chrome/browser/net/image_fetcher.mm
index 89f59c7d..edf205c 100644
--- a/ios/chrome/browser/net/image_fetcher.mm
+++ b/ios/chrome/browser/net/image_fetcher.mm
@@ -83,9 +83,8 @@
     const std::string& referrer,
     net::URLRequest::ReferrerPolicy referrer_policy) {
   DCHECK(request_context_getter_.get());
-  net::URLFetcher* fetcher = net::URLFetcher::Create(url,
-                                                     net::URLFetcher::GET,
-                                                     this);
+  net::URLFetcher* fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::GET, this).release();
   downloads_in_progress_[fetcher] = [callback copy];
   fetcher->SetLoadFlags(
       net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/ios/chrome/browser/net/retryable_url_fetcher.mm b/ios/chrome/browser/net/retryable_url_fetcher.mm
index 0e6bc605..8269ca6 100644
--- a/ios/chrome/browser/net/retryable_url_fetcher.mm
+++ b/ios/chrome/browser/net/retryable_url_fetcher.mm
@@ -58,8 +58,8 @@
   GURL url(base::SysNSStringToUTF8([delegate_ urlToFetch]));
   if (url.is_valid()) {
     fetcherDelegate_.reset(new URLRequestDelegate(self));
-    fetcher_.reset(net::URLFetcher::Create(url, net::URLFetcher::GET,
-                                           fetcherDelegate_.get()));
+    fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET,
+                                       fetcherDelegate_.get());
     fetcher_->SetRequestContext(requestContextGetter_.get());
     fetcher_->Start();
   }
diff --git a/ios/chrome/browser/updatable_config/updatable_config_base.mm b/ios/chrome/browser/updatable_config/updatable_config_base.mm
index b28fe21..80c3ddb 100644
--- a/ios/chrome/browser/updatable_config/updatable_config_base.mm
+++ b/ios/chrome/browser/updatable_config/updatable_config_base.mm
@@ -57,7 +57,7 @@
 
   // Starts fetching |url| for updated configuration.
   void Fetch(const GURL& url, net::URLRequestContextGetter* context) {
-    fetcher_.reset(net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+    fetcher_ = net::URLFetcher::Create(url, net::URLFetcher::GET, this);
     fetcher_->SetRequestContext(context);
     fetcher_->Start();
   }
diff --git a/ios/web/webui/url_fetcher_block_adapter.mm b/ios/web/webui/url_fetcher_block_adapter.mm
index 373235fe..deb6178a 100644
--- a/ios/web/webui/url_fetcher_block_adapter.mm
+++ b/ios/web/webui/url_fetcher_block_adapter.mm
@@ -23,7 +23,7 @@
 }
 
 void URLFetcherBlockAdapter::Start() {
-  fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
+  fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
   fetcher_->SetRequestContext(request_context_);
   fetcher_->Start();
 }
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc
index de0af80a..a6070e8 100644
--- a/net/server/http_server_unittest.cc
+++ b/net/server/http_server_unittest.cc
@@ -421,11 +421,10 @@
 
   scoped_refptr<URLRequestContextGetter> request_context_getter(
       new TestURLRequestContextGetter(base::MessageLoopProxy::current()));
-  scoped_ptr<URLFetcher> fetcher(
+  scoped_ptr<URLFetcher> fetcher =
       URLFetcher::Create(GURL(base::StringPrintf("http://127.0.0.1:%d/test",
                                                  server_address_.port())),
-                         URLFetcher::GET,
-                         &delegate));
+                         URLFetcher::GET, &delegate);
   fetcher->SetRequestContext(request_context_getter.get());
   fetcher->AddExtraRequestHeader(
       base::StringPrintf("content-length:%d", 1 << 30));
diff --git a/net/test/embedded_test_server/embedded_test_server_unittest.cc b/net/test/embedded_test_server/embedded_test_server_unittest.cc
index efa4b0c..b5d72f2 100644
--- a/net/test/embedded_test_server/embedded_test_server_unittest.cc
+++ b/net/test/embedded_test_server/embedded_test_server_unittest.cc
@@ -137,10 +137,8 @@
                  "text/html",
                  HTTP_OK));
 
-  scoped_ptr<URLFetcher> fetcher(
-      URLFetcher::Create(server_->GetURL("/test?q=foo"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher =
+      URLFetcher::Create(server_->GetURL("/test?q=foo"), URLFetcher::GET, this);
   fetcher->SetRequestContext(request_context_getter_.get());
   fetcher->Start();
   WaitForResponses(1);
@@ -159,10 +157,8 @@
   server_->ServeFilesFromDirectory(
       src_dir.AppendASCII("net").AppendASCII("data"));
 
-  scoped_ptr<URLFetcher> fetcher(
-      URLFetcher::Create(server_->GetURL("/test.html"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher =
+      URLFetcher::Create(server_->GetURL("/test.html"), URLFetcher::GET, this);
   fetcher->SetRequestContext(request_context_getter_.get());
   fetcher->Start();
   WaitForResponses(1);
@@ -174,10 +170,8 @@
 }
 
 TEST_F(EmbeddedTestServerTest, DefaultNotFoundResponse) {
-  scoped_ptr<URLFetcher> fetcher(
-      URLFetcher::Create(server_->GetURL("/non-existent"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher = URLFetcher::Create(
+      server_->GetURL("/non-existent"), URLFetcher::GET, this);
   fetcher->SetRequestContext(request_context_getter_.get());
 
   fetcher->Start();
@@ -209,20 +203,14 @@
                  "text/plain",
                  HTTP_NOT_FOUND));
 
-  scoped_ptr<URLFetcher> fetcher1 = scoped_ptr<URLFetcher>(
-      URLFetcher::Create(server_->GetURL("/test1"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher1 =
+      URLFetcher::Create(server_->GetURL("/test1"), URLFetcher::GET, this);
   fetcher1->SetRequestContext(request_context_getter_.get());
-  scoped_ptr<URLFetcher> fetcher2 = scoped_ptr<URLFetcher>(
-      URLFetcher::Create(server_->GetURL("/test2"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher2 =
+      URLFetcher::Create(server_->GetURL("/test2"), URLFetcher::GET, this);
   fetcher2->SetRequestContext(request_context_getter_.get());
-  scoped_ptr<URLFetcher> fetcher3 = scoped_ptr<URLFetcher>(
-      URLFetcher::Create(server_->GetURL("/test3"),
-                              URLFetcher::GET,
-                              this));
+  scoped_ptr<URLFetcher> fetcher3 =
+      URLFetcher::Create(server_->GetURL("/test3"), URLFetcher::GET, this);
   fetcher3->SetRequestContext(request_context_getter_.get());
 
   // Fetch the three URLs concurrently.
@@ -289,8 +277,8 @@
     if (!loop)
       loop.reset(new base::MessageLoopForIO);
 
-    scoped_ptr<URLFetcher> fetcher(URLFetcher::Create(
-        server.GetURL("/test?q=foo"), URLFetcher::GET, this));
+    scoped_ptr<URLFetcher> fetcher =
+        URLFetcher::Create(server.GetURL("/test?q=foo"), URLFetcher::GET, this);
     fetcher->SetRequestContext(
         new TestURLRequestContextGetter(loop->message_loop_proxy()));
     fetcher->Start();
diff --git a/net/tools/get_server_time/get_server_time.cc b/net/tools/get_server_time/get_server_time.cc
index 98a48c100..9915e8e 100644
--- a/net/tools/get_server_time/get_server_time.cc
+++ b/net/tools/get_server_time/get_server_time.cc
@@ -230,8 +230,8 @@
                                 net::NetLogCaptureMode::IncludeSocketBytes());
 
   QuitDelegate delegate;
-  scoped_ptr<net::URLFetcher> fetcher(
-      net::URLFetcher::Create(url, net::URLFetcher::HEAD, &delegate));
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::HEAD, &delegate);
   scoped_ptr<net::URLRequestContext> url_request_context(
       BuildURLRequestContext(&net_log));
   fetcher->SetRequestContext(
diff --git a/net/url_request/test_url_fetcher_factory.cc b/net/url_request/test_url_fetcher_factory.cc
index 6dc9367..207d285 100644
--- a/net/url_request/test_url_fetcher_factory.cc
+++ b/net/url_request/test_url_fetcher_factory.cc
@@ -300,7 +300,7 @@
 
 TestURLFetcherFactory::~TestURLFetcherFactory() {}
 
-URLFetcher* TestURLFetcherFactory::CreateURLFetcher(
+scoped_ptr<URLFetcher> TestURLFetcherFactory::CreateURLFetcher(
     int id,
     const GURL& url,
     URLFetcher::RequestType request_type,
@@ -310,7 +310,7 @@
     fetcher->set_owner(this);
   fetcher->SetDelegateForTests(delegate_for_tests_);
   fetchers_[id] = fetcher;
-  return fetcher;
+  return scoped_ptr<URLFetcher>(fetcher);
 }
 
 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const {
@@ -399,7 +399,7 @@
 
 FakeURLFetcherFactory::~FakeURLFetcherFactory() {}
 
-URLFetcher* FakeURLFetcherFactory::CreateURLFetcher(
+scoped_ptr<URLFetcher> FakeURLFetcherFactory::CreateURLFetcher(
     int id,
     const GURL& url,
     URLFetcher::RequestType request_type,
@@ -415,11 +415,10 @@
     }
   }
 
-  scoped_ptr<FakeURLFetcher> fake_fetcher =
-      creator_.Run(url, d, it->second.response_data,
-                   it->second.response_code, it->second.status);
-  // TODO: Make URLFetcherFactory::CreateURLFetcher return a scoped_ptr
-  return fake_fetcher.release();
+  scoped_ptr<URLFetcher> fake_fetcher =
+      creator_.Run(url, d, it->second.response_data, it->second.response_code,
+                   it->second.status);
+  return fake_fetcher;
 }
 
 void FakeURLFetcherFactory::SetFakeResponse(
@@ -443,12 +442,12 @@
 
 URLFetcherImplFactory::~URLFetcherImplFactory() {}
 
-URLFetcher* URLFetcherImplFactory::CreateURLFetcher(
+scoped_ptr<URLFetcher> URLFetcherImplFactory::CreateURLFetcher(
     int id,
     const GURL& url,
     URLFetcher::RequestType request_type,
     URLFetcherDelegate* d) {
-  return new URLFetcherImpl(url, request_type, d);
+  return scoped_ptr<URLFetcher>(new URLFetcherImpl(url, request_type, d));
 }
 
 }  // namespace net
diff --git a/net/url_request/test_url_fetcher_factory.h b/net/url_request/test_url_fetcher_factory.h
index 5ceef51..daa1dbcd 100644
--- a/net/url_request/test_url_fetcher_factory.h
+++ b/net/url_request/test_url_fetcher_factory.h
@@ -242,10 +242,10 @@
   TestURLFetcherFactory();
   ~TestURLFetcherFactory() override;
 
-  URLFetcher* CreateURLFetcher(int id,
-                               const GURL& url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d) override;
+  scoped_ptr<URLFetcher> CreateURLFetcher(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) override;
   TestURLFetcher* GetFetcherByID(int id) const;
   void RemoveFetcherFromMap(int id);
   void SetDelegateForTests(TestURLFetcherDelegateForTests* delegate_for_tests);
@@ -401,10 +401,10 @@
   // NULL.
   // Otherwise, it will return a URLFetcher object which will respond with the
   // pre-baked response that the client has set by calling SetFakeResponse().
-  URLFetcher* CreateURLFetcher(int id,
-                               const GURL& url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d) override;
+  scoped_ptr<URLFetcher> CreateURLFetcher(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) override;
 
   // Sets the fake response for a given URL. The |response_data| may be empty.
   // The |response_code| may be any HttpStatusCode. For instance, HTTP_OK will
@@ -453,10 +453,10 @@
   ~URLFetcherImplFactory() override;
 
   // This method will create a real URLFetcher.
-  URLFetcher* CreateURLFetcher(int id,
-                               const GURL& url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d) override;
+  scoped_ptr<URLFetcher> CreateURLFetcher(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) override;
 };
 
 }  // namespace net
diff --git a/net/url_request/url_fetcher.cc b/net/url_request/url_fetcher.cc
index faf70175..d4bd820 100644
--- a/net/url_request/url_fetcher.cc
+++ b/net/url_request/url_fetcher.cc
@@ -12,20 +12,21 @@
 URLFetcher::~URLFetcher() {}
 
 // static
-URLFetcher* URLFetcher::Create(const GURL& url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d) {
+scoped_ptr<URLFetcher> URLFetcher::Create(const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) {
   return URLFetcher::Create(0, url, request_type, d);
 }
 
 // static
-URLFetcher* URLFetcher::Create(int id,
-                               const GURL& url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d) {
+scoped_ptr<URLFetcher> URLFetcher::Create(int id,
+                                          const GURL& url,
+                                          URLFetcher::RequestType request_type,
+                                          URLFetcherDelegate* d) {
   URLFetcherFactory* factory = URLFetcherImpl::factory();
-  return factory ? factory->CreateURLFetcher(id, url, request_type, d)
-                 : new URLFetcherImpl(url, request_type, d);
+  return factory
+             ? factory->CreateURLFetcher(id, url, request_type, d)
+             : scoped_ptr<URLFetcher>(new URLFetcherImpl(url, request_type, d));
 }
 
 // static
diff --git a/net/url_request/url_fetcher.h b/net/url_request/url_fetcher.h
index e08bdaad..8d2c1b5 100644
--- a/net/url_request/url_fetcher.h
+++ b/net/url_request/url_fetcher.h
@@ -37,9 +37,10 @@
 
 // To use this class, create an instance with the desired URL and a pointer to
 // the object to be notified when the URL has been loaded:
-//   scoped_ptr<URLFetcher> fetcher(URLFetcher::Create("http://www.google.com",
+//   scoped_ptr<URLFetcher> fetcher =
+//   URLFetcher::Create("http://www.google.com",
 //                                                     URLFetcher::GET,
-//                                                     this));
+//                                                     this);
 //
 // You must also set a request context getter:
 //
@@ -102,19 +103,17 @@
   // |url| is the URL to send the request to.
   // |request_type| is the type of request to make.
   // |d| the object that will receive the callback on fetch completion.
-  // Caller is responsible for destroying the returned URLFetcher.
-  static URLFetcher* Create(const GURL& url,
-                            URLFetcher::RequestType request_type,
-                            URLFetcherDelegate* d);
+  static scoped_ptr<URLFetcher> Create(const GURL& url,
+                                       URLFetcher::RequestType request_type,
+                                       URLFetcherDelegate* d);
 
   // Like above, but if there's a URLFetcherFactory registered with the
   // implementation it will be used. |id| may be used during testing to identify
   // who is creating the URLFetcher.
-  // Caller is responsible for destroying the returned URLFetcher.
-  static URLFetcher* Create(int id,
-                            const GURL& url,
-                            URLFetcher::RequestType request_type,
-                            URLFetcherDelegate* d);
+  static scoped_ptr<URLFetcher> Create(int id,
+                                       const GURL& url,
+                                       URLFetcher::RequestType request_type,
+                                       URLFetcherDelegate* d);
 
   // Cancels all existing URLFetchers.  Will notify the URLFetcherDelegates.
   // Note that any new URLFetchers created while this is running will not be
diff --git a/net/url_request/url_fetcher_factory.h b/net/url_request/url_fetcher_factory.h
index 0c5a5eb..2cf024e 100644
--- a/net/url_request/url_fetcher_factory.h
+++ b/net/url_request/url_fetcher_factory.h
@@ -14,7 +14,7 @@
 // URLFetcher. Factory is intended for testing.
 class URLFetcherFactory {
  public:
-  virtual URLFetcher* CreateURLFetcher(
+  virtual scoped_ptr<URLFetcher> CreateURLFetcher(
       int id,
       const GURL& url,
       URLFetcher::RequestType request_type,
diff --git a/remoting/host/dns_blackhole_checker.cc b/remoting/host/dns_blackhole_checker.cc
index b92eb12..1f71ad52 100644
--- a/remoting/host/dns_blackhole_checker.cc
+++ b/remoting/host/dns_blackhole_checker.cc
@@ -58,8 +58,8 @@
     }
     talkgadget_url += kTalkGadgetUrl;
     HOST_LOG << "Verifying connection to " << talkgadget_url;
-    url_fetcher_.reset(net::URLFetcher::Create(GURL(talkgadget_url),
-                                               net::URLFetcher::GET, this));
+    url_fetcher_ = net::URLFetcher::Create(GURL(talkgadget_url),
+                                           net::URLFetcher::GET, this);
     url_fetcher_->SetRequestContext(url_request_context_getter_.get());
     url_fetcher_->Start();
   } else {
diff --git a/remoting/host/setup/service_client.cc b/remoting/host/setup/service_client.cc
index 9ea1d52..260f7621 100644
--- a/remoting/host/setup/service_client.cc
+++ b/remoting/host/setup/service_client.cc
@@ -111,8 +111,8 @@
     const std::string& oauth_access_token,
     ServiceClient::Delegate* delegate) {
   delegate_ = delegate;
-  request_.reset(net::URLFetcher::Create(
-      0, GURL(chromoting_hosts_url_ + url_suffix), request_type, this));
+  request_ = net::URLFetcher::Create(
+      0, GURL(chromoting_hosts_url_ + url_suffix), request_type, this);
   request_->SetRequestContext(request_context_getter_.get());
   request_->SetUploadData("application/json; charset=UTF-8", request_body);
   request_->AddExtraRequestHeader("Authorization: OAuth " + oauth_access_token);
diff --git a/remoting/protocol/chromium_port_allocator.cc b/remoting/protocol/chromium_port_allocator.cc
index fb8a3e0..ffe6756 100644
--- a/remoting/protocol/chromium_port_allocator.cc
+++ b/remoting/protocol/chromium_port_allocator.cc
@@ -97,8 +97,8 @@
     int port) {
   GURL url("https://" + host + ":" + base::IntToString(port) +
            GetSessionRequestUrl() + "&sn=1");
-  scoped_ptr<net::URLFetcher> url_fetcher(
-      net::URLFetcher::Create(url, net::URLFetcher::GET, this));
+  scoped_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::GET, this);
   url_fetcher->SetRequestContext(url_context_.get());
   url_fetcher->AddExtraRequestHeader("X-Talk-Google-Relay-Auth: " +
                                      relay_token());
diff --git a/remoting/test/remote_host_info_fetcher.cc b/remoting/test/remote_host_info_fetcher.cc
index e386bf8..2f9e6a20 100644
--- a/remoting/test/remote_host_info_fetcher.cc
+++ b/remoting/test/remote_host_info_fetcher.cc
@@ -69,8 +69,8 @@
       base::ThreadTaskRunnerHandle::Get(),   // network_runner
       base::ThreadTaskRunnerHandle::Get());  // file_runner
 
-  request_.reset(
-      net::URLFetcher::Create(GURL(service_url), net::URLFetcher::POST, this));
+  request_ =
+      net::URLFetcher::Create(GURL(service_url), net::URLFetcher::POST, this);
   request_->SetRequestContext(request_context_getter_.get());
   request_->AddExtraRequestHeader("Authorization: OAuth " + access_token);
   request_->AddExtraRequestHeader(kRequestTestOrigin);
diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc
index 66f8a7f..b58ce96 100644
--- a/rlz/lib/financial_ping.cc
+++ b/rlz/lib/financial_ping.cc
@@ -313,8 +313,8 @@
                                        kFinancialServer, kFinancialPort,
                                        request);
 
-  scoped_ptr<net::URLFetcher> fetcher(net::URLFetcher::Create(
-      GURL(url), net::URLFetcher::GET, &delegate));
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(GURL(url), net::URLFetcher::GET, &delegate);
 
   fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE |
                         net::LOAD_DO_NOT_SEND_AUTH_DATA |
diff --git a/sync/internal_api/attachments/attachment_downloader_impl.cc b/sync/internal_api/attachments/attachment_downloader_impl.cc
index f2e6a007..2915296 100644
--- a/sync/internal_api/attachments/attachment_downloader_impl.cc
+++ b/sync/internal_api/attachments/attachment_downloader_impl.cc
@@ -206,8 +206,8 @@
 scoped_ptr<net::URLFetcher> AttachmentDownloaderImpl::CreateFetcher(
     const AttachmentUrl& url,
     const std::string& access_token) {
-  scoped_ptr<net::URLFetcher> url_fetcher(
-      net::URLFetcher::Create(GURL(url), net::URLFetcher::GET, this));
+  scoped_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(GURL(url), net::URLFetcher::GET, this);
   AttachmentUploaderImpl::ConfigureURLFetcherCommon(
       url_fetcher.get(), access_token, raw_store_birthday_, model_type_,
       url_request_context_getter_.get());
diff --git a/sync/internal_api/attachments/attachment_uploader_impl.cc b/sync/internal_api/attachments/attachment_uploader_impl.cc
index e66330c..4dc410aa 100644
--- a/sync/internal_api/attachments/attachment_uploader_impl.cc
+++ b/sync/internal_api/attachments/attachment_uploader_impl.cc
@@ -210,8 +210,7 @@
   DCHECK_EQ(access_token_request_.get(), request);
   access_token_request_.reset();
   access_token_ = access_token;
-  fetcher_.reset(
-      net::URLFetcher::Create(upload_url_, net::URLFetcher::POST, this));
+  fetcher_ = net::URLFetcher::Create(upload_url_, net::URLFetcher::POST, this);
   ConfigureURLFetcherCommon(fetcher_.get(), access_token_, raw_store_birthday_,
                             model_type_, url_request_context_getter_.get());
 
diff --git a/sync/internal_api/http_bridge.cc b/sync/internal_api/http_bridge.cc
index 5a601b3..5f2cf53 100644
--- a/sync/internal_api/http_bridge.cc
+++ b/sync/internal_api/http_bridge.cc
@@ -302,8 +302,9 @@
       base::Bind(&HttpBridge::OnURLFetchTimedOut, this));
 
   DCHECK(context_getter_for_request_.get());
-  fetch_state_.url_poster = net::URLFetcher::Create(
-      url_for_request_, net::URLFetcher::POST, this);
+  fetch_state_.url_poster =
+      net::URLFetcher::Create(url_for_request_, net::URLFetcher::POST, this)
+          .release();
   fetch_state_.url_poster->SetRequestContext(context_getter_for_request_.get());
   fetch_state_.url_poster->SetUploadData(content_type_, request_content_);
   fetch_state_.url_poster->SetExtraRequestHeaders(extra_headers_);
diff --git a/sync/test/accounts_client/test_accounts_client.cc b/sync/test/accounts_client/test_accounts_client.cc
index 587c45f..2856ed2 100644
--- a/sync/test/accounts_client/test_accounts_client.cc
+++ b/sync/test/accounts_client/test_accounts_client.cc
@@ -142,8 +142,8 @@
   base::RunLoop run_loop;
 
   AccountsRequestDelegate delegate(&run_loop);
-  scoped_ptr<net::URLFetcher> fetcher(net::URLFetcher::Create(
-          url, net::URLFetcher::POST, &delegate));
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::POST, &delegate);
   fetcher->SetRequestContext(context_getter.get());
   fetcher->SetUploadData("application/json", "");
   fetcher->Start();
diff --git a/third_party/libaddressinput/chromium/chrome_metadata_source.cc b/third_party/libaddressinput/chromium/chrome_metadata_source.cc
index 51066d9..7ef9b29d 100644
--- a/third_party/libaddressinput/chromium/chrome_metadata_source.cc
+++ b/third_party/libaddressinput/chromium/chrome_metadata_source.cc
@@ -93,8 +93,8 @@
     return;
   }
 
-  scoped_ptr<net::URLFetcher> fetcher(
-      net::URLFetcher::Create(resource, net::URLFetcher::GET, this));
+  scoped_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(resource, net::URLFetcher::GET, this);
   fetcher->SetLoadFlags(
       net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES);
   fetcher->SetRequestContext(getter_);