diff options
author | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-05 14:21:09 +0000 |
---|---|---|
committer | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-05 14:21:09 +0000 |
commit | 77f6fb43d125edea5fe8b76d663de95098baf1de (patch) | |
tree | 3d0edff4af0ca2e5aea5b4520cf31526b249036e /chrome/browser/strict_transport_security_persister.cc | |
parent | 78d4c52c925f79756e5c1cc8ae1095cdf61f3745 (diff) | |
download | chromium_src-77f6fb43d125edea5fe8b76d663de95098baf1de.zip chromium_src-77f6fb43d125edea5fe8b76d663de95098baf1de.tar.gz chromium_src-77f6fb43d125edea5fe8b76d663de95098baf1de.tar.bz2 |
Rename X-Force-TLS to Strict-Transport-Security.
Also, remove StrictTransportSecurity code from SSLPolicy because that code
doesn't work.
R=agl
Review URL: http://codereview.chromium.org/198035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25577 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/strict_transport_security_persister.cc')
-rw-r--r-- | chrome/browser/strict_transport_security_persister.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/chrome/browser/strict_transport_security_persister.cc b/chrome/browser/strict_transport_security_persister.cc new file mode 100644 index 0000000..c9120ad --- /dev/null +++ b/chrome/browser/strict_transport_security_persister.cc @@ -0,0 +1,74 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/strict_transport_security_persister.h" + +#include "base/file_path.h" +#include "base/file_util.h" +#include "base/message_loop.h" +#include "base/path_service.h" +#include "base/thread.h" +#include "chrome/common/chrome_paths.h" +#include "net/base/strict_transport_security_state.h" + +StrictTransportSecurityPersister::StrictTransportSecurityPersister( + net::StrictTransportSecurityState* state, + base::Thread* file_thread, + const FilePath& profile_path) + : state_is_dirty_(false), + strict_transport_security_state_(state), + file_thread_(file_thread), + state_file_(profile_path.Append( + FILE_PATH_LITERAL("StrictTransportSecurity"))) { + state->SetDelegate(this); + + Task* task = NewRunnableMethod(this, + &StrictTransportSecurityPersister::LoadState); + file_thread->message_loop()->PostDelayedTask(FROM_HERE, task, + 1000 /* 1 second */); +} + +void StrictTransportSecurityPersister::LoadState() { + // Runs on |file_thread_| + AutoLock locked_(lock_); + DCHECK(file_thread_->message_loop() == MessageLoop::current()); + + std::string state; + if (!file_util::ReadFileToString(state_file_, &state)) + return; + + strict_transport_security_state_->Deserialise(state); +} + +void StrictTransportSecurityPersister::StateIsDirty( + net::StrictTransportSecurityState* state) { + // Runs on arbitary thread, may not block nor reenter + // |strict_transport_security_state_|. + AutoLock locked_(lock_); + DCHECK(state == strict_transport_security_state_); + + if (state_is_dirty_) + return; // we already have a serialisation scheduled + + Task* task = NewRunnableMethod(this, + &StrictTransportSecurityPersister::SerialiseState); + file_thread_->message_loop()->PostDelayedTask(FROM_HERE, task, + 1000 /* 1 second */); + state_is_dirty_ = true; +} + +void StrictTransportSecurityPersister::SerialiseState() { + // Runs on |file_thread_| + AutoLock locked_(lock_); + DCHECK(file_thread_->message_loop() == MessageLoop::current()); + + DCHECK(state_is_dirty_); + state_is_dirty_ = false; + + std::string state; + if (!strict_transport_security_state_->Serialise(&state)) + return; + + file_util::WriteFile(state_file_, state.data(), state.size()); +} |