Index: content/browser/loader/power_save_block_resource_throttle.cc |
diff --git a/content/browser/loader/power_save_block_resource_throttle.cc b/content/browser/loader/power_save_block_resource_throttle.cc |
index 8518f396315cd67d3e81bfff9b7f2a79402e0b65..0c38ae904f014d12c6366997366c99608e3215c0 100644 |
--- a/content/browser/loader/power_save_block_resource_throttle.cc |
+++ b/content/browser/loader/power_save_block_resource_throttle.cc |
@@ -4,22 +4,59 @@ |
#include "content/browser/loader/power_save_block_resource_throttle.h" |
+#include "base/bind.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/message_loop.h" |
#include "content/public/browser/power_save_blocker.h" |
namespace content { |
-PowerSaveBlockResourceThrottle::PowerSaveBlockResourceThrottle( |
- const std::string& reason) { |
- power_save_blocker_ = PowerSaveBlocker::Create( |
- PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, reason); |
+namespace { |
+ |
+const int kPowerSaveBlockDelaySeconds = 30; |
+ |
+} // namespace |
+ |
+class PowerSaveBlockResourceThrottle::PowerSaveBlockerOwner { |
darin (slow to review)
2013/02/12 19:20:05
I don't understand why you bothered to create this
hashimoto
2013/02/13 08:02:35
I was trying to introduce more complicated mechani
|
+ public: |
+ PowerSaveBlockerOwner() |
+ : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
+ // Delay PowerSaveBlocker activation to dismiss small requests. |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&PowerSaveBlockerOwner::ActivatePowerSaveBlocker, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::TimeDelta::FromSeconds(kPowerSaveBlockDelaySeconds)); |
+ } |
+ |
+ ~PowerSaveBlockerOwner() {} |
+ |
+ void ActivatePowerSaveBlocker() { |
+ power_save_blocker_ = PowerSaveBlocker::Create( |
+ PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
+ "Uploading data."); |
+ } |
+ |
+ private: |
+ scoped_ptr<PowerSaveBlocker> power_save_blocker_; |
+ base::WeakPtrFactory<PowerSaveBlockerOwner> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PowerSaveBlockerOwner); |
+}; |
+ |
+PowerSaveBlockResourceThrottle::PowerSaveBlockResourceThrottle() { |
} |
PowerSaveBlockResourceThrottle::~PowerSaveBlockResourceThrottle() { |
} |
+void PowerSaveBlockResourceThrottle::WillStartRequest(bool* defer) { |
+ power_save_blocker_owner_.reset(new PowerSaveBlockerOwner()); |
+} |
+ |
void PowerSaveBlockResourceThrottle::WillProcessResponse(bool* defer) { |
// Stop blocking power save after request finishes. |
- power_save_blocker_.reset(); |
+ power_save_blocker_owner_.reset(); |
} |
} // namespace content |