Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: chrome/browser/strict_transport_security_persister.cc

Issue 342068: Third patch in getting rid of caching MessageLoop pointers and always using C... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/strict_transport_security_persister.h" 5 #include "chrome/browser/strict_transport_security_persister.h"
6 6
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/thread.h" 11 #include "chrome/browser/chrome_thread.h"
12 #include "chrome/common/chrome_paths.h" 12 #include "chrome/common/chrome_paths.h"
13 #include "net/base/strict_transport_security_state.h" 13 #include "net/base/strict_transport_security_state.h"
14 14
15 StrictTransportSecurityPersister::StrictTransportSecurityPersister( 15 StrictTransportSecurityPersister::StrictTransportSecurityPersister(
16 net::StrictTransportSecurityState* state, 16 net::StrictTransportSecurityState* state,
17 base::Thread* file_thread,
18 const FilePath& profile_path) 17 const FilePath& profile_path)
19 : state_is_dirty_(false), 18 : state_is_dirty_(false),
20 strict_transport_security_state_(state), 19 strict_transport_security_state_(state),
21 file_thread_(file_thread),
22 state_file_(profile_path.Append( 20 state_file_(profile_path.Append(
23 FILE_PATH_LITERAL("StrictTransportSecurity"))) { 21 FILE_PATH_LITERAL("StrictTransportSecurity"))) {
24 state->SetDelegate(this); 22 state->SetDelegate(this);
25 23
26 Task* task = NewRunnableMethod(this, 24 Task* task = NewRunnableMethod(this,
27 &StrictTransportSecurityPersister::LoadState); 25 &StrictTransportSecurityPersister::LoadState);
28 file_thread->message_loop()->PostDelayedTask(FROM_HERE, task, 26 ChromeThread::PostDelayedTask(ChromeThread::FILE, FROM_HERE, task, 1000);
29 1000 /* 1 second */);
30 } 27 }
31 28
32 StrictTransportSecurityPersister::~StrictTransportSecurityPersister() { 29 StrictTransportSecurityPersister::~StrictTransportSecurityPersister() {
33 strict_transport_security_state_->SetDelegate(NULL); 30 strict_transport_security_state_->SetDelegate(NULL);
34 } 31 }
35 32
36 void StrictTransportSecurityPersister::LoadState() { 33 void StrictTransportSecurityPersister::LoadState() {
37 // Runs on |file_thread_|
38 AutoLock locked_(lock_); 34 AutoLock locked_(lock_);
39 DCHECK(file_thread_->message_loop() == MessageLoop::current()); 35 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
40 36
41 std::string state; 37 std::string state;
42 if (!file_util::ReadFileToString(state_file_, &state)) 38 if (!file_util::ReadFileToString(state_file_, &state))
43 return; 39 return;
44 40
45 strict_transport_security_state_->Deserialise(state); 41 strict_transport_security_state_->Deserialise(state);
46 } 42 }
47 43
48 void StrictTransportSecurityPersister::StateIsDirty( 44 void StrictTransportSecurityPersister::StateIsDirty(
49 net::StrictTransportSecurityState* state) { 45 net::StrictTransportSecurityState* state) {
50 // Runs on arbitary thread, may not block nor reenter 46 // Runs on arbitary thread, may not block nor reenter
51 // |strict_transport_security_state_|. 47 // |strict_transport_security_state_|.
52 AutoLock locked_(lock_); 48 AutoLock locked_(lock_);
53 DCHECK(state == strict_transport_security_state_); 49 DCHECK(state == strict_transport_security_state_);
54 50
55 if (state_is_dirty_) 51 if (state_is_dirty_)
56 return; // we already have a serialisation scheduled 52 return; // we already have a serialisation scheduled
57 53
58 Task* task = NewRunnableMethod(this, 54 Task* task = NewRunnableMethod(this,
59 &StrictTransportSecurityPersister::SerialiseState); 55 &StrictTransportSecurityPersister::SerialiseState);
60 file_thread_->message_loop()->PostDelayedTask(FROM_HERE, task, 56 ChromeThread::PostDelayedTask(ChromeThread::FILE, FROM_HERE, task, 1000);
61 1000 /* 1 second */);
62 state_is_dirty_ = true; 57 state_is_dirty_ = true;
63 } 58 }
64 59
65 void StrictTransportSecurityPersister::SerialiseState() { 60 void StrictTransportSecurityPersister::SerialiseState() {
66 // Runs on |file_thread_|
67 AutoLock locked_(lock_); 61 AutoLock locked_(lock_);
68 DCHECK(file_thread_->message_loop() == MessageLoop::current()); 62 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
69 63
70 DCHECK(state_is_dirty_); 64 DCHECK(state_is_dirty_);
71 state_is_dirty_ = false; 65 state_is_dirty_ = false;
72 66
73 std::string state; 67 std::string state;
74 if (!strict_transport_security_state_->Serialise(&state)) 68 if (!strict_transport_security_state_->Serialise(&state))
75 return; 69 return;
76 70
77 file_util::WriteFile(state_file_, state.data(), state.size()); 71 file_util::WriteFile(state_file_, state.data(), state.size());
78 } 72 }
OLDNEW
« no previous file with comments | « chrome/browser/strict_transport_security_persister.h ('k') | chrome/browser/sync/profile_sync_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698