| OLD | NEW |
| 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 "chrome/browser/extensions/api/preference/preference_api.h" | 5 #include "chrome/browser/extensions/api/preference/preference_api.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/lazy_instance.h" | 13 #include "base/lazy_instance.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ptr_util.h" |
| 15 #include "base/memory/singleton.h" | 16 #include "base/memory/singleton.h" |
| 16 #include "base/stl_util.h" | |
| 17 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
| 18 #include "base/values.h" | 18 #include "base/values.h" |
| 19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
| 20 #include "chrome/browser/chrome_notification_types.h" | 20 #include "chrome/browser/chrome_notification_types.h" |
| 21 #include "chrome/browser/extensions/api/content_settings/content_settings_servic
e.h" | 21 #include "chrome/browser/extensions/api/content_settings/content_settings_servic
e.h" |
| 22 #include "chrome/browser/extensions/api/preference/preference_api_constants.h" | 22 #include "chrome/browser/extensions/api/preference/preference_api_constants.h" |
| 23 #include "chrome/browser/extensions/api/preference/preference_helpers.h" | 23 #include "chrome/browser/extensions/api/preference/preference_helpers.h" |
| 24 #include "chrome/browser/extensions/api/proxy/proxy_api.h" | 24 #include "chrome/browser/extensions/api/proxy/proxy_api.h" |
| 25 #include "chrome/browser/extensions/extension_service.h" | 25 #include "chrome/browser/extensions/extension_service.h" |
| 26 #include "chrome/browser/net/prediction_options.h" | 26 #include "chrome/browser/net/prediction_options.h" |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 if (it != event_mapping_.end()) { | 258 if (it != event_mapping_.end()) { |
| 259 *event_name = it->second.pref_name; | 259 *event_name = it->second.pref_name; |
| 260 *permission = it->second.read_permission; | 260 *permission = it->second.read_permission; |
| 261 return true; | 261 return true; |
| 262 } | 262 } |
| 263 return false; | 263 return false; |
| 264 } | 264 } |
| 265 | 265 |
| 266 PrefTransformerInterface* FindTransformerForBrowserPref( | 266 PrefTransformerInterface* FindTransformerForBrowserPref( |
| 267 const std::string& browser_pref) { | 267 const std::string& browser_pref) { |
| 268 std::map<std::string, PrefTransformerInterface*>::iterator it = | 268 auto it = transformers_.find(browser_pref); |
| 269 transformers_.find(browser_pref); | |
| 270 if (it != transformers_.end()) | 269 if (it != transformers_.end()) |
| 271 return it->second; | 270 return it->second.get(); |
| 272 else | 271 else |
| 273 return identity_transformer_.get(); | 272 return identity_transformer_.get(); |
| 274 } | 273 } |
| 275 | 274 |
| 276 private: | 275 private: |
| 277 friend struct base::DefaultSingletonTraits<PrefMapping>; | 276 friend struct base::DefaultSingletonTraits<PrefMapping>; |
| 278 | 277 |
| 279 PrefMapping() { | 278 PrefMapping() { |
| 280 identity_transformer_.reset(new IdentityPrefTransformer()); | 279 identity_transformer_.reset(new IdentityPrefTransformer()); |
| 281 for (size_t i = 0; i < arraysize(kPrefMapping); ++i) { | 280 for (size_t i = 0; i < arraysize(kPrefMapping); ++i) { |
| 282 mapping_[kPrefMapping[i].extension_pref] = | 281 mapping_[kPrefMapping[i].extension_pref] = |
| 283 PrefMapData(kPrefMapping[i].browser_pref, | 282 PrefMapData(kPrefMapping[i].browser_pref, |
| 284 kPrefMapping[i].read_permission, | 283 kPrefMapping[i].read_permission, |
| 285 kPrefMapping[i].write_permission); | 284 kPrefMapping[i].write_permission); |
| 286 std::string event_name = | 285 std::string event_name = |
| 287 base::StringPrintf(kOnPrefChangeFormat, | 286 base::StringPrintf(kOnPrefChangeFormat, |
| 288 kPrefMapping[i].extension_pref); | 287 kPrefMapping[i].extension_pref); |
| 289 event_mapping_[kPrefMapping[i].browser_pref] = | 288 event_mapping_[kPrefMapping[i].browser_pref] = |
| 290 PrefMapData(event_name, | 289 PrefMapData(event_name, |
| 291 kPrefMapping[i].read_permission, | 290 kPrefMapping[i].read_permission, |
| 292 kPrefMapping[i].write_permission); | 291 kPrefMapping[i].write_permission); |
| 293 } | 292 } |
| 294 DCHECK_EQ(arraysize(kPrefMapping), mapping_.size()); | 293 DCHECK_EQ(arraysize(kPrefMapping), mapping_.size()); |
| 295 DCHECK_EQ(arraysize(kPrefMapping), event_mapping_.size()); | 294 DCHECK_EQ(arraysize(kPrefMapping), event_mapping_.size()); |
| 296 RegisterPrefTransformer(proxy_config::prefs::kProxy, | 295 RegisterPrefTransformer(proxy_config::prefs::kProxy, |
| 297 new ProxyPrefTransformer()); | 296 base::MakeUnique<ProxyPrefTransformer>()); |
| 298 RegisterPrefTransformer(prefs::kBlockThirdPartyCookies, | 297 RegisterPrefTransformer(prefs::kBlockThirdPartyCookies, |
| 299 new InvertBooleanTransformer()); | 298 base::MakeUnique<InvertBooleanTransformer>()); |
| 300 RegisterPrefTransformer(prefs::kNetworkPredictionOptions, | 299 RegisterPrefTransformer(prefs::kNetworkPredictionOptions, |
| 301 new NetworkPredictionTransformer()); | 300 base::MakeUnique<NetworkPredictionTransformer>()); |
| 302 } | 301 } |
| 303 | 302 |
| 304 ~PrefMapping() { | 303 ~PrefMapping() { |
| 305 base::STLDeleteContainerPairSecondPointers(transformers_.begin(), | |
| 306 transformers_.end()); | |
| 307 } | 304 } |
| 308 | 305 |
| 309 void RegisterPrefTransformer(const std::string& browser_pref, | 306 void RegisterPrefTransformer( |
| 310 PrefTransformerInterface* transformer) { | 307 const std::string& browser_pref, |
| 308 std::unique_ptr<PrefTransformerInterface> transformer) { |
| 311 DCHECK_EQ(0u, transformers_.count(browser_pref)) << | 309 DCHECK_EQ(0u, transformers_.count(browser_pref)) << |
| 312 "Trying to register pref transformer for " << browser_pref << " twice"; | 310 "Trying to register pref transformer for " << browser_pref << " twice"; |
| 313 transformers_[browser_pref] = transformer; | 311 transformers_[browser_pref] = std::move(transformer); |
| 314 } | 312 } |
| 315 | 313 |
| 316 struct PrefMapData { | 314 struct PrefMapData { |
| 317 PrefMapData() | 315 PrefMapData() |
| 318 : read_permission(APIPermission::kInvalid), | 316 : read_permission(APIPermission::kInvalid), |
| 319 write_permission(APIPermission::kInvalid) {} | 317 write_permission(APIPermission::kInvalid) {} |
| 320 | 318 |
| 321 PrefMapData(const std::string& pref_name, | 319 PrefMapData(const std::string& pref_name, |
| 322 APIPermission::ID read, | 320 APIPermission::ID read, |
| 323 APIPermission::ID write) | 321 APIPermission::ID write) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 337 | 335 |
| 338 typedef std::map<std::string, PrefMapData> PrefMap; | 336 typedef std::map<std::string, PrefMapData> PrefMap; |
| 339 | 337 |
| 340 // Mapping from extension pref keys to browser pref keys and permissions. | 338 // Mapping from extension pref keys to browser pref keys and permissions. |
| 341 PrefMap mapping_; | 339 PrefMap mapping_; |
| 342 | 340 |
| 343 // Mapping from browser pref keys to extension event names and permissions. | 341 // Mapping from browser pref keys to extension event names and permissions. |
| 344 PrefMap event_mapping_; | 342 PrefMap event_mapping_; |
| 345 | 343 |
| 346 // Mapping from browser pref keys to transformers. | 344 // Mapping from browser pref keys to transformers. |
| 347 std::map<std::string, PrefTransformerInterface*> transformers_; | 345 std::map<std::string, std::unique_ptr<PrefTransformerInterface>> |
| 346 transformers_; |
| 348 | 347 |
| 349 std::unique_ptr<PrefTransformerInterface> identity_transformer_; | 348 std::unique_ptr<PrefTransformerInterface> identity_transformer_; |
| 350 | 349 |
| 351 DISALLOW_COPY_AND_ASSIGN(PrefMapping); | 350 DISALLOW_COPY_AND_ASSIGN(PrefMapping); |
| 352 }; | 351 }; |
| 353 | 352 |
| 354 } // namespace | 353 } // namespace |
| 355 | 354 |
| 356 PreferenceEventRouter::PreferenceEventRouter(Profile* profile) | 355 PreferenceEventRouter::PreferenceEventRouter(Profile* profile) |
| 357 : profile_(profile) { | 356 : profile_(profile) { |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) { | 796 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) { |
| 798 return false; | 797 return false; |
| 799 } | 798 } |
| 800 | 799 |
| 801 PreferenceAPI::Get(GetProfile()) | 800 PreferenceAPI::Get(GetProfile()) |
| 802 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); | 801 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); |
| 803 return true; | 802 return true; |
| 804 } | 803 } |
| 805 | 804 |
| 806 } // namespace extensions | 805 } // namespace extensions |
| OLD | NEW |