| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/api/runtime/chrome_runtime_api_delegate.h" | 5 #include "chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 | 202 |
| 203 ExtensionService* service = | 203 ExtensionService* service = |
| 204 ExtensionSystem::Get(browser_context_)->extension_service(); | 204 ExtensionSystem::Get(browser_context_)->extension_service(); |
| 205 if (reload_info.second >= kFastReloadCount) { | 205 if (reload_info.second >= kFastReloadCount) { |
| 206 // Unloading an extension clears all warnings, so first terminate the | 206 // Unloading an extension clears all warnings, so first terminate the |
| 207 // extension, and then add the warning. Since this is called from an | 207 // extension, and then add the warning. Since this is called from an |
| 208 // extension function unloading the extension has to be done | 208 // extension function unloading the extension has to be done |
| 209 // asynchronously. Fortunately PostTask guarentees FIFO order so just | 209 // asynchronously. Fortunately PostTask guarentees FIFO order so just |
| 210 // post both tasks. | 210 // post both tasks. |
| 211 base::ThreadTaskRunnerHandle::Get()->PostTask( | 211 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 212 FROM_HERE, base::Bind(&ExtensionService::TerminateExtension, | 212 FROM_HERE, base::BindOnce(&ExtensionService::TerminateExtension, |
| 213 service->AsWeakPtr(), extension_id)); | 213 service->AsWeakPtr(), extension_id)); |
| 214 extensions::WarningSet warnings; | 214 extensions::WarningSet warnings; |
| 215 warnings.insert( | 215 warnings.insert( |
| 216 extensions::Warning::CreateReloadTooFrequentWarning( | 216 extensions::Warning::CreateReloadTooFrequentWarning( |
| 217 extension_id)); | 217 extension_id)); |
| 218 base::ThreadTaskRunnerHandle::Get()->PostTask( | 218 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 219 FROM_HERE, base::Bind(&extensions::WarningService::NotifyWarningsOnUI, | 219 FROM_HERE, |
| 220 browser_context_, warnings)); | 220 base::BindOnce(&extensions::WarningService::NotifyWarningsOnUI, |
| 221 browser_context_, warnings)); |
| 221 } else { | 222 } else { |
| 222 // We can't call ReloadExtension directly, since when this method finishes | 223 // We can't call ReloadExtension directly, since when this method finishes |
| 223 // it tries to decrease the reference count for the extension, which fails | 224 // it tries to decrease the reference count for the extension, which fails |
| 224 // if the extension has already been reloaded; so instead we post a task. | 225 // if the extension has already been reloaded; so instead we post a task. |
| 225 base::ThreadTaskRunnerHandle::Get()->PostTask( | 226 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 226 FROM_HERE, base::Bind(&ExtensionService::ReloadExtension, | 227 FROM_HERE, base::BindOnce(&ExtensionService::ReloadExtension, |
| 227 service->AsWeakPtr(), extension_id)); | 228 service->AsWeakPtr(), extension_id)); |
| 228 } | 229 } |
| 229 } | 230 } |
| 230 | 231 |
| 231 bool ChromeRuntimeAPIDelegate::CheckForUpdates( | 232 bool ChromeRuntimeAPIDelegate::CheckForUpdates( |
| 232 const std::string& extension_id, | 233 const std::string& extension_id, |
| 233 const UpdateCheckCallback& callback) { | 234 const UpdateCheckCallback& callback) { |
| 234 ExtensionSystem* system = ExtensionSystem::Get(browser_context_); | 235 ExtensionSystem* system = ExtensionSystem::Get(browser_context_); |
| 235 ExtensionService* service = system->extension_service(); | 236 ExtensionService* service = system->extension_service(); |
| 236 ExtensionUpdater* updater = service->updater(); | 237 ExtensionUpdater* updater = service->updater(); |
| 237 if (!updater) { | 238 if (!updater) { |
| 238 return false; | 239 return false; |
| 239 } | 240 } |
| 240 | 241 |
| 241 UpdateCheckInfo& info = update_check_info_[extension_id]; | 242 UpdateCheckInfo& info = update_check_info_[extension_id]; |
| 242 | 243 |
| 243 // If not enough time has elapsed, or we have 10 or more outstanding calls, | 244 // If not enough time has elapsed, or we have 10 or more outstanding calls, |
| 244 // return a status of throttled. | 245 // return a status of throttled. |
| 245 if (info.backoff->ShouldRejectRequest() || info.callbacks.size() >= 10) { | 246 if (info.backoff->ShouldRejectRequest() || info.callbacks.size() >= 10) { |
| 246 base::ThreadTaskRunnerHandle::Get()->PostTask( | 247 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 247 FROM_HERE, | 248 FROM_HERE, base::BindOnce(callback, UpdateCheckResult( |
| 248 base::Bind(callback, UpdateCheckResult(true, kUpdateThrottled, ""))); | 249 true, kUpdateThrottled, ""))); |
| 249 } else { | 250 } else { |
| 250 info.callbacks.push_back(callback); | 251 info.callbacks.push_back(callback); |
| 251 updater->CheckExtensionSoon( | 252 updater->CheckExtensionSoon( |
| 252 extension_id, base::Bind(&ChromeRuntimeAPIDelegate::UpdateCheckComplete, | 253 extension_id, base::Bind(&ChromeRuntimeAPIDelegate::UpdateCheckComplete, |
| 253 base::Unretained(this), extension_id)); | 254 base::Unretained(this), extension_id)); |
| 254 } | 255 } |
| 255 return true; | 256 return true; |
| 256 } | 257 } |
| 257 | 258 |
| 258 void ChromeRuntimeAPIDelegate::OpenURL(const GURL& uninstall_url) { | 259 void ChromeRuntimeAPIDelegate::OpenURL(const GURL& uninstall_url) { |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 const UpdateCheckResult& result) { | 388 const UpdateCheckResult& result) { |
| 388 auto it = update_check_info_.find(extension_id); | 389 auto it = update_check_info_.find(extension_id); |
| 389 if (it == update_check_info_.end()) | 390 if (it == update_check_info_.end()) |
| 390 return; | 391 return; |
| 391 std::vector<UpdateCheckCallback> callbacks; | 392 std::vector<UpdateCheckCallback> callbacks; |
| 392 it->second.callbacks.swap(callbacks); | 393 it->second.callbacks.swap(callbacks); |
| 393 for (const auto& callback : callbacks) { | 394 for (const auto& callback : callbacks) { |
| 394 callback.Run(result); | 395 callback.Run(result); |
| 395 } | 396 } |
| 396 } | 397 } |
| OLD | NEW |