diff options
author | vitalybuka <vitalybuka@chromium.org> | 2015-02-12 16:18:55 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-13 00:19:52 +0000 |
commit | 2eaed24e86bdb6fb9bbe5d63d88a4692402e31aa (patch) | |
tree | e2ae430c48e0859c34fea28b256defb3a0aa01c6 | |
parent | 2f600adae5c00fb9408a7290e109075e90513869 (diff) | |
download | chromium_src-2eaed24e86bdb6fb9bbe5d63d88a4692402e31aa.zip chromium_src-2eaed24e86bdb6fb9bbe5d63d88a4692402e31aa.tar.gz chromium_src-2eaed24e86bdb6fb9bbe5d63d88a4692402e31aa.tar.bz2 |
Small memory management cleanup in PendingGetPrintersRequests.
GetPrintersRequest does not need to be a pointer.
Review URL: https://codereview.chromium.org/914303002
Cr-Commit-Position: refs/heads/master@{#316099}
-rw-r--r-- | extensions/browser/api/printer_provider/printer_provider_api.cc | 38 | ||||
-rw-r--r-- | extensions/browser/api/printer_provider/printer_provider_api.h | 14 |
2 files changed, 29 insertions, 23 deletions
diff --git a/extensions/browser/api/printer_provider/printer_provider_api.cc b/extensions/browser/api/printer_provider/printer_provider_api.cc index 9e84186..03e2c72 100644 --- a/extensions/browser/api/printer_provider/printer_provider_api.cc +++ b/extensions/browser/api/printer_provider/printer_provider_api.cc @@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/lazy_instance.h" -#include "base/stl_util.h" #include "base/values.h" #include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api.h" #include "extensions/browser/event_router.h" @@ -108,12 +107,10 @@ void PrinterProviderAPI::DispatchGetPrintersRequested( return; } - scoped_ptr<GetPrintersRequest> request(new GetPrintersRequest(callback)); // |pending_get_printers_requests_| take ownership of |request| which gets // NULLed out. Save the pointer before passing it to the requests, as it will // be needed later on. - GetPrintersRequest* raw_request_ptr = request.get(); - int request_id = pending_get_printers_requests_.Add(request.Pass()); + int request_id = pending_get_printers_requests_.Add(callback); scoped_ptr<base::ListValue> internal_args(new base::ListValue); // Request id is not part of the public API, but it will be massaged out in @@ -128,7 +125,7 @@ void PrinterProviderAPI::DispatchGetPrintersRequested( // |BroadcastEvent| finishes. event->will_dispatch_callback = base::Bind(&PrinterProviderAPI::WillRequestPrinters, - base::Unretained(this), raw_request_ptr); + base::Unretained(this), request_id); event_router->BroadcastEvent(event.Pass()); } @@ -233,13 +230,12 @@ PrinterProviderAPI::PendingGetPrintersRequests::PendingGetPrintersRequests() } PrinterProviderAPI::PendingGetPrintersRequests::~PendingGetPrintersRequests() { - STLDeleteContainerPairSecondPointers(pending_requests_.begin(), - pending_requests_.end()); } int PrinterProviderAPI::PendingGetPrintersRequests::Add( - scoped_ptr<GetPrintersRequest> request) { - pending_requests_[++last_request_id_] = request.release(); + const GetPrintersCallback& callback) { + pending_requests_.insert( + std::make_pair(++last_request_id_, GetPrintersRequest(callback))); return last_request_id_; } @@ -251,11 +247,9 @@ bool PrinterProviderAPI::PendingGetPrintersRequests::CompleteForExtension( if (it == pending_requests_.end()) return false; - GetPrintersRequest* request = it->second; - request->ReportForExtension(extension_id, result); - if (request->IsDone()) { + it->second.ReportForExtension(extension_id, result); + if (it->second.IsDone()) { pending_requests_.erase(it); - delete request; } return true; } @@ -272,6 +266,17 @@ void PrinterProviderAPI::PendingGetPrintersRequests::FailAllForExtension( } } +bool PrinterProviderAPI::PendingGetPrintersRequests::AddSource( + int request_id, + const std::string& extension_id) { + auto it = pending_requests_.find(request_id); + if (it == pending_requests_.end()) + return false; + + it->second.AddSource(extension_id); + return true; +} + PrinterProviderAPI::PendingGetCapabilityRequests::PendingGetCapabilityRequests() : last_request_id_(0) { } @@ -395,10 +400,10 @@ void PrinterProviderAPI::OnExtensionUnloaded( } bool PrinterProviderAPI::WillRequestPrinters( - PrinterProviderAPI::GetPrintersRequest* request, + int request_id, content::BrowserContext* browser_context, const Extension* extension, - base::ListValue* args) const { + base::ListValue* args) { if (!extension) return false; EventRouter* event_router = EventRouter::Get(browser_context_); @@ -408,8 +413,7 @@ bool PrinterProviderAPI::WillRequestPrinters( return false; } - request->AddSource(extension->id()); - return true; + return pending_get_printers_requests_.AddSource(request_id, extension->id()); } template <> diff --git a/extensions/browser/api/printer_provider/printer_provider_api.h b/extensions/browser/api/printer_provider/printer_provider_api.h index 636fcd3..2574d7bf 100644 --- a/extensions/browser/api/printer_provider/printer_provider_api.h +++ b/extensions/browser/api/printer_provider/printer_provider_api.h @@ -143,8 +143,6 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, // The list of extensions that still have to respond to the event. std::set<std::string> extensions_; - - DISALLOW_COPY_AND_ASSIGN(GetPrintersRequest); }; // Keeps track of pending chrome.printerProvider.onGetPrintersRequested @@ -156,7 +154,7 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, // Adds a new request to the set of pending requests. Returns the id // assigned to the request. - int Add(scoped_ptr<GetPrintersRequest> request); + int Add(const GetPrintersCallback& callback); // Completes a request for an extension. It runs the request callback with // values reported by the extension. @@ -169,9 +167,13 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, // called as if the extension reported empty set of printers. void FailAllForExtension(const std::string& extension_id); + // Adds an extension id to the list of the extensions that need to respond + // to the event. + bool AddSource(int request_id, const std::string& extension_id); + private: int last_request_id_; - std::map<int, GetPrintersRequest*> pending_requests_; + std::map<int, GetPrintersRequest> pending_requests_; DISALLOW_COPY_AND_ASSIGN(PendingGetPrintersRequests); }; @@ -252,10 +254,10 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, // in the event. If the extension listens to the event, it's added to the set // of |request| sources. |request| is |GetPrintersRequest| object associated // with the event. - bool WillRequestPrinters(GetPrintersRequest* request, + bool WillRequestPrinters(int request_id, content::BrowserContext* browser_context, const Extension* extension, - base::ListValue* args) const; + base::ListValue* args); content::BrowserContext* browser_context_; |