summaryrefslogtreecommitdiffstats
path: root/chrome/browser/internal_auth.cc
diff options
context:
space:
mode:
authordilmah@chromium.org <dilmah@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 10:10:29 +0000
committerdilmah@chromium.org <dilmah@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 10:10:29 +0000
commite234b11aee841dcce3a9c48ed62883669a2259da (patch)
treeb668f25ae3abf1b6f960cba3a579bbb383dd38e2 /chrome/browser/internal_auth.cc
parent10398a6053ffe9ce18deb17d186d107fbe729533 (diff)
downloadchromium_src-e234b11aee841dcce3a9c48ed62883669a2259da.zip
chromium_src-e234b11aee841dcce3a9c48ed62883669a2259da.tar.gz
chromium_src-e234b11aee841dcce3a9c48ed62883669a2259da.tar.bz2
Fix behaviour of internal token generation in case of wakeup.
websocket-to-TCP proxy uses this token service for authorization purposes. When device goes into sleep then timers stop to be invoked, thus key stops to be regenerated. So after wakeup key appears to be outdated, leading to failure to generate token. Fixed this. BUG=chromium-os:20307 TEST=Manual Review URL: http://codereview.chromium.org/7780027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100895 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/internal_auth.cc')
-rw-r--r--chrome/browser/internal_auth.cc22
1 files changed, 8 insertions, 14 deletions
diff --git a/chrome/browser/internal_auth.cc b/chrome/browser/internal_auth.cc
index 76e32b4..faa44e1 100644
--- a/chrome/browser/internal_auth.cc
+++ b/chrome/browser/internal_auth.cc
@@ -16,7 +16,6 @@
#include "base/string_util.h"
#include "base/threading/thread_checker.h"
#include "base/time.h"
-#include "base/timer.h"
#include "base/values.h"
#include "content/browser/browser_thread.h"
#include "crypto/hmac.h"
@@ -342,16 +341,7 @@ class InternalAuthGenerationService : public base::ThreadChecker {
void GenerateNewKey() {
DCHECK(CalledOnValidThread());
- if (!timer_.IsRunning()) {
- timer_.Start(FROM_HERE,
- base::TimeDelta::FromMicroseconds(
- kKeyRegenerationSoftTicks * kTickUs),
- this,
- &InternalAuthGenerationService::GenerateNewKey);
- }
-
- scoped_ptr<crypto::HMAC> new_engine(
- new crypto::HMAC(crypto::HMAC::SHA256));
+ scoped_ptr<crypto::HMAC> new_engine(new crypto::HMAC(crypto::HMAC::SHA256));
std::string key = base::RandBytesAsString(kKeySizeInBytes);
if (!new_engine->Init(key))
return;
@@ -374,8 +364,13 @@ class InternalAuthGenerationService : public base::ThreadChecker {
int64 current_tick = GetCurrentTick();
if (!used_ticks_.empty() && used_ticks_.back() > current_tick)
current_tick = used_ticks_.back();
- if (current_tick > key_regeneration_tick_ + kKeyRegenerationHardTicks)
- return 0;
+ for (bool first_iteration = true;; first_iteration = false) {
+ if (current_tick < key_regeneration_tick_ + kKeyRegenerationHardTicks)
+ break;
+ if (!first_iteration)
+ return 0;
+ GenerateNewKey();
+ }
// Forget outdated ticks if any.
used_ticks_.erase(
@@ -426,7 +421,6 @@ class InternalAuthGenerationService : public base::ThreadChecker {
}
scoped_ptr<crypto::HMAC> engine_;
- base::RepeatingTimer<InternalAuthGenerationService> timer_;
int64 key_regeneration_tick_;
std::deque<int64> used_ticks_;