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

Unified Diff: ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc

Issue 1634653003: Abstract pref storage from net::SdchOwner (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@net_prefs
Patch Set: Fix iOS Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/cronet/android/cronet_url_request_context_adapter.cc ('k') | ios/crnet/crnet.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc
index fb662f29fda1dd49d89ae92693d28da4387125d6..1d3af81586e2bc3299d15476fa2daa037609b05c 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.cc
@@ -49,6 +49,109 @@
#include "net/url_request/url_request_intercepting_job_factory.h"
#include "net/url_request/url_request_job_factory_impl.h"
+namespace {
+
+// Connects the SdchOwner's storage to the prefs.
+class SdchOwnerPrefStorage : public net::SdchOwner::PrefStorage,
+ public PrefStore::Observer {
+ public:
+ explicit SdchOwnerPrefStorage(PersistentPrefStore* storage)
+ : storage_(storage), storage_key_("SDCH"), init_observer_(nullptr) {}
+ ~SdchOwnerPrefStorage() override {
+ if (init_observer_)
+ storage_->RemoveObserver(this);
+ }
+
+ ReadError GetReadError() const override {
+ PersistentPrefStore::PrefReadError error = storage_->GetReadError();
+
+ DCHECK_NE(
+ error,
+ PersistentPrefStore::PREF_READ_ERROR_ASYNCHRONOUS_TASK_INCOMPLETE);
+ DCHECK_NE(error, PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM);
+
+ switch (error) {
+ case PersistentPrefStore::PREF_READ_ERROR_NONE:
+ return PERSISTENCE_FAILURE_NONE;
+
+ case PersistentPrefStore::PREF_READ_ERROR_NO_FILE:
+ return PERSISTENCE_FAILURE_REASON_NO_FILE;
+
+ case PersistentPrefStore::PREF_READ_ERROR_JSON_PARSE:
+ case PersistentPrefStore::PREF_READ_ERROR_JSON_TYPE:
+ case PersistentPrefStore::PREF_READ_ERROR_FILE_OTHER:
+ case PersistentPrefStore::PREF_READ_ERROR_FILE_LOCKED:
+ case PersistentPrefStore::PREF_READ_ERROR_JSON_REPEAT:
+ return PERSISTENCE_FAILURE_REASON_READ_FAILED;
+
+ case PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED:
+ case PersistentPrefStore::PREF_READ_ERROR_FILE_NOT_SPECIFIED:
+ case PersistentPrefStore::PREF_READ_ERROR_ASYNCHRONOUS_TASK_INCOMPLETE:
+ case PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM:
+ default:
+ // We don't expect these other failures given our usage of prefs.
+ NOTREACHED();
+ return PERSISTENCE_FAILURE_REASON_OTHER;
+ }
+ }
+
+ bool GetValue(const base::DictionaryValue** result) const override {
+ const base::Value* result_value = nullptr;
+ if (!storage_->GetValue(storage_key_, &result_value))
+ return false;
+ return result_value->GetAsDictionary(result);
+ }
+
+ bool GetMutableValue(base::DictionaryValue** result) override {
+ base::Value* result_value = nullptr;
+ if (!storage_->GetMutableValue(storage_key_, &result_value))
+ return false;
+ return result_value->GetAsDictionary(result);
+ }
+
+ void SetValue(scoped_ptr<base::DictionaryValue> value) override {
+ storage_->SetValue(storage_key_, std::move(value),
+ WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
+ }
+
+ void ReportValueChanged() override {
+ storage_->ReportValueChanged(storage_key_,
+ WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
+ }
+
+ bool IsInitializationComplete() override {
+ return storage_->IsInitializationComplete();
+ }
+
+ void StartObservingInit(net::SdchOwner* observer) override {
+ DCHECK(!init_observer_);
+ init_observer_ = observer;
+ storage_->AddObserver(this);
+ }
+
+ void StopObservingInit() override {
+ DCHECK(init_observer_);
+ init_observer_ = nullptr;
+ storage_->RemoveObserver(this);
+ }
+
+ private:
+ // PrefStore::Observer implementation.
+ void OnPrefValueChanged(const std::string& key) override {}
+ void OnInitializationCompleted(bool succeeded) override {
+ init_observer_->OnPrefStorageInitializationComplete(succeeded);
+ }
+
+ PersistentPrefStore* storage_; // Non-owning.
+ const std::string storage_key_;
+
+ net::SdchOwner* init_observer_; // Non-owning.
+
+ DISALLOW_COPY_AND_ASSIGN(SdchOwnerPrefStorage);
+};
+
+} // namespace
+
ChromeBrowserStateImplIOData::Handle::Handle(
ios::ChromeBrowserState* browser_state)
: io_data_(new ChromeBrowserStateImplIOData),
@@ -341,7 +444,8 @@ void ChromeBrowserStateImplIOData::InitializeInternal(
sdch_manager_.reset(new net::SdchManager);
sdch_policy_.reset(new net::SdchOwner(sdch_manager_.get(), main_context));
main_context->set_sdch_manager(sdch_manager_.get());
- sdch_policy_->EnablePersistentStorage(network_json_store_.get());
+ sdch_policy_->EnablePersistentStorage(
+ make_scoped_ptr(new SdchOwnerPrefStorage(network_json_store_.get())));
lazy_params_.reset();
}
« no previous file with comments | « components/cronet/android/cronet_url_request_context_adapter.cc ('k') | ios/crnet/crnet.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698