| Index: chrome/browser/spellchecker/spelling_service_client.cc
|
| diff --git a/chrome/browser/spellchecker/spelling_service_client.cc b/chrome/browser/spellchecker/spelling_service_client.cc
|
| index be81257ea7a97823b2a64b041d2cb6ce70ace399..ae93f397f1018724560b8c401bfb4f8868212161 100644
|
| --- a/chrome/browser/spellchecker/spelling_service_client.cc
|
| +++ b/chrome/browser/spellchecker/spelling_service_client.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/json/json_reader.h"
|
| #include "base/json/string_escape.h"
|
| #include "base/logging.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| @@ -50,8 +51,6 @@ SpellingServiceClient::SpellingServiceClient() {
|
| }
|
|
|
| SpellingServiceClient::~SpellingServiceClient() {
|
| - base::STLDeleteContainerPairPointers(spellcheck_fetchers_.begin(),
|
| - spellcheck_fetchers_.end());
|
| }
|
|
|
| bool SpellingServiceClient::RequestTextCheck(
|
| @@ -117,7 +116,9 @@ bool SpellingServiceClient::RequestTextCheck(
|
| fetcher->SetUploadData("application/json", request);
|
| fetcher->SetLoadFlags(
|
| net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES);
|
| - spellcheck_fetchers_[fetcher] = new TextCheckCallbackData(callback, text);
|
| +
|
| + spellcheck_fetchers_[fetcher] = base::MakeUnique<TextCheckCallbackData>(
|
| + base::WrapUnique(fetcher), callback, text);
|
| fetcher->Start();
|
| return true;
|
| }
|
| @@ -247,29 +248,27 @@ bool SpellingServiceClient::ParseResponse(
|
| }
|
|
|
| SpellingServiceClient::TextCheckCallbackData::TextCheckCallbackData(
|
| + std::unique_ptr<net::URLFetcher> fetcher,
|
| TextCheckCompleteCallback callback,
|
| base::string16 text)
|
| - : callback(callback),
|
| - text(text) {
|
| -}
|
| + : fetcher(std::move(fetcher)), callback(callback), text(text) {}
|
|
|
| SpellingServiceClient::TextCheckCallbackData::~TextCheckCallbackData() {
|
| }
|
|
|
| -void SpellingServiceClient::OnURLFetchComplete(
|
| - const net::URLFetcher* source) {
|
| - DCHECK(spellcheck_fetchers_[source]);
|
| - std::unique_ptr<const net::URLFetcher> fetcher(source);
|
| - std::unique_ptr<TextCheckCallbackData> callback_data(
|
| - spellcheck_fetchers_[fetcher.get()]);
|
| +void SpellingServiceClient::OnURLFetchComplete(const net::URLFetcher* source) {
|
| + DCHECK(base::ContainsKey(spellcheck_fetchers_, source));
|
| + std::unique_ptr<TextCheckCallbackData> callback_data =
|
| + std::move(spellcheck_fetchers_[source]);
|
| + spellcheck_fetchers_.erase(source);
|
| +
|
| bool success = false;
|
| std::vector<SpellCheckResult> results;
|
| - if (fetcher->GetResponseCode() / 100 == 2) {
|
| + if (source->GetResponseCode() / 100 == 2) {
|
| std::string data;
|
| - fetcher->GetResponseAsString(&data);
|
| + source->GetResponseAsString(&data);
|
| success = ParseResponse(data, &results);
|
| }
|
| - spellcheck_fetchers_.erase(fetcher.get());
|
|
|
| // The callback may release the last (transitive) dependency on |this|. It
|
| // MUST be the last function called.
|
|
|