summaryrefslogtreecommitdiffstats
path: root/chrome/browser/strict_transport_security_persister.cc
diff options
context:
space:
mode:
authorabarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-05 14:21:09 +0000
committerabarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-05 14:21:09 +0000
commit77f6fb43d125edea5fe8b76d663de95098baf1de (patch)
tree3d0edff4af0ca2e5aea5b4520cf31526b249036e /chrome/browser/strict_transport_security_persister.cc
parent78d4c52c925f79756e5c1cc8ae1095cdf61f3745 (diff)
downloadchromium_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.cc74
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());
+}