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

Side by Side Diff: extensions/browser/extension_prefs.cc

Issue 598173003: Run clang-modernize -use-nullptr over src/extensions/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/browser/extension_prefs.h" 5 #include "extensions/browser/extension_prefs.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/prefs/pref_notifier.h" 10 #include "base/prefs/pref_notifier.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 const std::string& extension_id) : 204 const std::string& extension_id) :
205 DictionaryPrefUpdate(service, pref_names::kExtensions), 205 DictionaryPrefUpdate(service, pref_names::kExtensions),
206 extension_id_(extension_id) {} 206 extension_id_(extension_id) {}
207 207
208 virtual ~ScopedExtensionPrefUpdate() { 208 virtual ~ScopedExtensionPrefUpdate() {
209 } 209 }
210 210
211 // DictionaryPrefUpdate overrides: 211 // DictionaryPrefUpdate overrides:
212 virtual base::DictionaryValue* Get() OVERRIDE { 212 virtual base::DictionaryValue* Get() OVERRIDE {
213 base::DictionaryValue* dict = DictionaryPrefUpdate::Get(); 213 base::DictionaryValue* dict = DictionaryPrefUpdate::Get();
214 base::DictionaryValue* extension = NULL; 214 base::DictionaryValue* extension = nullptr;
215 if (!dict->GetDictionary(extension_id_, &extension)) { 215 if (!dict->GetDictionary(extension_id_, &extension)) {
216 // Extension pref does not exist, create it. 216 // Extension pref does not exist, create it.
217 extension = new base::DictionaryValue(); 217 extension = new base::DictionaryValue();
218 dict->SetWithoutPathExpansion(extension_id_, extension); 218 dict->SetWithoutPathExpansion(extension_id_, extension);
219 } 219 }
220 return extension; 220 return extension;
221 } 221 }
222 222
223 private: 223 private:
224 const std::string extension_id_; 224 const std::string extension_id_;
(...skipping 17 matching lines...) Expand all
242 ExtensionPrefValueMap* value_map, 242 ExtensionPrefValueMap* value_map,
243 const std::string& extension_id, 243 const std::string& extension_id,
244 ExtensionPrefsScope scope) { 244 ExtensionPrefsScope scope) {
245 std::string scope_string; 245 std::string scope_string;
246 if (!pref_names::ScopeToPrefName(scope, &scope_string)) 246 if (!pref_names::ScopeToPrefName(scope, &scope_string))
247 return; 247 return;
248 std::string key = extension_id + "." + scope_string; 248 std::string key = extension_id + "." + scope_string;
249 249
250 const base::DictionaryValue* source_dict = 250 const base::DictionaryValue* source_dict =
251 prefs->pref_service()->GetDictionary(pref_names::kExtensions); 251 prefs->pref_service()->GetDictionary(pref_names::kExtensions);
252 const base::DictionaryValue* preferences = NULL; 252 const base::DictionaryValue* preferences = nullptr;
253 if (!source_dict->GetDictionary(key, &preferences)) 253 if (!source_dict->GetDictionary(key, &preferences))
254 return; 254 return;
255 255
256 for (base::DictionaryValue::Iterator iter(*preferences); !iter.IsAtEnd(); 256 for (base::DictionaryValue::Iterator iter(*preferences); !iter.IsAtEnd();
257 iter.Advance()) { 257 iter.Advance()) {
258 value_map->SetExtensionPref( 258 value_map->SetExtensionPref(
259 extension_id, iter.key(), scope, iter.value().DeepCopy()); 259 extension_id, iter.key(), scope, iter.value().DeepCopy());
260 } 260 }
261 } 261 }
262 262
(...skipping 27 matching lines...) Expand all
290 DCHECK(crx_file::id_util::IdIsValid(extension_id_)); 290 DCHECK(crx_file::id_util::IdIsValid(extension_id_));
291 } 291 }
292 292
293 template <typename T, base::Value::Type type_enum_value> 293 template <typename T, base::Value::Type type_enum_value>
294 ExtensionPrefs::ScopedUpdate<T, type_enum_value>::~ScopedUpdate() { 294 ExtensionPrefs::ScopedUpdate<T, type_enum_value>::~ScopedUpdate() {
295 } 295 }
296 296
297 template <typename T, base::Value::Type type_enum_value> 297 template <typename T, base::Value::Type type_enum_value>
298 T* ExtensionPrefs::ScopedUpdate<T, type_enum_value>::Get() { 298 T* ExtensionPrefs::ScopedUpdate<T, type_enum_value>::Get() {
299 base::DictionaryValue* dict = update_.Get(); 299 base::DictionaryValue* dict = update_.Get();
300 base::DictionaryValue* extension = NULL; 300 base::DictionaryValue* extension = nullptr;
301 base::Value* key_value = NULL; 301 base::Value* key_value = nullptr;
302 if (!dict->GetDictionary(extension_id_, &extension) || 302 if (!dict->GetDictionary(extension_id_, &extension) ||
303 !extension->Get(key_, &key_value)) { 303 !extension->Get(key_, &key_value)) {
304 return NULL; 304 return nullptr;
305 } 305 }
306 return key_value->GetType() == type_enum_value ? 306 return key_value->GetType() == type_enum_value ? static_cast<T*>(key_value)
307 static_cast<T*>(key_value) : 307 : nullptr;
308 NULL;
309 } 308 }
310 309
311 template <typename T, base::Value::Type type_enum_value> 310 template <typename T, base::Value::Type type_enum_value>
312 T* ExtensionPrefs::ScopedUpdate<T, type_enum_value>::Create() { 311 T* ExtensionPrefs::ScopedUpdate<T, type_enum_value>::Create() {
313 base::DictionaryValue* dict = update_.Get(); 312 base::DictionaryValue* dict = update_.Get();
314 base::DictionaryValue* extension = NULL; 313 base::DictionaryValue* extension = nullptr;
315 base::Value* key_value = NULL; 314 base::Value* key_value = nullptr;
316 T* value_as_t = NULL; 315 T* value_as_t = nullptr;
317 if (!dict->GetDictionary(extension_id_, &extension)) { 316 if (!dict->GetDictionary(extension_id_, &extension)) {
318 extension = new base::DictionaryValue; 317 extension = new base::DictionaryValue;
319 dict->SetWithoutPathExpansion(extension_id_, extension); 318 dict->SetWithoutPathExpansion(extension_id_, extension);
320 } 319 }
321 if (!extension->Get(key_, &key_value)) { 320 if (!extension->Get(key_, &key_value)) {
322 value_as_t = new T; 321 value_as_t = new T;
323 extension->SetWithoutPathExpansion(key_, value_as_t); 322 extension->SetWithoutPathExpansion(key_, value_as_t);
324 } else { 323 } else {
325 CHECK(key_value->GetType() == type_enum_value); 324 CHECK(key_value->GetType() == type_enum_value);
326 value_as_t = static_cast<T*>(key_value); 325 value_as_t = static_cast<T*>(key_value);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 395
397 void ExtensionPrefs::MakePathsRelative() { 396 void ExtensionPrefs::MakePathsRelative() {
398 const base::DictionaryValue* dict = 397 const base::DictionaryValue* dict =
399 prefs_->GetDictionary(pref_names::kExtensions); 398 prefs_->GetDictionary(pref_names::kExtensions);
400 if (!dict || dict->empty()) 399 if (!dict || dict->empty())
401 return; 400 return;
402 401
403 // Collect all extensions ids with absolute paths in |absolute_keys|. 402 // Collect all extensions ids with absolute paths in |absolute_keys|.
404 std::set<std::string> absolute_keys; 403 std::set<std::string> absolute_keys;
405 for (base::DictionaryValue::Iterator i(*dict); !i.IsAtEnd(); i.Advance()) { 404 for (base::DictionaryValue::Iterator i(*dict); !i.IsAtEnd(); i.Advance()) {
406 const base::DictionaryValue* extension_dict = NULL; 405 const base::DictionaryValue* extension_dict = nullptr;
407 if (!i.value().GetAsDictionary(&extension_dict)) 406 if (!i.value().GetAsDictionary(&extension_dict))
408 continue; 407 continue;
409 int location_value; 408 int location_value;
410 if (extension_dict->GetInteger(kPrefLocation, &location_value) && 409 if (extension_dict->GetInteger(kPrefLocation, &location_value) &&
411 Manifest::IsUnpackedLocation( 410 Manifest::IsUnpackedLocation(
412 static_cast<Manifest::Location>(location_value))) { 411 static_cast<Manifest::Location>(location_value))) {
413 // Unpacked extensions can have absolute paths. 412 // Unpacked extensions can have absolute paths.
414 continue; 413 continue;
415 } 414 }
416 base::FilePath::StringType path_string; 415 base::FilePath::StringType path_string;
417 if (!extension_dict->GetString(kPrefPath, &path_string)) 416 if (!extension_dict->GetString(kPrefPath, &path_string))
418 continue; 417 continue;
419 base::FilePath path(path_string); 418 base::FilePath path(path_string);
420 if (path.IsAbsolute()) 419 if (path.IsAbsolute())
421 absolute_keys.insert(i.key()); 420 absolute_keys.insert(i.key());
422 } 421 }
423 if (absolute_keys.empty()) 422 if (absolute_keys.empty())
424 return; 423 return;
425 424
426 // Fix these paths. 425 // Fix these paths.
427 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions); 426 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions);
428 base::DictionaryValue* update_dict = update.Get(); 427 base::DictionaryValue* update_dict = update.Get();
429 for (std::set<std::string>::iterator i = absolute_keys.begin(); 428 for (std::set<std::string>::iterator i = absolute_keys.begin();
430 i != absolute_keys.end(); ++i) { 429 i != absolute_keys.end(); ++i) {
431 base::DictionaryValue* extension_dict = NULL; 430 base::DictionaryValue* extension_dict = nullptr;
432 if (!update_dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) { 431 if (!update_dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) {
433 NOTREACHED() << "Control should never reach here for extension " << *i; 432 NOTREACHED() << "Control should never reach here for extension " << *i;
434 continue; 433 continue;
435 } 434 }
436 base::FilePath::StringType path_string; 435 base::FilePath::StringType path_string;
437 extension_dict->GetString(kPrefPath, &path_string); 436 extension_dict->GetString(kPrefPath, &path_string);
438 base::FilePath path(path_string); 437 base::FilePath path(path_string);
439 extension_dict->SetString(kPrefPath, 438 extension_dict->SetString(kPrefPath,
440 MakePathRelative(install_directory_, path)); 439 MakePathRelative(install_directory_, path));
441 } 440 }
442 } 441 }
443 442
444 const base::DictionaryValue* ExtensionPrefs::GetExtensionPref( 443 const base::DictionaryValue* ExtensionPrefs::GetExtensionPref(
445 const std::string& extension_id) const { 444 const std::string& extension_id) const {
446 const base::DictionaryValue* extensions = 445 const base::DictionaryValue* extensions =
447 prefs_->GetDictionary(pref_names::kExtensions); 446 prefs_->GetDictionary(pref_names::kExtensions);
448 const base::DictionaryValue* extension_dict = NULL; 447 const base::DictionaryValue* extension_dict = nullptr;
449 if (!extensions || 448 if (!extensions ||
450 !extensions->GetDictionary(extension_id, &extension_dict)) { 449 !extensions->GetDictionary(extension_id, &extension_dict)) {
451 return NULL; 450 return nullptr;
452 } 451 }
453 return extension_dict; 452 return extension_dict;
454 } 453 }
455 454
456 void ExtensionPrefs::UpdateExtensionPref(const std::string& extension_id, 455 void ExtensionPrefs::UpdateExtensionPref(const std::string& extension_id,
457 const std::string& key, 456 const std::string& key,
458 base::Value* data_value) { 457 base::Value* data_value) {
459 if (!crx_file::id_util::IdIsValid(extension_id)) { 458 if (!crx_file::id_util::IdIsValid(extension_id)) {
460 NOTREACHED() << "Invalid extension_id " << extension_id; 459 NOTREACHED() << "Invalid extension_id " << extension_id;
461 return; 460 return;
462 } 461 }
463 ScopedExtensionPrefUpdate update(prefs_, extension_id); 462 ScopedExtensionPrefUpdate update(prefs_, extension_id);
464 if (data_value) 463 if (data_value)
465 update->Set(key, data_value); 464 update->Set(key, data_value);
466 else 465 else
467 update->Remove(key, NULL); 466 update->Remove(key, nullptr);
468 } 467 }
469 468
470 void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) { 469 void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) {
471 extension_pref_value_map_->UnregisterExtension(extension_id); 470 extension_pref_value_map_->UnregisterExtension(extension_id);
472 FOR_EACH_OBSERVER(ExtensionPrefsObserver, 471 FOR_EACH_OBSERVER(ExtensionPrefsObserver,
473 observer_list_, 472 observer_list_,
474 OnExtensionPrefsDeleted(extension_id)); 473 OnExtensionPrefsDeleted(extension_id));
475 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions); 474 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions);
476 base::DictionaryValue* dict = update.Get(); 475 base::DictionaryValue* dict = update.Get();
477 dict->Remove(extension_id, NULL); 476 dict->Remove(extension_id, nullptr);
478 } 477 }
479 478
480 bool ExtensionPrefs::ReadPrefAsBoolean(const std::string& extension_id, 479 bool ExtensionPrefs::ReadPrefAsBoolean(const std::string& extension_id,
481 const std::string& pref_key, 480 const std::string& pref_key,
482 bool* out_value) const { 481 bool* out_value) const {
483 const base::DictionaryValue* ext = GetExtensionPref(extension_id); 482 const base::DictionaryValue* ext = GetExtensionPref(extension_id);
484 if (!ext || !ext->GetBoolean(pref_key, out_value)) 483 if (!ext || !ext->GetBoolean(pref_key, out_value))
485 return false; 484 return false;
486 485
487 return true; 486 return true;
(...skipping 16 matching lines...) Expand all
504 if (!ext || !ext->GetString(pref_key, out_value)) 503 if (!ext || !ext->GetString(pref_key, out_value))
505 return false; 504 return false;
506 505
507 return true; 506 return true;
508 } 507 }
509 508
510 bool ExtensionPrefs::ReadPrefAsList(const std::string& extension_id, 509 bool ExtensionPrefs::ReadPrefAsList(const std::string& extension_id,
511 const std::string& pref_key, 510 const std::string& pref_key,
512 const base::ListValue** out_value) const { 511 const base::ListValue** out_value) const {
513 const base::DictionaryValue* ext = GetExtensionPref(extension_id); 512 const base::DictionaryValue* ext = GetExtensionPref(extension_id);
514 const base::ListValue* out = NULL; 513 const base::ListValue* out = nullptr;
515 if (!ext || !ext->GetList(pref_key, &out)) 514 if (!ext || !ext->GetList(pref_key, &out))
516 return false; 515 return false;
517 if (out_value) 516 if (out_value)
518 *out_value = out; 517 *out_value = out;
519 518
520 return true; 519 return true;
521 } 520 }
522 521
523 bool ExtensionPrefs::ReadPrefAsDictionary( 522 bool ExtensionPrefs::ReadPrefAsDictionary(
524 const std::string& extension_id, 523 const std::string& extension_id,
525 const std::string& pref_key, 524 const std::string& pref_key,
526 const base::DictionaryValue** out_value) const { 525 const base::DictionaryValue** out_value) const {
527 const base::DictionaryValue* ext = GetExtensionPref(extension_id); 526 const base::DictionaryValue* ext = GetExtensionPref(extension_id);
528 const base::DictionaryValue* out = NULL; 527 const base::DictionaryValue* out = nullptr;
529 if (!ext || !ext->GetDictionary(pref_key, &out)) 528 if (!ext || !ext->GetDictionary(pref_key, &out))
530 return false; 529 return false;
531 if (out_value) 530 if (out_value)
532 *out_value = out; 531 *out_value = out;
533 532
534 return true; 533 return true;
535 } 534 }
536 535
537 bool ExtensionPrefs::HasPrefForExtension( 536 bool ExtensionPrefs::HasPrefForExtension(
538 const std::string& extension_id) const { 537 const std::string& extension_id) const {
539 return GetExtensionPref(extension_id) != NULL; 538 return GetExtensionPref(extension_id) != nullptr;
540 } 539 }
541 540
542 bool ExtensionPrefs::ReadPrefAsURLPatternSet(const std::string& extension_id, 541 bool ExtensionPrefs::ReadPrefAsURLPatternSet(const std::string& extension_id,
543 const std::string& pref_key, 542 const std::string& pref_key,
544 URLPatternSet* result, 543 URLPatternSet* result,
545 int valid_schemes) { 544 int valid_schemes) {
546 const base::ListValue* value = NULL; 545 const base::ListValue* value = nullptr;
547 if (!ReadPrefAsList(extension_id, pref_key, &value)) 546 if (!ReadPrefAsList(extension_id, pref_key, &value))
548 return false; 547 return false;
549 548
550 bool allow_file_access = AllowFileAccess(extension_id); 549 bool allow_file_access = AllowFileAccess(extension_id);
551 return result->Populate(*value, valid_schemes, allow_file_access, NULL); 550 return result->Populate(*value, valid_schemes, allow_file_access, nullptr);
552 } 551 }
553 552
554 void ExtensionPrefs::SetExtensionPrefURLPatternSet( 553 void ExtensionPrefs::SetExtensionPrefURLPatternSet(
555 const std::string& extension_id, 554 const std::string& extension_id,
556 const std::string& pref_key, 555 const std::string& pref_key,
557 const URLPatternSet& new_value) { 556 const URLPatternSet& new_value) {
558 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release()); 557 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release());
559 } 558 }
560 559
561 bool ExtensionPrefs::ReadPrefAsBooleanAndReturn( 560 bool ExtensionPrefs::ReadPrefAsBooleanAndReturn(
562 const std::string& extension_id, 561 const std::string& extension_id,
563 const std::string& pref_key) const { 562 const std::string& pref_key) const {
564 bool out_value = false; 563 bool out_value = false;
565 return ReadPrefAsBoolean(extension_id, pref_key, &out_value) && out_value; 564 return ReadPrefAsBoolean(extension_id, pref_key, &out_value) && out_value;
566 } 565 }
567 566
568 PermissionSet* ExtensionPrefs::ReadPrefAsPermissionSet( 567 PermissionSet* ExtensionPrefs::ReadPrefAsPermissionSet(
569 const std::string& extension_id, 568 const std::string& extension_id,
570 const std::string& pref_key) { 569 const std::string& pref_key) {
571 if (!GetExtensionPref(extension_id)) 570 if (!GetExtensionPref(extension_id))
572 return NULL; 571 return nullptr;
573 572
574 // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet() 573 // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet()
575 // for api_values format. 574 // for api_values format.
576 APIPermissionSet apis; 575 APIPermissionSet apis;
577 const base::ListValue* api_values = NULL; 576 const base::ListValue* api_values = nullptr;
578 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); 577 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs);
579 if (ReadPrefAsList(extension_id, api_pref, &api_values)) { 578 if (ReadPrefAsList(extension_id, api_pref, &api_values)) {
580 APIPermissionSet::ParseFromJSON(api_values, 579 APIPermissionSet::ParseFromJSON(api_values,
581 APIPermissionSet::kAllowInternalPermissions, 580 APIPermissionSet::kAllowInternalPermissions,
582 &apis, NULL, NULL); 581 &apis,
582 nullptr,
583 nullptr);
583 } 584 }
584 585
585 // Retrieve the Manifest Keys permissions. Please refer to 586 // Retrieve the Manifest Keys permissions. Please refer to
586 // |SetExtensionPrefPermissionSet| for manifest_permissions_values format. 587 // |SetExtensionPrefPermissionSet| for manifest_permissions_values format.
587 ManifestPermissionSet manifest_permissions; 588 ManifestPermissionSet manifest_permissions;
588 const base::ListValue* manifest_permissions_values = NULL; 589 const base::ListValue* manifest_permissions_values = nullptr;
589 std::string manifest_permission_pref = 590 std::string manifest_permission_pref =
590 JoinPrefs(pref_key, kPrefManifestPermissions); 591 JoinPrefs(pref_key, kPrefManifestPermissions);
591 if (ReadPrefAsList(extension_id, manifest_permission_pref, 592 if (ReadPrefAsList(extension_id, manifest_permission_pref,
592 &manifest_permissions_values)) { 593 &manifest_permissions_values)) {
593 ManifestPermissionSet::ParseFromJSON( 594 ManifestPermissionSet::ParseFromJSON(
594 manifest_permissions_values, &manifest_permissions, NULL, NULL); 595 manifest_permissions_values, &manifest_permissions, nullptr, nullptr);
595 } 596 }
596 597
597 // Retrieve the explicit host permissions. 598 // Retrieve the explicit host permissions.
598 URLPatternSet explicit_hosts; 599 URLPatternSet explicit_hosts;
599 ReadPrefAsURLPatternSet( 600 ReadPrefAsURLPatternSet(
600 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts), 601 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts),
601 &explicit_hosts, Extension::kValidHostPermissionSchemes); 602 &explicit_hosts, Extension::kValidHostPermissionSchemes);
602 603
603 // Retrieve the scriptable host permissions. 604 // Retrieve the scriptable host permissions.
604 URLPatternSet scriptable_hosts; 605 URLPatternSet scriptable_hosts;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 bool ExtensionPrefs::IsExternalExtensionAcknowledged( 680 bool ExtensionPrefs::IsExternalExtensionAcknowledged(
680 const std::string& extension_id) { 681 const std::string& extension_id) {
681 return ReadPrefAsBooleanAndReturn(extension_id, kPrefExternalAcknowledged); 682 return ReadPrefAsBooleanAndReturn(extension_id, kPrefExternalAcknowledged);
682 } 683 }
683 684
684 void ExtensionPrefs::AcknowledgeExternalExtension( 685 void ExtensionPrefs::AcknowledgeExternalExtension(
685 const std::string& extension_id) { 686 const std::string& extension_id) {
686 DCHECK(crx_file::id_util::IdIsValid(extension_id)); 687 DCHECK(crx_file::id_util::IdIsValid(extension_id));
687 UpdateExtensionPref(extension_id, kPrefExternalAcknowledged, 688 UpdateExtensionPref(extension_id, kPrefExternalAcknowledged,
688 new base::FundamentalValue(true)); 689 new base::FundamentalValue(true));
689 UpdateExtensionPref(extension_id, kPrefAcknowledgePromptCount, NULL); 690 UpdateExtensionPref(extension_id, kPrefAcknowledgePromptCount, nullptr);
690 } 691 }
691 692
692 bool ExtensionPrefs::IsBlacklistedExtensionAcknowledged( 693 bool ExtensionPrefs::IsBlacklistedExtensionAcknowledged(
693 const std::string& extension_id) { 694 const std::string& extension_id) {
694 return ReadPrefAsBooleanAndReturn(extension_id, kPrefBlacklistAcknowledged); 695 return ReadPrefAsBooleanAndReturn(extension_id, kPrefBlacklistAcknowledged);
695 } 696 }
696 697
697 void ExtensionPrefs::AcknowledgeBlacklistedExtension( 698 void ExtensionPrefs::AcknowledgeBlacklistedExtension(
698 const std::string& extension_id) { 699 const std::string& extension_id) {
699 DCHECK(crx_file::id_util::IdIsValid(extension_id)); 700 DCHECK(crx_file::id_util::IdIsValid(extension_id));
700 UpdateExtensionPref(extension_id, kPrefBlacklistAcknowledged, 701 UpdateExtensionPref(extension_id, kPrefBlacklistAcknowledged,
701 new base::FundamentalValue(true)); 702 new base::FundamentalValue(true));
702 UpdateExtensionPref(extension_id, kPrefAcknowledgePromptCount, NULL); 703 UpdateExtensionPref(extension_id, kPrefAcknowledgePromptCount, nullptr);
703 } 704 }
704 705
705 bool ExtensionPrefs::IsExternalInstallFirstRun( 706 bool ExtensionPrefs::IsExternalInstallFirstRun(
706 const std::string& extension_id) { 707 const std::string& extension_id) {
707 return ReadPrefAsBooleanAndReturn(extension_id, kPrefExternalInstallFirstRun); 708 return ReadPrefAsBooleanAndReturn(extension_id, kPrefExternalInstallFirstRun);
708 } 709 }
709 710
710 void ExtensionPrefs::SetExternalInstallFirstRun( 711 void ExtensionPrefs::SetExternalInstallFirstRun(
711 const std::string& extension_id) { 712 const std::string& extension_id) {
712 DCHECK(crx_file::id_util::IdIsValid(extension_id)); 713 DCHECK(crx_file::id_util::IdIsValid(extension_id));
713 UpdateExtensionPref(extension_id, kPrefExternalInstallFirstRun, 714 UpdateExtensionPref(extension_id, kPrefExternalInstallFirstRun,
714 new base::FundamentalValue(true)); 715 new base::FundamentalValue(true));
715 } 716 }
716 717
717 bool ExtensionPrefs::HasWipeoutBeenAcknowledged( 718 bool ExtensionPrefs::HasWipeoutBeenAcknowledged(
718 const std::string& extension_id) { 719 const std::string& extension_id) {
719 return ReadPrefAsBooleanAndReturn(extension_id, kPrefWipeoutAcknowledged); 720 return ReadPrefAsBooleanAndReturn(extension_id, kPrefWipeoutAcknowledged);
720 } 721 }
721 722
722 void ExtensionPrefs::SetWipeoutAcknowledged( 723 void ExtensionPrefs::SetWipeoutAcknowledged(
723 const std::string& extension_id, 724 const std::string& extension_id,
724 bool value) { 725 bool value) {
725 UpdateExtensionPref(extension_id, 726 UpdateExtensionPref(extension_id,
726 kPrefWipeoutAcknowledged, 727 kPrefWipeoutAcknowledged,
727 value ? new base::FundamentalValue(value) : NULL); 728 value ? new base::FundamentalValue(value) : nullptr);
728 } 729 }
729 730
730 bool ExtensionPrefs::HasSettingsApiBubbleBeenAcknowledged( 731 bool ExtensionPrefs::HasSettingsApiBubbleBeenAcknowledged(
731 const std::string& extension_id) { 732 const std::string& extension_id) {
732 return ReadPrefAsBooleanAndReturn(extension_id, 733 return ReadPrefAsBooleanAndReturn(extension_id,
733 kPrefSettingsBubbleAcknowledged); 734 kPrefSettingsBubbleAcknowledged);
734 } 735 }
735 736
736 void ExtensionPrefs::SetSettingsApiBubbleBeenAcknowledged( 737 void ExtensionPrefs::SetSettingsApiBubbleBeenAcknowledged(
737 const std::string& extension_id, 738 const std::string& extension_id,
738 bool value) { 739 bool value) {
739 UpdateExtensionPref(extension_id, 740 UpdateExtensionPref(extension_id,
740 kPrefSettingsBubbleAcknowledged, 741 kPrefSettingsBubbleAcknowledged,
741 value ? new base::FundamentalValue(value) : NULL); 742 value ? new base::FundamentalValue(value) : nullptr);
742 } 743 }
743 744
744 bool ExtensionPrefs::HasNtpOverriddenBubbleBeenAcknowledged( 745 bool ExtensionPrefs::HasNtpOverriddenBubbleBeenAcknowledged(
745 const std::string& extension_id) { 746 const std::string& extension_id) {
746 return ReadPrefAsBooleanAndReturn(extension_id, kPrefNtpBubbleAcknowledged); 747 return ReadPrefAsBooleanAndReturn(extension_id, kPrefNtpBubbleAcknowledged);
747 } 748 }
748 749
749 void ExtensionPrefs::SetNtpOverriddenBubbleBeenAcknowledged( 750 void ExtensionPrefs::SetNtpOverriddenBubbleBeenAcknowledged(
750 const std::string& extension_id, 751 const std::string& extension_id,
751 bool value) { 752 bool value) {
752 UpdateExtensionPref(extension_id, 753 UpdateExtensionPref(extension_id,
753 kPrefNtpBubbleAcknowledged, 754 kPrefNtpBubbleAcknowledged,
754 value ? new base::FundamentalValue(value) : NULL); 755 value ? new base::FundamentalValue(value) : nullptr);
755 } 756 }
756 757
757 bool ExtensionPrefs::HasProxyOverriddenBubbleBeenAcknowledged( 758 bool ExtensionPrefs::HasProxyOverriddenBubbleBeenAcknowledged(
758 const std::string& extension_id) { 759 const std::string& extension_id) {
759 return ReadPrefAsBooleanAndReturn(extension_id, kPrefProxyBubbleAcknowledged); 760 return ReadPrefAsBooleanAndReturn(extension_id, kPrefProxyBubbleAcknowledged);
760 } 761 }
761 762
762 void ExtensionPrefs::SetProxyOverriddenBubbleBeenAcknowledged( 763 void ExtensionPrefs::SetProxyOverriddenBubbleBeenAcknowledged(
763 const std::string& extension_id, 764 const std::string& extension_id,
764 bool value) { 765 bool value) {
765 UpdateExtensionPref(extension_id, 766 UpdateExtensionPref(extension_id,
766 kPrefProxyBubbleAcknowledged, 767 kPrefProxyBubbleAcknowledged,
767 value ? new base::FundamentalValue(value) : NULL); 768 value ? new base::FundamentalValue(value) : nullptr);
768 } 769 }
769 770
770 bool ExtensionPrefs::SetAlertSystemFirstRun() { 771 bool ExtensionPrefs::SetAlertSystemFirstRun() {
771 if (prefs_->GetBoolean(pref_names::kAlertsInitialized)) { 772 if (prefs_->GetBoolean(pref_names::kAlertsInitialized)) {
772 return true; 773 return true;
773 } 774 }
774 prefs_->SetBoolean(pref_names::kAlertsInitialized, true); 775 prefs_->SetBoolean(pref_names::kAlertsInitialized, true);
775 return false; 776 return false;
776 } 777 }
777 778
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 break; 833 break;
833 case DISABLE_REASON_CLEAR: 834 case DISABLE_REASON_CLEAR:
834 new_value = Extension::DISABLE_NONE; 835 new_value = Extension::DISABLE_NONE;
835 break; 836 break;
836 } 837 }
837 838
838 if (old_value == new_value) // no change, return. 839 if (old_value == new_value) // no change, return.
839 return; 840 return;
840 841
841 if (new_value == Extension::DISABLE_NONE) { 842 if (new_value == Extension::DISABLE_NONE) {
842 UpdateExtensionPref(extension_id, kPrefDisableReasons, NULL); 843 UpdateExtensionPref(extension_id, kPrefDisableReasons, nullptr);
843 } else { 844 } else {
844 UpdateExtensionPref(extension_id, 845 UpdateExtensionPref(extension_id,
845 kPrefDisableReasons, 846 kPrefDisableReasons,
846 new base::FundamentalValue(new_value)); 847 new base::FundamentalValue(new_value));
847 } 848 }
848 849
849 FOR_EACH_OBSERVER(ExtensionPrefsObserver, 850 FOR_EACH_OBSERVER(ExtensionPrefsObserver,
850 observer_list_, 851 observer_list_,
851 OnExtensionDisableReasonsChanged(extension_id, new_value)); 852 OnExtensionDisableReasonsChanged(extension_id, new_value));
852 } 853 }
(...skipping 22 matching lines...) Expand all
875 } 876 }
876 877
877 void ExtensionPrefs::SetExtensionBlacklisted(const std::string& extension_id, 878 void ExtensionPrefs::SetExtensionBlacklisted(const std::string& extension_id,
878 bool is_blacklisted) { 879 bool is_blacklisted) {
879 bool currently_blacklisted = IsExtensionBlacklisted(extension_id); 880 bool currently_blacklisted = IsExtensionBlacklisted(extension_id);
880 if (is_blacklisted == currently_blacklisted) 881 if (is_blacklisted == currently_blacklisted)
881 return; 882 return;
882 883
883 // Always make sure the "acknowledged" bit is cleared since the blacklist bit 884 // Always make sure the "acknowledged" bit is cleared since the blacklist bit
884 // is changing. 885 // is changing.
885 UpdateExtensionPref(extension_id, kPrefBlacklistAcknowledged, NULL); 886 UpdateExtensionPref(extension_id, kPrefBlacklistAcknowledged, nullptr);
886 887
887 if (is_blacklisted) { 888 if (is_blacklisted) {
888 UpdateExtensionPref(extension_id, 889 UpdateExtensionPref(extension_id,
889 kPrefBlacklist, 890 kPrefBlacklist,
890 new base::FundamentalValue(true)); 891 new base::FundamentalValue(true));
891 } else { 892 } else {
892 UpdateExtensionPref(extension_id, kPrefBlacklist, NULL); 893 UpdateExtensionPref(extension_id, kPrefBlacklist, nullptr);
893 const base::DictionaryValue* dict = GetExtensionPref(extension_id); 894 const base::DictionaryValue* dict = GetExtensionPref(extension_id);
894 if (dict && dict->empty()) 895 if (dict && dict->empty())
895 DeleteExtensionPrefs(extension_id); 896 DeleteExtensionPrefs(extension_id);
896 } 897 }
897 } 898 }
898 899
899 bool ExtensionPrefs::IsExtensionBlacklisted(const std::string& id) const { 900 bool ExtensionPrefs::IsExtensionBlacklisted(const std::string& id) const {
900 const base::DictionaryValue* ext_prefs = GetExtensionPref(id); 901 const base::DictionaryValue* ext_prefs = GetExtensionPref(id);
901 return ext_prefs && IsBlacklistBitSet(ext_prefs); 902 return ext_prefs && IsBlacklistBitSet(ext_prefs);
902 } 903 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 const base::DictionaryValue* ext = GetExtensionPref(*ext_id); 1007 const base::DictionaryValue* ext = GetExtensionPref(*ext_id);
1007 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access)) 1008 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access))
1008 continue; 1009 continue;
1009 1010
1010 // Remove the full access bit (empty list will get trimmed). 1011 // Remove the full access bit (empty list will get trimmed).
1011 UpdateExtensionPref( 1012 UpdateExtensionPref(
1012 *ext_id, kPrefOldGrantedFullAccess, new base::ListValue()); 1013 *ext_id, kPrefOldGrantedFullAccess, new base::ListValue());
1013 1014
1014 // Add the plugin permission if the full access bit was set. 1015 // Add the plugin permission if the full access bit was set.
1015 if (full_access) { 1016 if (full_access) {
1016 const base::ListValue* apis = NULL; 1017 const base::ListValue* apis = nullptr;
1017 base::ListValue* new_apis = NULL; 1018 base::ListValue* new_apis = nullptr;
1018 1019
1019 std::string granted_apis = JoinPrefs(kPrefGrantedPermissions, kPrefAPIs); 1020 std::string granted_apis = JoinPrefs(kPrefGrantedPermissions, kPrefAPIs);
1020 if (ext->GetList(kPrefOldGrantedAPIs, &apis)) 1021 if (ext->GetList(kPrefOldGrantedAPIs, &apis))
1021 new_apis = apis->DeepCopy(); 1022 new_apis = apis->DeepCopy();
1022 else 1023 else
1023 new_apis = new base::ListValue(); 1024 new_apis = new base::ListValue();
1024 1025
1025 std::string plugin_name = info->GetByID(APIPermission::kPlugin)->name(); 1026 std::string plugin_name = info->GetByID(APIPermission::kPlugin)->name();
1026 new_apis->Append(new base::StringValue(plugin_name)); 1027 new_apis->Append(new base::StringValue(plugin_name));
1027 UpdateExtensionPref(*ext_id, granted_apis, new_apis); 1028 UpdateExtensionPref(*ext_id, granted_apis, new_apis);
1028 } 1029 }
1029 1030
1030 // The granted permissions originally only held the effective hosts, 1031 // The granted permissions originally only held the effective hosts,
1031 // which are a combination of host and user script host permissions. 1032 // which are a combination of host and user script host permissions.
1032 // We now maintain these lists separately. For migration purposes, it 1033 // We now maintain these lists separately. For migration purposes, it
1033 // does not matter how we treat the old effective hosts as long as the 1034 // does not matter how we treat the old effective hosts as long as the
1034 // new effective hosts will be the same, so we move them to explicit 1035 // new effective hosts will be the same, so we move them to explicit
1035 // host permissions. 1036 // host permissions.
1036 const base::ListValue* hosts = NULL; 1037 const base::ListValue* hosts = nullptr;
1037 std::string explicit_hosts = 1038 std::string explicit_hosts =
1038 JoinPrefs(kPrefGrantedPermissions, kPrefExplicitHosts); 1039 JoinPrefs(kPrefGrantedPermissions, kPrefExplicitHosts);
1039 if (ext->GetList(kPrefOldGrantedHosts, &hosts)) { 1040 if (ext->GetList(kPrefOldGrantedHosts, &hosts)) {
1040 UpdateExtensionPref( 1041 UpdateExtensionPref(
1041 *ext_id, explicit_hosts, hosts->DeepCopy()); 1042 *ext_id, explicit_hosts, hosts->DeepCopy());
1042 1043
1043 // We can get rid of the old one by setting it to an empty list. 1044 // We can get rid of the old one by setting it to an empty list.
1044 UpdateExtensionPref(*ext_id, kPrefOldGrantedHosts, new base::ListValue()); 1045 UpdateExtensionPref(*ext_id, kPrefOldGrantedHosts, new base::ListValue());
1045 } 1046 }
1046 } 1047 }
(...skipping 14 matching lines...) Expand all
1061 new_value = Extension::DISABLE_PERMISSIONS_INCREASE; 1062 new_value = Extension::DISABLE_PERMISSIONS_INCREASE;
1062 break; 1063 break;
1063 case Extension::DEPRECATED_DISABLE_RELOAD: 1064 case Extension::DEPRECATED_DISABLE_RELOAD:
1064 new_value = Extension::DISABLE_RELOAD; 1065 new_value = Extension::DISABLE_RELOAD;
1065 break; 1066 break;
1066 } 1067 }
1067 1068
1068 UpdateExtensionPref(*ext_id, kPrefDisableReasons, 1069 UpdateExtensionPref(*ext_id, kPrefDisableReasons,
1069 new base::FundamentalValue(new_value)); 1070 new base::FundamentalValue(new_value));
1070 // Remove the old disable reason. 1071 // Remove the old disable reason.
1071 UpdateExtensionPref(*ext_id, kDeprecatedPrefDisableReason, NULL); 1072 UpdateExtensionPref(*ext_id, kDeprecatedPrefDisableReason, nullptr);
1072 } 1073 }
1073 } 1074 }
1074 } 1075 }
1075 1076
1076 PermissionSet* ExtensionPrefs::GetGrantedPermissions( 1077 PermissionSet* ExtensionPrefs::GetGrantedPermissions(
1077 const std::string& extension_id) { 1078 const std::string& extension_id) {
1078 CHECK(crx_file::id_util::IdIsValid(extension_id)); 1079 CHECK(crx_file::id_util::IdIsValid(extension_id));
1079 return ReadPrefAsPermissionSet(extension_id, kPrefGrantedPermissions); 1080 return ReadPrefAsPermissionSet(extension_id, kPrefGrantedPermissions);
1080 } 1081 }
1081 1082
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 1308
1308 return version; 1309 return version;
1309 } 1310 }
1310 1311
1311 void ExtensionPrefs::UpdateManifest(const Extension* extension) { 1312 void ExtensionPrefs::UpdateManifest(const Extension* extension) {
1312 if (!Manifest::IsUnpackedLocation(extension->location())) { 1313 if (!Manifest::IsUnpackedLocation(extension->location())) {
1313 const base::DictionaryValue* extension_dict = 1314 const base::DictionaryValue* extension_dict =
1314 GetExtensionPref(extension->id()); 1315 GetExtensionPref(extension->id());
1315 if (!extension_dict) 1316 if (!extension_dict)
1316 return; 1317 return;
1317 const base::DictionaryValue* old_manifest = NULL; 1318 const base::DictionaryValue* old_manifest = nullptr;
1318 bool update_required = 1319 bool update_required =
1319 !extension_dict->GetDictionary(kPrefManifest, &old_manifest) || 1320 !extension_dict->GetDictionary(kPrefManifest, &old_manifest) ||
1320 !extension->manifest()->value()->Equals(old_manifest); 1321 !extension->manifest()->value()->Equals(old_manifest);
1321 if (update_required) { 1322 if (update_required) {
1322 UpdateExtensionPref(extension->id(), kPrefManifest, 1323 UpdateExtensionPref(extension->id(), kPrefManifest,
1323 extension->manifest()->value()->DeepCopy()); 1324 extension->manifest()->value()->DeepCopy());
1324 } 1325 }
1325 } 1326 }
1326 } 1327 }
1327 1328
(...skipping 15 matching lines...) Expand all
1343 } 1344 }
1344 1345
1345 // Only the following extension types have data saved in the preferences. 1346 // Only the following extension types have data saved in the preferences.
1346 if (location != Manifest::INTERNAL && 1347 if (location != Manifest::INTERNAL &&
1347 !Manifest::IsUnpackedLocation(location) && 1348 !Manifest::IsUnpackedLocation(location) &&
1348 !Manifest::IsExternalLocation(location)) { 1349 !Manifest::IsExternalLocation(location)) {
1349 NOTREACHED(); 1350 NOTREACHED();
1350 return scoped_ptr<ExtensionInfo>(); 1351 return scoped_ptr<ExtensionInfo>();
1351 } 1352 }
1352 1353
1353 const base::DictionaryValue* manifest = NULL; 1354 const base::DictionaryValue* manifest = nullptr;
1354 if (!Manifest::IsUnpackedLocation(location) && 1355 if (!Manifest::IsUnpackedLocation(location) &&
1355 !extension->GetDictionary(kPrefManifest, &manifest)) { 1356 !extension->GetDictionary(kPrefManifest, &manifest)) {
1356 LOG(WARNING) << "Missing manifest for extension " << extension_id; 1357 LOG(WARNING) << "Missing manifest for extension " << extension_id;
1357 // Just a warning for now. 1358 // Just a warning for now.
1358 } 1359 }
1359 1360
1360 base::FilePath::StringType path; 1361 base::FilePath::StringType path;
1361 if (!extension->GetString(kPrefPath, &path)) 1362 if (!extension->GetString(kPrefPath, &path))
1362 return scoped_ptr<ExtensionInfo>(); 1363 return scoped_ptr<ExtensionInfo>();
1363 1364
1364 // Make path absolute. Most (but not all) extension types have relative paths. 1365 // Make path absolute. Most (but not all) extension types have relative paths.
1365 if (!base::FilePath(path).IsAbsolute()) 1366 if (!base::FilePath(path).IsAbsolute())
1366 path = install_directory_.Append(path).value(); 1367 path = install_directory_.Append(path).value();
1367 1368
1368 return scoped_ptr<ExtensionInfo>(new ExtensionInfo( 1369 return scoped_ptr<ExtensionInfo>(new ExtensionInfo(
1369 manifest, extension_id, base::FilePath(path), location)); 1370 manifest, extension_id, base::FilePath(path), location));
1370 } 1371 }
1371 1372
1372 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledExtensionInfo( 1373 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledExtensionInfo(
1373 const std::string& extension_id) const { 1374 const std::string& extension_id) const {
1374 const base::DictionaryValue* ext = NULL; 1375 const base::DictionaryValue* ext = nullptr;
1375 const base::DictionaryValue* extensions = 1376 const base::DictionaryValue* extensions =
1376 prefs_->GetDictionary(pref_names::kExtensions); 1377 prefs_->GetDictionary(pref_names::kExtensions);
1377 if (!extensions || 1378 if (!extensions ||
1378 !extensions->GetDictionaryWithoutPathExpansion(extension_id, &ext)) 1379 !extensions->GetDictionaryWithoutPathExpansion(extension_id, &ext))
1379 return scoped_ptr<ExtensionInfo>(); 1380 return scoped_ptr<ExtensionInfo>();
1380 int state_value; 1381 int state_value;
1381 if (ext->GetInteger(kPrefState, &state_value) && 1382 if (ext->GetInteger(kPrefState, &state_value) &&
1382 state_value == Extension::EXTERNAL_EXTENSION_UNINSTALLED) { 1383 state_value == Extension::EXTERNAL_EXTENSION_UNINSTALLED) {
1383 LOG(WARNING) << "External extension with id " << extension_id 1384 LOG(WARNING) << "External extension with id " << extension_id
1384 << " has been uninstalled by the user"; 1385 << " has been uninstalled by the user";
(...skipping 24 matching lines...) Expand all
1409 } 1410 }
1410 1411
1411 scoped_ptr<ExtensionPrefs::ExtensionsInfo> 1412 scoped_ptr<ExtensionPrefs::ExtensionsInfo>
1412 ExtensionPrefs::GetUninstalledExtensionsInfo() const { 1413 ExtensionPrefs::GetUninstalledExtensionsInfo() const {
1413 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo); 1414 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo);
1414 1415
1415 const base::DictionaryValue* extensions = 1416 const base::DictionaryValue* extensions =
1416 prefs_->GetDictionary(pref_names::kExtensions); 1417 prefs_->GetDictionary(pref_names::kExtensions);
1417 for (base::DictionaryValue::Iterator extension_id(*extensions); 1418 for (base::DictionaryValue::Iterator extension_id(*extensions);
1418 !extension_id.IsAtEnd(); extension_id.Advance()) { 1419 !extension_id.IsAtEnd(); extension_id.Advance()) {
1419 const base::DictionaryValue* ext = NULL; 1420 const base::DictionaryValue* ext = nullptr;
1420 if (!crx_file::id_util::IdIsValid(extension_id.key()) || 1421 if (!crx_file::id_util::IdIsValid(extension_id.key()) ||
1421 !IsExternalExtensionUninstalled(extension_id.key()) || 1422 !IsExternalExtensionUninstalled(extension_id.key()) ||
1422 !extension_id.value().GetAsDictionary(&ext)) 1423 !extension_id.value().GetAsDictionary(&ext))
1423 continue; 1424 continue;
1424 1425
1425 scoped_ptr<ExtensionInfo> info = 1426 scoped_ptr<ExtensionInfo> info =
1426 GetInstalledInfoHelper(extension_id.key(), ext); 1427 GetInstalledInfoHelper(extension_id.key(), ext);
1427 if (info) 1428 if (info)
1428 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); 1429 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release()));
1429 } 1430 }
(...skipping 30 matching lines...) Expand all
1460 static_cast<int>(delay_reason)); 1461 static_cast<int>(delay_reason));
1461 1462
1462 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict); 1463 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict);
1463 } 1464 }
1464 1465
1465 bool ExtensionPrefs::RemoveDelayedInstallInfo( 1466 bool ExtensionPrefs::RemoveDelayedInstallInfo(
1466 const std::string& extension_id) { 1467 const std::string& extension_id) {
1467 if (!GetExtensionPref(extension_id)) 1468 if (!GetExtensionPref(extension_id))
1468 return false; 1469 return false;
1469 ScopedExtensionPrefUpdate update(prefs_, extension_id); 1470 ScopedExtensionPrefUpdate update(prefs_, extension_id);
1470 bool result = update->Remove(kDelayedInstallInfo, NULL); 1471 bool result = update->Remove(kDelayedInstallInfo, nullptr);
1471 return result; 1472 return result;
1472 } 1473 }
1473 1474
1474 bool ExtensionPrefs::FinishDelayedInstallInfo( 1475 bool ExtensionPrefs::FinishDelayedInstallInfo(
1475 const std::string& extension_id) { 1476 const std::string& extension_id) {
1476 CHECK(crx_file::id_util::IdIsValid(extension_id)); 1477 CHECK(crx_file::id_util::IdIsValid(extension_id));
1477 ScopedExtensionPrefUpdate update(prefs_, extension_id); 1478 ScopedExtensionPrefUpdate update(prefs_, extension_id);
1478 base::DictionaryValue* extension_dict = update.Get(); 1479 base::DictionaryValue* extension_dict = update.Get();
1479 base::DictionaryValue* pending_install_dict = NULL; 1480 base::DictionaryValue* pending_install_dict = nullptr;
1480 if (!extension_dict->GetDictionary(kDelayedInstallInfo, 1481 if (!extension_dict->GetDictionary(kDelayedInstallInfo,
1481 &pending_install_dict)) { 1482 &pending_install_dict)) {
1482 return false; 1483 return false;
1483 } 1484 }
1484 1485
1485 // Retrieve and clear transient values populated by SetDelayedInstallInfo(). 1486 // Retrieve and clear transient values populated by SetDelayedInstallInfo().
1486 // Also do any other data cleanup that makes sense. 1487 // Also do any other data cleanup that makes sense.
1487 std::string serialized_ordinal; 1488 std::string serialized_ordinal;
1488 syncer::StringOrdinal suggested_page_ordinal; 1489 syncer::StringOrdinal suggested_page_ordinal;
1489 bool needs_sort_ordinal = false; 1490 bool needs_sort_ordinal = false;
1490 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal, 1491 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal,
1491 &serialized_ordinal)) { 1492 &serialized_ordinal)) {
1492 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal); 1493 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal);
1493 needs_sort_ordinal = true; 1494 needs_sort_ordinal = true;
1494 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, NULL); 1495 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, nullptr);
1495 } 1496 }
1496 pending_install_dict->Remove(kDelayedInstallReason, NULL); 1497 pending_install_dict->Remove(kDelayedInstallReason, nullptr);
1497 1498
1498 const base::Time install_time = time_provider_->GetCurrentTime(); 1499 const base::Time install_time = time_provider_->GetCurrentTime();
1499 pending_install_dict->Set( 1500 pending_install_dict->Set(
1500 kPrefInstallTime, 1501 kPrefInstallTime,
1501 new base::StringValue( 1502 new base::StringValue(
1502 base::Int64ToString(install_time.ToInternalValue()))); 1503 base::Int64ToString(install_time.ToInternalValue())));
1503 1504
1504 // Some extension pref values are written conditionally. If they are not 1505 // Some extension pref values are written conditionally. If they are not
1505 // present in the delayed install data, they should be removed when the 1506 // present in the delayed install data, they should be removed when the
1506 // delayed install is committed. 1507 // delayed install is committed.
1507 extension_dict->Remove(kPrefEphemeralApp, NULL); 1508 extension_dict->Remove(kPrefEphemeralApp, nullptr);
1508 1509
1509 // Commit the delayed install data. 1510 // Commit the delayed install data.
1510 for (base::DictionaryValue::Iterator it(*pending_install_dict); !it.IsAtEnd(); 1511 for (base::DictionaryValue::Iterator it(*pending_install_dict); !it.IsAtEnd();
1511 it.Advance()) { 1512 it.Advance()) {
1512 extension_dict->Set(it.key(), it.value().DeepCopy()); 1513 extension_dict->Set(it.key(), it.value().DeepCopy());
1513 } 1514 }
1514 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal, 1515 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal,
1515 suggested_page_ordinal, extension_dict); 1516 suggested_page_ordinal, extension_dict);
1516 return true; 1517 return true;
1517 } 1518 }
1518 1519
1519 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo( 1520 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo(
1520 const std::string& extension_id) const { 1521 const std::string& extension_id) const {
1521 const base::DictionaryValue* extension_prefs = 1522 const base::DictionaryValue* extension_prefs =
1522 GetExtensionPref(extension_id); 1523 GetExtensionPref(extension_id);
1523 if (!extension_prefs) 1524 if (!extension_prefs)
1524 return scoped_ptr<ExtensionInfo>(); 1525 return scoped_ptr<ExtensionInfo>();
1525 1526
1526 const base::DictionaryValue* ext = NULL; 1527 const base::DictionaryValue* ext = nullptr;
1527 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) 1528 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext))
1528 return scoped_ptr<ExtensionInfo>(); 1529 return scoped_ptr<ExtensionInfo>();
1529 1530
1530 return GetInstalledInfoHelper(extension_id, ext); 1531 return GetInstalledInfoHelper(extension_id, ext);
1531 } 1532 }
1532 1533
1533 ExtensionPrefs::DelayReason ExtensionPrefs::GetDelayedInstallReason( 1534 ExtensionPrefs::DelayReason ExtensionPrefs::GetDelayedInstallReason(
1534 const std::string& extension_id) const { 1535 const std::string& extension_id) const {
1535 const base::DictionaryValue* extension_prefs = 1536 const base::DictionaryValue* extension_prefs =
1536 GetExtensionPref(extension_id); 1537 GetExtensionPref(extension_id);
1537 if (!extension_prefs) 1538 if (!extension_prefs)
1538 return DELAY_REASON_NONE; 1539 return DELAY_REASON_NONE;
1539 1540
1540 const base::DictionaryValue* ext = NULL; 1541 const base::DictionaryValue* ext = nullptr;
1541 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) 1542 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext))
1542 return DELAY_REASON_NONE; 1543 return DELAY_REASON_NONE;
1543 1544
1544 int delay_reason; 1545 int delay_reason;
1545 if (!ext->GetInteger(kDelayedInstallReason, &delay_reason)) 1546 if (!ext->GetInteger(kDelayedInstallReason, &delay_reason))
1546 return DELAY_REASON_NONE; 1547 return DELAY_REASON_NONE;
1547 1548
1548 return static_cast<DelayReason>(delay_reason); 1549 return static_cast<DelayReason>(delay_reason);
1549 } 1550 }
1550 1551
(...skipping 21 matching lines...) Expand all
1572 return true; 1573 return true;
1573 1574
1574 // Ephemerality was previously stored in the creation flags, so we must also 1575 // Ephemerality was previously stored in the creation flags, so we must also
1575 // check it for backcompatibility. 1576 // check it for backcompatibility.
1576 return (GetCreationFlags(extension_id) & Extension::IS_EPHEMERAL) != 0; 1577 return (GetCreationFlags(extension_id) & Extension::IS_EPHEMERAL) != 0;
1577 } 1578 }
1578 1579
1579 void ExtensionPrefs::OnEphemeralAppPromoted(const std::string& extension_id) { 1580 void ExtensionPrefs::OnEphemeralAppPromoted(const std::string& extension_id) {
1580 DCHECK(IsEphemeralApp(extension_id)); 1581 DCHECK(IsEphemeralApp(extension_id));
1581 1582
1582 UpdateExtensionPref(extension_id, kPrefEphemeralApp, NULL); 1583 UpdateExtensionPref(extension_id, kPrefEphemeralApp, nullptr);
1583 1584
1584 // Ephemerality was previously stored in the creation flags, so ensure the bit 1585 // Ephemerality was previously stored in the creation flags, so ensure the bit
1585 // is cleared. 1586 // is cleared.
1586 int creation_flags = Extension::NO_FLAGS; 1587 int creation_flags = Extension::NO_FLAGS;
1587 if (ReadPrefAsInteger(extension_id, kPrefCreationFlags, &creation_flags)) { 1588 if (ReadPrefAsInteger(extension_id, kPrefCreationFlags, &creation_flags)) {
1588 if (creation_flags & Extension::IS_EPHEMERAL) { 1589 if (creation_flags & Extension::IS_EPHEMERAL) {
1589 creation_flags &= ~static_cast<int>(Extension::IS_EPHEMERAL); 1590 creation_flags &= ~static_cast<int>(Extension::IS_EPHEMERAL);
1590 UpdateExtensionPref(extension_id, 1591 UpdateExtensionPref(extension_id,
1591 kPrefCreationFlags, 1592 kPrefCreationFlags,
1592 new base::FundamentalValue(creation_flags)); 1593 new base::FundamentalValue(creation_flags));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT; 1635 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT;
1635 if (WasInstalledByOem(extension_id)) 1636 if (WasInstalledByOem(extension_id))
1636 creation_flags |= Extension::WAS_INSTALLED_BY_OEM; 1637 creation_flags |= Extension::WAS_INSTALLED_BY_OEM;
1637 } 1638 }
1638 return creation_flags; 1639 return creation_flags;
1639 } 1640 }
1640 1641
1641 int ExtensionPrefs::GetDelayedInstallCreationFlags( 1642 int ExtensionPrefs::GetDelayedInstallCreationFlags(
1642 const std::string& extension_id) const { 1643 const std::string& extension_id) const {
1643 int creation_flags = Extension::NO_FLAGS; 1644 int creation_flags = Extension::NO_FLAGS;
1644 const base::DictionaryValue* delayed_info = NULL; 1645 const base::DictionaryValue* delayed_info = nullptr;
1645 if (ReadPrefAsDictionary(extension_id, kDelayedInstallInfo, &delayed_info)) { 1646 if (ReadPrefAsDictionary(extension_id, kDelayedInstallInfo, &delayed_info)) {
1646 delayed_info->GetInteger(kPrefCreationFlags, &creation_flags); 1647 delayed_info->GetInteger(kPrefCreationFlags, &creation_flags);
1647 } 1648 }
1648 return creation_flags; 1649 return creation_flags;
1649 } 1650 }
1650 1651
1651 bool ExtensionPrefs::WasInstalledByDefault( 1652 bool ExtensionPrefs::WasInstalledByDefault(
1652 const std::string& extension_id) const { 1653 const std::string& extension_id) const {
1653 const base::DictionaryValue* dictionary = GetExtensionPref(extension_id); 1654 const base::DictionaryValue* dictionary = GetExtensionPref(extension_id);
1654 bool result = false; 1655 bool result = false;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 ExtensionInfo* info = extensions_info->at(i).get(); 1722 ExtensionInfo* info = extensions_info->at(i).get();
1722 out->push_back(info->extension_id); 1723 out->push_back(info->extension_id);
1723 } 1724 }
1724 } 1725 }
1725 1726
1726 // static 1727 // static
1727 ExtensionIdList ExtensionPrefs::GetExtensionsFrom( 1728 ExtensionIdList ExtensionPrefs::GetExtensionsFrom(
1728 const PrefService* pref_service) { 1729 const PrefService* pref_service) {
1729 ExtensionIdList result; 1730 ExtensionIdList result;
1730 1731
1731 const base::DictionaryValue* extension_prefs = NULL; 1732 const base::DictionaryValue* extension_prefs = nullptr;
1732 const base::Value* extension_prefs_value = 1733 const base::Value* extension_prefs_value =
1733 pref_service->GetUserPrefValue(pref_names::kExtensions); 1734 pref_service->GetUserPrefValue(pref_names::kExtensions);
1734 if (!extension_prefs_value || 1735 if (!extension_prefs_value ||
1735 !extension_prefs_value->GetAsDictionary(&extension_prefs)) { 1736 !extension_prefs_value->GetAsDictionary(&extension_prefs)) {
1736 return result; // Empty set 1737 return result; // Empty set
1737 } 1738 }
1738 1739
1739 for (base::DictionaryValue::Iterator it(*extension_prefs); !it.IsAtEnd(); 1740 for (base::DictionaryValue::Iterator it(*extension_prefs); !it.IsAtEnd();
1740 it.Advance()) { 1741 it.Advance()) {
1741 const base::DictionaryValue* ext = NULL; 1742 const base::DictionaryValue* ext = nullptr;
1742 if (!it.value().GetAsDictionary(&ext)) { 1743 if (!it.value().GetAsDictionary(&ext)) {
1743 NOTREACHED() << "Invalid pref for extension " << it.key(); 1744 NOTREACHED() << "Invalid pref for extension " << it.key();
1744 continue; 1745 continue;
1745 } 1746 }
1746 if (!IsBlacklistBitSet(ext)) 1747 if (!IsBlacklistBitSet(ext))
1747 result.push_back(it.key()); 1748 result.push_back(it.key());
1748 } 1749 }
1749 return result; 1750 return result;
1750 } 1751 }
1751 1752
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 extension_pref_value_map_->GetEffectivePrefValue(pref_key, 1811 extension_pref_value_map_->GetEffectivePrefValue(pref_key,
1811 true, 1812 true,
1812 &has_incognito_pref_value); 1813 &has_incognito_pref_value);
1813 return has_incognito_pref_value; 1814 return has_incognito_pref_value;
1814 } 1815 }
1815 1816
1816 const base::DictionaryValue* ExtensionPrefs::GetGeometryCache( 1817 const base::DictionaryValue* ExtensionPrefs::GetGeometryCache(
1817 const std::string& extension_id) const { 1818 const std::string& extension_id) const {
1818 const base::DictionaryValue* extension_prefs = GetExtensionPref(extension_id); 1819 const base::DictionaryValue* extension_prefs = GetExtensionPref(extension_id);
1819 if (!extension_prefs) 1820 if (!extension_prefs)
1820 return NULL; 1821 return nullptr;
1821 1822
1822 const base::DictionaryValue* ext = NULL; 1823 const base::DictionaryValue* ext = nullptr;
1823 if (!extension_prefs->GetDictionary(kPrefGeometryCache, &ext)) 1824 if (!extension_prefs->GetDictionary(kPrefGeometryCache, &ext))
1824 return NULL; 1825 return nullptr;
1825 1826
1826 return ext; 1827 return ext;
1827 } 1828 }
1828 1829
1829 void ExtensionPrefs::SetGeometryCache( 1830 void ExtensionPrefs::SetGeometryCache(
1830 const std::string& extension_id, 1831 const std::string& extension_id,
1831 scoped_ptr<base::DictionaryValue> cache) { 1832 scoped_ptr<base::DictionaryValue> cache) {
1832 UpdateExtensionPref(extension_id, kPrefGeometryCache, cache.release()); 1833 UpdateExtensionPref(extension_id, kPrefGeometryCache, cache.release());
1833 } 1834 }
1834 1835
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
2038 new base::FundamentalValue(extension->was_installed_by_oem())); 2039 new base::FundamentalValue(extension->was_installed_by_oem()));
2039 extension_dict->Set(kPrefInstallTime, 2040 extension_dict->Set(kPrefInstallTime,
2040 new base::StringValue( 2041 new base::StringValue(
2041 base::Int64ToString(install_time.ToInternalValue()))); 2042 base::Int64ToString(install_time.ToInternalValue())));
2042 if (install_flags & kInstallFlagIsBlacklistedForMalware) 2043 if (install_flags & kInstallFlagIsBlacklistedForMalware)
2043 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); 2044 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true));
2044 2045
2045 if (install_flags & kInstallFlagIsEphemeral) 2046 if (install_flags & kInstallFlagIsEphemeral)
2046 extension_dict->Set(kPrefEphemeralApp, new base::FundamentalValue(true)); 2047 extension_dict->Set(kPrefEphemeralApp, new base::FundamentalValue(true));
2047 else 2048 else
2048 extension_dict->Remove(kPrefEphemeralApp, NULL); 2049 extension_dict->Remove(kPrefEphemeralApp, nullptr);
2049 2050
2050 base::FilePath::StringType path = MakePathRelative(install_directory_, 2051 base::FilePath::StringType path = MakePathRelative(install_directory_,
2051 extension->path()); 2052 extension->path());
2052 extension_dict->Set(kPrefPath, new base::StringValue(path)); 2053 extension_dict->Set(kPrefPath, new base::StringValue(path));
2053 if (!install_parameter.empty()) { 2054 if (!install_parameter.empty()) {
2054 extension_dict->Set(kPrefInstallParam, 2055 extension_dict->Set(kPrefInstallParam,
2055 new base::StringValue(install_parameter)); 2056 new base::StringValue(install_parameter));
2056 } 2057 }
2057 // We store prefs about LOAD extensions, but don't cache their manifest 2058 // We store prefs about LOAD extensions, but don't cache their manifest
2058 // since it may change on disk. 2059 // since it may change on disk.
2059 if (!Manifest::IsUnpackedLocation(extension->location())) { 2060 if (!Manifest::IsUnpackedLocation(extension->location())) {
2060 extension_dict->Set(kPrefManifest, 2061 extension_dict->Set(kPrefManifest,
2061 extension->manifest()->value()->DeepCopy()); 2062 extension->manifest()->value()->DeepCopy());
2062 } 2063 }
2063 2064
2064 // Only writes kPrefDoNotSync when it is not the default. 2065 // Only writes kPrefDoNotSync when it is not the default.
2065 if (install_flags & kInstallFlagDoNotSync) 2066 if (install_flags & kInstallFlagDoNotSync)
2066 extension_dict->Set(kPrefDoNotSync, new base::FundamentalValue(true)); 2067 extension_dict->Set(kPrefDoNotSync, new base::FundamentalValue(true));
2067 else 2068 else
2068 extension_dict->Remove(kPrefDoNotSync, NULL); 2069 extension_dict->Remove(kPrefDoNotSync, nullptr);
2069 } 2070 }
2070 2071
2071 void ExtensionPrefs::InitExtensionControlledPrefs( 2072 void ExtensionPrefs::InitExtensionControlledPrefs(
2072 ExtensionPrefValueMap* value_map) { 2073 ExtensionPrefValueMap* value_map) {
2073 ExtensionIdList extension_ids; 2074 ExtensionIdList extension_ids;
2074 GetExtensions(&extension_ids); 2075 GetExtensions(&extension_ids);
2075 2076
2076 for (ExtensionIdList::iterator extension_id = extension_ids.begin(); 2077 for (ExtensionIdList::iterator extension_id = extension_ids.begin();
2077 extension_id != extension_ids.end(); 2078 extension_id != extension_ids.end();
2078 ++extension_id) { 2079 ++extension_id) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2130 if (!extension_dict->HasKey(pref_names::kPrefContentSettings)) 2131 if (!extension_dict->HasKey(pref_names::kPrefContentSettings))
2131 extension_dict->Set(pref_names::kPrefContentSettings, new base::ListValue); 2132 extension_dict->Set(pref_names::kPrefContentSettings, new base::ListValue);
2132 2133
2133 if (!extension_dict->HasKey(pref_names::kPrefIncognitoContentSettings)) { 2134 if (!extension_dict->HasKey(pref_names::kPrefIncognitoContentSettings)) {
2134 extension_dict->Set(pref_names::kPrefIncognitoContentSettings, 2135 extension_dict->Set(pref_names::kPrefIncognitoContentSettings,
2135 new base::ListValue); 2136 new base::ListValue);
2136 } 2137 }
2137 2138
2138 // If this point has been reached, any pending installs should be considered 2139 // If this point has been reached, any pending installs should be considered
2139 // out of date. 2140 // out of date.
2140 extension_dict->Remove(kDelayedInstallInfo, NULL); 2141 extension_dict->Remove(kDelayedInstallInfo, nullptr);
2141 2142
2142 // Clear state that may be registered from a previous install. 2143 // Clear state that may be registered from a previous install.
2143 extension_dict->Remove(EventRouter::kRegisteredEvents, NULL); 2144 extension_dict->Remove(EventRouter::kRegisteredEvents, nullptr);
2144 2145
2145 // FYI, all code below here races on sudden shutdown because |extension_dict|, 2146 // FYI, all code below here races on sudden shutdown because |extension_dict|,
2146 // |app_sorting_|, |extension_pref_value_map_|, and (potentially) observers 2147 // |app_sorting_|, |extension_pref_value_map_|, and (potentially) observers
2147 // are updated non-transactionally. This is probably not fixable without 2148 // are updated non-transactionally. This is probably not fixable without
2148 // nested transactional updates to pref dictionaries. 2149 // nested transactional updates to pref dictionaries.
2149 if (needs_sort_ordinal) 2150 if (needs_sort_ordinal)
2150 app_sorting_->EnsureValidOrdinals(extension_id, suggested_page_ordinal); 2151 app_sorting_->EnsureValidOrdinals(extension_id, suggested_page_ordinal);
2151 2152
2152 bool is_enabled = false; 2153 bool is_enabled = false;
2153 int initial_state; 2154 int initial_state;
2154 if (extension_dict->GetInteger(kPrefState, &initial_state)) { 2155 if (extension_dict->GetInteger(kPrefState, &initial_state)) {
2155 is_enabled = initial_state == Extension::ENABLED; 2156 is_enabled = initial_state == Extension::ENABLED;
2156 } 2157 }
2157 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); 2158 bool is_incognito_enabled = IsIncognitoEnabled(extension_id);
2158 2159
2159 extension_pref_value_map_->RegisterExtension( 2160 extension_pref_value_map_->RegisterExtension(
2160 extension_id, install_time, is_enabled, is_incognito_enabled); 2161 extension_id, install_time, is_enabled, is_incognito_enabled);
2161 2162
2162 FOR_EACH_OBSERVER( 2163 FOR_EACH_OBSERVER(
2163 ExtensionPrefsObserver, 2164 ExtensionPrefsObserver,
2164 observer_list_, 2165 observer_list_,
2165 OnExtensionRegistered(extension_id, install_time, is_enabled)); 2166 OnExtensionRegistered(extension_id, install_time, is_enabled));
2166 } 2167 }
2167 2168
2168 } // namespace extensions 2169 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698