summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvitalybuka <vitalybuka@chromium.org>2015-02-12 16:18:55 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-13 00:19:52 +0000
commit2eaed24e86bdb6fb9bbe5d63d88a4692402e31aa (patch)
treee2ae430c48e0859c34fea28b256defb3a0aa01c6
parent2f600adae5c00fb9408a7290e109075e90513869 (diff)
downloadchromium_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.cc38
-rw-r--r--extensions/browser/api/printer_provider/printer_provider_api.h14
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_;