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

Side by Side Diff: net/http/transport_security_persister.cc

Issue 1127963002: Implement lossy pref behavior for JsonPrefStore. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@prefs-fix-flags
Patch Set: Created 5 years, 7 months 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/http/transport_security_persister.h" 5 #include "net/http/transport_security_persister.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 88
89 } // namespace 89 } // namespace
90 90
91 TransportSecurityPersister::TransportSecurityPersister( 91 TransportSecurityPersister::TransportSecurityPersister(
92 TransportSecurityState* state, 92 TransportSecurityState* state,
93 const base::FilePath& profile_path, 93 const base::FilePath& profile_path,
94 const scoped_refptr<base::SequencedTaskRunner>& background_runner, 94 const scoped_refptr<base::SequencedTaskRunner>& background_runner,
95 bool readonly) 95 bool readonly)
96 : transport_security_state_(state), 96 : transport_security_state_(state),
97 writer_(profile_path.AppendASCII("TransportSecurity"), background_runner), 97 writer_(new base::ImportantFileWriterImpl(
98 profile_path.AppendASCII("TransportSecurity"),
99 background_runner)),
98 foreground_runner_(base::MessageLoop::current()->message_loop_proxy()), 100 foreground_runner_(base::MessageLoop::current()->message_loop_proxy()),
99 background_runner_(background_runner), 101 background_runner_(background_runner),
100 readonly_(readonly), 102 readonly_(readonly),
101 weak_ptr_factory_(this) { 103 weak_ptr_factory_(this) {
102 transport_security_state_->SetDelegate(this); 104 transport_security_state_->SetDelegate(this);
103 105
104 base::PostTaskAndReplyWithResult( 106 base::PostTaskAndReplyWithResult(
105 background_runner_.get(), FROM_HERE, 107 background_runner_.get(), FROM_HERE,
106 base::Bind(&LoadState, writer_.path()), 108 base::Bind(&LoadState, writer_->path()),
107 base::Bind(&TransportSecurityPersister::CompleteLoad, 109 base::Bind(&TransportSecurityPersister::CompleteLoad,
108 weak_ptr_factory_.GetWeakPtr())); 110 weak_ptr_factory_.GetWeakPtr()));
109 } 111 }
110 112
111 TransportSecurityPersister::~TransportSecurityPersister() { 113 TransportSecurityPersister::~TransportSecurityPersister() {
112 DCHECK(foreground_runner_->RunsTasksOnCurrentThread()); 114 DCHECK(foreground_runner_->RunsTasksOnCurrentThread());
113 115
114 if (writer_.HasPendingWrite()) 116 if (writer_->HasPendingWrite())
115 writer_.DoScheduledWrite(); 117 writer_->DoScheduledWrite();
116 118
117 transport_security_state_->SetDelegate(NULL); 119 transport_security_state_->SetDelegate(NULL);
118 } 120 }
119 121
120 void TransportSecurityPersister::StateIsDirty( 122 void TransportSecurityPersister::StateIsDirty(
121 TransportSecurityState* state) { 123 TransportSecurityState* state) {
122 DCHECK(foreground_runner_->RunsTasksOnCurrentThread()); 124 DCHECK(foreground_runner_->RunsTasksOnCurrentThread());
123 DCHECK_EQ(transport_security_state_, state); 125 DCHECK_EQ(transport_security_state_, state);
124 126
125 if (!readonly_) 127 if (!readonly_)
126 writer_.ScheduleWrite(this); 128 writer_->ScheduleWrite(this);
127 } 129 }
128 130
129 bool TransportSecurityPersister::SerializeData(std::string* output) { 131 bool TransportSecurityPersister::SerializeData(std::string* output) {
130 DCHECK(foreground_runner_->RunsTasksOnCurrentThread()); 132 DCHECK(foreground_runner_->RunsTasksOnCurrentThread());
131 133
132 base::DictionaryValue toplevel; 134 base::DictionaryValue toplevel;
133 base::Time now = base::Time::Now(); 135 base::Time now = base::Time::Now();
134 TransportSecurityState::Iterator state(*transport_security_state_); 136 TransportSecurityState::Iterator state(*transport_security_state_);
135 for (; state.HasNext(); state.Advance()) { 137 for (; state.HasNext(); state.Advance()) {
136 const std::string& hostname = state.hostname(); 138 const std::string& hostname = state.hostname();
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 bool dirty = false; 314 bool dirty = false;
313 if (!LoadEntries(state, &dirty)) { 315 if (!LoadEntries(state, &dirty)) {
314 LOG(ERROR) << "Failed to deserialize state: " << state; 316 LOG(ERROR) << "Failed to deserialize state: " << state;
315 return; 317 return;
316 } 318 }
317 if (dirty) 319 if (dirty)
318 StateIsDirty(transport_security_state_); 320 StateIsDirty(transport_security_state_);
319 } 321 }
320 322
321 } // namespace net 323 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698