OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/blacklist.h" | 5 #include "chrome/browser/extensions/blacklist.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 typedef base::Callback<void(const std::set<std::string>&)> OnResultCallback; | 72 typedef base::Callback<void(const std::set<std::string>&)> OnResultCallback; |
73 | 73 |
74 // Constructs a client to query the database manager for |extension_ids| and | 74 // Constructs a client to query the database manager for |extension_ids| and |
75 // run |callback| with the IDs of those which have been blacklisted. | 75 // run |callback| with the IDs of those which have been blacklisted. |
76 SafeBrowsingClientImpl( | 76 SafeBrowsingClientImpl( |
77 const std::set<std::string>& extension_ids, | 77 const std::set<std::string>& extension_ids, |
78 const OnResultCallback& callback) | 78 const OnResultCallback& callback) |
79 : callback_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 79 : callback_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
80 callback_(callback) { | 80 callback_(callback) { |
81 BrowserThread::PostTask( | 81 BrowserThread::PostTask( |
82 BrowserThread::IO, | 82 BrowserThread::IO, FROM_HERE, |
83 FROM_HERE, | 83 base::BindOnce(&SafeBrowsingClientImpl::StartCheck, this, |
84 base::Bind(&SafeBrowsingClientImpl::StartCheck, this, | 84 g_database_manager.Get().get(), extension_ids)); |
85 g_database_manager.Get().get(), | |
86 extension_ids)); | |
87 } | 85 } |
88 | 86 |
89 private: | 87 private: |
90 friend class base::RefCountedThreadSafe<SafeBrowsingClientImpl>; | 88 friend class base::RefCountedThreadSafe<SafeBrowsingClientImpl>; |
91 ~SafeBrowsingClientImpl() override {} | 89 ~SafeBrowsingClientImpl() override {} |
92 | 90 |
93 // Pass |database_manager| as a parameter to avoid touching | 91 // Pass |database_manager| as a parameter to avoid touching |
94 // SafeBrowsingService on the IO thread. | 92 // SafeBrowsingService on the IO thread. |
95 void StartCheck(scoped_refptr<SafeBrowsingDatabaseManager> database_manager, | 93 void StartCheck(scoped_refptr<SafeBrowsingDatabaseManager> database_manager, |
96 const std::set<std::string>& extension_ids) { | 94 const std::set<std::string>& extension_ids) { |
97 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 95 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
98 if (database_manager->CheckExtensionIDs(extension_ids, this)) { | 96 if (database_manager->CheckExtensionIDs(extension_ids, this)) { |
99 // Definitely not blacklisted. Callback immediately. | 97 // Definitely not blacklisted. Callback immediately. |
100 callback_task_runner_->PostTask( | 98 callback_task_runner_->PostTask( |
101 FROM_HERE, | 99 FROM_HERE, base::BindOnce(callback_, std::set<std::string>())); |
102 base::Bind(callback_, std::set<std::string>())); | |
103 return; | 100 return; |
104 } | 101 } |
105 // Something might be blacklisted, response will come in | 102 // Something might be blacklisted, response will come in |
106 // OnCheckExtensionsResult. | 103 // OnCheckExtensionsResult. |
107 AddRef(); // Balanced in OnCheckExtensionsResult | 104 AddRef(); // Balanced in OnCheckExtensionsResult |
108 } | 105 } |
109 | 106 |
110 void OnCheckExtensionsResult(const std::set<std::string>& hits) override { | 107 void OnCheckExtensionsResult(const std::set<std::string>& hits) override { |
111 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 108 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
112 callback_task_runner_->PostTask(FROM_HERE, base::Bind(callback_, hits)); | 109 callback_task_runner_->PostTask(FROM_HERE, base::BindOnce(callback_, hits)); |
113 Release(); // Balanced in StartCheck. | 110 Release(); // Balanced in StartCheck. |
114 } | 111 } |
115 | 112 |
116 scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner_; | 113 scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner_; |
117 OnResultCallback callback_; | 114 OnResultCallback callback_; |
118 | 115 |
119 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingClientImpl); | 116 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingClientImpl); |
120 }; | 117 }; |
121 | 118 |
122 void CheckOneExtensionState( | 119 void CheckOneExtensionState( |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 Blacklist* Blacklist::Get(content::BrowserContext* context) { | 185 Blacklist* Blacklist::Get(content::BrowserContext* context) { |
189 return BlacklistFactory::GetForBrowserContext(context); | 186 return BlacklistFactory::GetForBrowserContext(context); |
190 } | 187 } |
191 | 188 |
192 void Blacklist::GetBlacklistedIDs(const std::set<std::string>& ids, | 189 void Blacklist::GetBlacklistedIDs(const std::set<std::string>& ids, |
193 const GetBlacklistedIDsCallback& callback) { | 190 const GetBlacklistedIDsCallback& callback) { |
194 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 191 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
195 | 192 |
196 if (ids.empty() || !g_database_manager.Get().get().get()) { | 193 if (ids.empty() || !g_database_manager.Get().get().get()) { |
197 base::ThreadTaskRunnerHandle::Get()->PostTask( | 194 base::ThreadTaskRunnerHandle::Get()->PostTask( |
198 FROM_HERE, base::Bind(callback, BlacklistStateMap())); | 195 FROM_HERE, base::BindOnce(callback, BlacklistStateMap())); |
199 return; | 196 return; |
200 } | 197 } |
201 | 198 |
202 // Constructing the SafeBrowsingClientImpl begins the process of asking | 199 // Constructing the SafeBrowsingClientImpl begins the process of asking |
203 // safebrowsing for the blacklisted extensions. The set of blacklisted | 200 // safebrowsing for the blacklisted extensions. The set of blacklisted |
204 // extensions returned by SafeBrowsing will then be passed to | 201 // extensions returned by SafeBrowsing will then be passed to |
205 // GetBlacklistStateIDs to get the particular BlacklistState for each id. | 202 // GetBlacklistStateIDs to get the particular BlacklistState for each id. |
206 new SafeBrowsingClientImpl( | 203 new SafeBrowsingClientImpl( |
207 ids, base::Bind(&Blacklist::GetBlacklistStateForIDs, AsWeakPtr(), | 204 ids, base::Bind(&Blacklist::GetBlacklistStateForIDs, AsWeakPtr(), |
208 callback)); | 205 callback)); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 | 348 |
352 void Blacklist::Observe(int type, | 349 void Blacklist::Observe(int type, |
353 const content::NotificationSource& source, | 350 const content::NotificationSource& source, |
354 const content::NotificationDetails& details) { | 351 const content::NotificationDetails& details) { |
355 DCHECK_EQ(chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, type); | 352 DCHECK_EQ(chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, type); |
356 for (auto& observer : observers_) | 353 for (auto& observer : observers_) |
357 observer.OnBlacklistUpdated(); | 354 observer.OnBlacklistUpdated(); |
358 } | 355 } |
359 | 356 |
360 } // namespace extensions | 357 } // namespace extensions |
OLD | NEW |