Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1103)

Unified Diff: chrome/browser/policy/url_blacklist_manager.cc

Issue 8892034: Use base::Passed(scoped_ptr) in policy/ code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/url_blacklist_manager.cc
diff --git a/chrome/browser/policy/url_blacklist_manager.cc b/chrome/browser/policy/url_blacklist_manager.cc
index 63ccddef60cb3e43b63113729b5902d5e8a64323..d77ab86d047541587d4d451331f1154be831edcc 100644
--- a/chrome/browser/policy/url_blacklist_manager.cc
+++ b/chrome/browser/policy/url_blacklist_manager.cc
@@ -46,16 +46,11 @@ StringVector* ListValueToStringVector(const base::ListValue* list) {
return vector;
}
-// A task that builds the blacklist on the FILE thread. Takes ownership
-// of |block| and |allow| but not of |blacklist|.
+// A task that builds the blacklist on the FILE thread.
void BuildBlacklist(URLBlacklist* blacklist,
- StringVector* block,
- StringVector* allow) {
+ scoped_ptr<StringVector> block,
+ scoped_ptr<StringVector> allow) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- scoped_ptr<StringVector> scoped_block(block);
- scoped_ptr<StringVector> scoped_allow(allow);
-
for (StringVector::iterator it = block->begin(); it != block->end(); ++it) {
blacklist->Block(*it);
}
@@ -64,18 +59,6 @@ void BuildBlacklist(URLBlacklist* blacklist,
}
}
-// A task that owns the URLBlacklist, and passes it to the URLBlacklistManager
-// on the IO thread, if the URLBlacklistManager still exists.
-void SetBlacklistOnIO(base::WeakPtr<URLBlacklistManager> blacklist_manager,
- URLBlacklist* blacklist) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (blacklist_manager) {
- blacklist_manager->SetBlacklist(blacklist);
- } else {
- delete blacklist;
- }
-}
-
} // namespace
struct URLBlacklist::PathFilter {
@@ -367,37 +350,43 @@ void URLBlacklistManager::Update() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
// The preferences can only be read on the UI thread.
- StringVector* block =
- ListValueToStringVector(pref_service_->GetList(prefs::kUrlBlacklist));
- StringVector* allow =
- ListValueToStringVector(pref_service_->GetList(prefs::kUrlWhitelist));
+ scoped_ptr<StringVector> block(
+ ListValueToStringVector(pref_service_->GetList(prefs::kUrlBlacklist)));
+ scoped_ptr<StringVector> allow(
+ ListValueToStringVector(pref_service_->GetList(prefs::kUrlWhitelist)));
// Go through the IO thread to grab a WeakPtr to |this|. This is safe from
// here, since this task will always execute before a potential deletion of
// ProfileIOData on IO.
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&URLBlacklistManager::UpdateOnIO,
- base::Unretained(this), block, allow));
+ base::Unretained(this),
+ base::Passed(&block),
+ base::Passed(&allow)));
}
-void URLBlacklistManager::UpdateOnIO(StringVector* block, StringVector* allow) {
+void URLBlacklistManager::UpdateOnIO(scoped_ptr<StringVector> block,
+ scoped_ptr<StringVector> allow) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- URLBlacklist* blacklist = new URLBlacklist;
+ scoped_ptr<URLBlacklist> blacklist(new URLBlacklist);
+ // Get a raw pointer now, since |blacklist.get()| might be evaluated after
+ // |Passed(&blacklist) below.
+ URLBlacklist* raw_blacklist = blacklist.get();
Joao da Silva 2011/12/10 14:11:54 Only found this after the unit_tests crashed. Havi
awong 2011/12/12 22:01:26 Oh interesting. I had not thought about that. Yea
// The URLBlacklist is built on the FILE thread. Once it's ready, it is passed
// to the URLBlacklistManager on IO.
- // |blacklist|, |block| and |allow| can leak on the unlikely event of a
- // policy update and shutdown happening at the same time.
BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
base::Bind(&BuildBlacklist,
- blacklist, block, allow),
- base::Bind(&SetBlacklistOnIO,
+ raw_blacklist,
+ base::Passed(&block),
+ base::Passed(&allow)),
+ base::Bind(&URLBlacklistManager::SetBlacklist,
io_weak_ptr_factory_.GetWeakPtr(),
- blacklist));
+ base::Passed(&blacklist)));
}
-void URLBlacklistManager::SetBlacklist(URLBlacklist* blacklist) {
+void URLBlacklistManager::SetBlacklist(scoped_ptr<URLBlacklist> blacklist) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- blacklist_.reset(blacklist);
+ blacklist_.swap(blacklist);
}
bool URLBlacklistManager::IsURLBlocked(const GURL& url) const {

Powered by Google App Engine
This is Rietveld 408576698