| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/chromeos/power/extension_event_observer.h" | 5 #include "chrome/browser/chromeos/power/extension_event_observer.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 bool ExtensionEventObserver::TestApi::WillDelaySuspendForExtensionHost( | 48 bool ExtensionEventObserver::TestApi::WillDelaySuspendForExtensionHost( |
| 49 extensions::ExtensionHost* host) { | 49 extensions::ExtensionHost* host) { |
| 50 if (!parent_) | 50 if (!parent_) |
| 51 return false; | 51 return false; |
| 52 | 52 |
| 53 return parent_->keepalive_sources_.contains(host); | 53 return parent_->keepalive_sources_.contains(host); |
| 54 } | 54 } |
| 55 | 55 |
| 56 struct ExtensionEventObserver::KeepaliveSources { | 56 struct ExtensionEventObserver::KeepaliveSources { |
| 57 std::set<int> unacked_push_messages; | 57 std::set<int> unacked_push_messages; |
| 58 std::set<uint64> pending_network_requests; | 58 std::set<uint64_t> pending_network_requests; |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 ExtensionEventObserver::ExtensionEventObserver() | 61 ExtensionEventObserver::ExtensionEventObserver() |
| 62 : should_delay_suspend_(true), | 62 : should_delay_suspend_(true), |
| 63 suspend_is_pending_(false), | 63 suspend_is_pending_(false), |
| 64 suspend_keepalive_count_(0), | 64 suspend_keepalive_count_(0), |
| 65 weak_factory_(this) { | 65 weak_factory_(this) { |
| 66 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, | 66 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, |
| 67 content::NotificationService::AllBrowserContextsAndSources()); | 67 content::NotificationService::AllBrowserContextsAndSources()); |
| 68 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, | 68 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 DCHECK(keepalive_sources_.contains(host)); | 167 DCHECK(keepalive_sources_.contains(host)); |
| 168 | 168 |
| 169 if (keepalive_sources_.get(host)->unacked_push_messages.erase(event_id) > 0) { | 169 if (keepalive_sources_.get(host)->unacked_push_messages.erase(event_id) > 0) { |
| 170 --suspend_keepalive_count_; | 170 --suspend_keepalive_count_; |
| 171 MaybeReportSuspendReadiness(); | 171 MaybeReportSuspendReadiness(); |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 | 174 |
| 175 void ExtensionEventObserver::OnNetworkRequestStarted( | 175 void ExtensionEventObserver::OnNetworkRequestStarted( |
| 176 const extensions::ExtensionHost* host, | 176 const extensions::ExtensionHost* host, |
| 177 uint64 request_id) { | 177 uint64_t request_id) { |
| 178 DCHECK(keepalive_sources_.contains(host)); | 178 DCHECK(keepalive_sources_.contains(host)); |
| 179 | 179 |
| 180 KeepaliveSources* sources = keepalive_sources_.get(host); | 180 KeepaliveSources* sources = keepalive_sources_.get(host); |
| 181 | 181 |
| 182 // We only care about network requests that were started while a push message | 182 // We only care about network requests that were started while a push message |
| 183 // is pending. This is an indication that the network request is related to | 183 // is pending. This is an indication that the network request is related to |
| 184 // the push message. | 184 // the push message. |
| 185 if (sources->unacked_push_messages.empty()) | 185 if (sources->unacked_push_messages.empty()) |
| 186 return; | 186 return; |
| 187 | 187 |
| 188 sources->pending_network_requests.insert(request_id); | 188 sources->pending_network_requests.insert(request_id); |
| 189 ++suspend_keepalive_count_; | 189 ++suspend_keepalive_count_; |
| 190 } | 190 } |
| 191 | 191 |
| 192 void ExtensionEventObserver::OnNetworkRequestDone( | 192 void ExtensionEventObserver::OnNetworkRequestDone( |
| 193 const extensions::ExtensionHost* host, | 193 const extensions::ExtensionHost* host, |
| 194 uint64 request_id) { | 194 uint64_t request_id) { |
| 195 DCHECK(keepalive_sources_.contains(host)); | 195 DCHECK(keepalive_sources_.contains(host)); |
| 196 | 196 |
| 197 if (keepalive_sources_.get(host)->pending_network_requests.erase(request_id) > | 197 if (keepalive_sources_.get(host)->pending_network_requests.erase(request_id) > |
| 198 0) { | 198 0) { |
| 199 --suspend_keepalive_count_; | 199 --suspend_keepalive_count_; |
| 200 MaybeReportSuspendReadiness(); | 200 MaybeReportSuspendReadiness(); |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 void ExtensionEventObserver::SuspendImminent() { | 204 void ExtensionEventObserver::SuspendImminent() { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 if (!suspend_is_pending_ || suspend_keepalive_count_ > 0 || | 263 if (!suspend_is_pending_ || suspend_keepalive_count_ > 0 || |
| 264 power_manager_callback_.is_null()) | 264 power_manager_callback_.is_null()) |
| 265 return; | 265 return; |
| 266 | 266 |
| 267 suspend_is_pending_ = false; | 267 suspend_is_pending_ = false; |
| 268 power_manager_callback_.Run(); | 268 power_manager_callback_.Run(); |
| 269 power_manager_callback_.Reset(); | 269 power_manager_callback_.Reset(); |
| 270 } | 270 } |
| 271 | 271 |
| 272 } // namespace chromeos | 272 } // namespace chromeos |
| OLD | NEW |