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

Side by Side Diff: chrome/browser/extensions/extension_prefs_unittest.cc

Issue 8898027: Revert 114083 - Convert app_launch_index and page_index from int to StringOrdinal. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/message_loop.h" 5 #include "base/message_loop.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "base/scoped_temp_dir.h" 7 #include "base/scoped_temp_dir.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
11 #include "chrome/browser/extensions/extension_prefs.h" 11 #include "chrome/browser/extensions/extension_prefs.h"
12 #include "chrome/browser/extensions/test_extension_prefs.h" 12 #include "chrome/browser/extensions/test_extension_prefs.h"
13 #include "chrome/browser/extensions/extension_pref_value_map.h"
14 #include "chrome/browser/prefs/pref_change_registrar.h" 13 #include "chrome/browser/prefs/pref_change_registrar.h"
15 #include "chrome/browser/prefs/scoped_user_pref_update.h" 14 #include "chrome/browser/prefs/scoped_user_pref_update.h"
16 #include "chrome/common/chrome_paths.h" 15 #include "chrome/common/chrome_paths.h"
17 #include "chrome/common/extensions/extension_constants.h" 16 #include "chrome/common/extensions/extension_constants.h"
18 #include "chrome/common/extensions/extension_permission_set.h" 17 #include "chrome/common/extensions/extension_permission_set.h"
19 #include "chrome/common/string_ordinal.h"
20 #include "content/public/browser/notification_details.h" 18 #include "content/public/browser/notification_details.h"
21 #include "content/public/browser/notification_source.h" 19 #include "content/public/browser/notification_source.h"
22 #include "content/test/notification_observer_mock.h" 20 #include "content/test/notification_observer_mock.h"
23 #include "content/test/test_browser_thread.h" 21 #include "content/test/test_browser_thread.h"
24 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
25 23
26 using base::Time; 24 using base::Time;
27 using base::TimeDelta; 25 using base::TimeDelta;
28 using content::BrowserThread; 26 using content::BrowserThread;
29 27
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 std::string id4_; 647 std::string id4_;
650 }; 648 };
651 TEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {} 649 TEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {}
652 650
653 class ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest { 651 class ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest {
654 public: 652 public:
655 virtual void Initialize() { 653 virtual void Initialize() {
656 extension_ = prefs_.AddExtension("on_extension_installed"); 654 extension_ = prefs_.AddExtension("on_extension_installed");
657 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); 655 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id()));
658 prefs()->OnExtensionInstalled( 656 prefs()->OnExtensionInstalled(
659 extension_.get(), Extension::DISABLED, false, 657 extension_.get(), Extension::DISABLED, false, -1);
660 StringOrdinal());
661 } 658 }
662 659
663 virtual void Verify() { 660 virtual void Verify() {
664 EXPECT_TRUE(prefs()->IsExtensionDisabled(extension_->id())); 661 EXPECT_TRUE(prefs()->IsExtensionDisabled(extension_->id()));
665 } 662 }
666 663
667 private: 664 private:
668 scoped_refptr<Extension> extension_; 665 scoped_refptr<Extension> extension_;
669 }; 666 };
670 TEST_F(ExtensionPrefsOnExtensionInstalled, 667 TEST_F(ExtensionPrefsOnExtensionInstalled,
671 ExtensionPrefsOnExtensionInstalled) {} 668 ExtensionPrefsOnExtensionInstalled) {}
672 669
673 class ExtensionPrefsAppLaunchOrdinal : public ExtensionPrefsTest { 670 class ExtensionPrefsAppLaunchIndex : public ExtensionPrefsTest {
674 public: 671 public:
675 virtual void Initialize() { 672 virtual void Initialize() {
676 // No extensions yet. 673 // No extensions yet.
677 StringOrdinal page = StringOrdinal::CreateInitialOrdinal(); 674 EXPECT_EQ(0, prefs()->GetNextAppLaunchIndex(0));
678 EXPECT_TRUE(StringOrdinal::CreateInitialOrdinal().Equal(
679 prefs()->CreateNextAppLaunchOrdinal(page)));
680 675
681 extension_ = prefs_.AddApp("on_extension_installed"); 676 extension_ = prefs_.AddApp("on_extension_installed");
682 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); 677 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id()));
683 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, 678 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED,
684 false, StringOrdinal()); 679 false, -1);
685 } 680 }
686 681
687 virtual void Verify() { 682 virtual void Verify() {
688 StringOrdinal launch_ordinal = 683 int launch_index = prefs()->GetAppLaunchIndex(extension_->id());
689 prefs()->GetAppLaunchOrdinal(extension_->id()); 684 // Extension should have been assigned a launch index > 0.
690 StringOrdinal page_ordinal = StringOrdinal::CreateInitialOrdinal(); 685 EXPECT_GT(launch_index, 0);
686 EXPECT_EQ(launch_index + 1, prefs()->GetNextAppLaunchIndex(0));
687 // Set a new launch index of one higher and verify.
688 prefs()->SetAppLaunchIndex(extension_->id(),
689 prefs()->GetNextAppLaunchIndex(0));
690 int new_launch_index = prefs()->GetAppLaunchIndex(extension_->id());
691 EXPECT_EQ(launch_index + 1, new_launch_index);
691 692
692 // Extension should have been assigned a valid StringOrdinal. 693 // This extension doesn't exist, so it should return -1.
693 EXPECT_TRUE(launch_ordinal.IsValid()); 694 EXPECT_EQ(-1, prefs()->GetAppLaunchIndex("foo"));
694 EXPECT_TRUE(launch_ordinal.LessThan(
695 prefs()->CreateNextAppLaunchOrdinal(page_ordinal)));
696 // Set a new launch ordinal of and verify it comes after.
697 prefs()->SetAppLaunchOrdinal(
698 extension_->id(),
699 prefs()->CreateNextAppLaunchOrdinal(page_ordinal));
700 StringOrdinal new_launch_ordinal =
701 prefs()->GetAppLaunchOrdinal(extension_->id());
702 EXPECT_TRUE(launch_ordinal.LessThan(new_launch_ordinal));
703 695
704 // This extension doesn't exist, so it should return an invalid 696 // The second page doesn't have any apps so its next launch index should
705 // StringOrdinal. 697 // still be 0.
706 StringOrdinal invalid_app_launch_ordinal = 698 EXPECT_EQ(prefs()->GetNextAppLaunchIndex(1), 0);
707 prefs()->GetAppLaunchOrdinal("foo");
708 EXPECT_FALSE(invalid_app_launch_ordinal.IsValid());
709 EXPECT_EQ(-1, prefs()->PageStringOrdinalAsInteger(
710 invalid_app_launch_ordinal));
711
712 // The second page doesn't have any apps so its next launch ordinal should
713 // be the first launch ordinal.
714 StringOrdinal next_page = page_ordinal.CreateAfter();
715 StringOrdinal next_page_app_launch_ordinal =
716 prefs()->CreateNextAppLaunchOrdinal(next_page);
717 EXPECT_TRUE(next_page_app_launch_ordinal.Equal(
718 prefs()->CreateFirstAppLaunchOrdinal(next_page)));
719 } 699 }
720 700
721 private: 701 private:
722 scoped_refptr<Extension> extension_; 702 scoped_refptr<Extension> extension_;
723 }; 703 };
724 TEST_F(ExtensionPrefsAppLaunchOrdinal, ExtensionPrefsAppLaunchOrdinal) {} 704 TEST_F(ExtensionPrefsAppLaunchIndex, ExtensionPrefsAppLaunchIndex) {}
725 705
726 class ExtensionPrefsPageOrdinal : public ExtensionPrefsTest { 706 class ExtensionPrefsPageIndex : public ExtensionPrefsTest {
727 public: 707 public:
728 virtual void Initialize() { 708 virtual void Initialize() {
729 extension_ = prefs_.AddApp("page_ordinal"); 709 extension_ = prefs_.AddApp("page_index");
730 // Install with a page preference. 710 // Install to page 3 (index 2).
731 StringOrdinal page = StringOrdinal::CreateInitialOrdinal();
732 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, 711 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED,
733 false, page); 712 false, 2);
734 EXPECT_TRUE(page.Equal(prefs()->GetPageOrdinal(extension_->id()))); 713 EXPECT_EQ(2, prefs()->GetPageIndex(extension_->id()));
735 EXPECT_EQ(0, prefs()->PageStringOrdinalAsInteger(page));
736 714
737 scoped_refptr<Extension> extension2 = prefs_.AddApp("page_ordinal_2"); 715 scoped_refptr<Extension> extension2 = prefs_.AddApp("page_index_2");
738 // Install without any page preference. 716 // Install without any page preference.
739 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, 717 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED,
740 false, StringOrdinal()); 718 false, -1);
741 EXPECT_TRUE(prefs()->GetPageOrdinal(extension_->id()).IsValid()); 719 EXPECT_EQ(0, prefs()->GetPageIndex(extension_->id()));
742 } 720 }
743 721
744 virtual void Verify() { 722 virtual void Verify() {
745 StringOrdinal old_page = prefs()->GetPageOrdinal(extension_->id()); 723 // Set the page index.
746 StringOrdinal new_page = old_page.CreateAfter(); 724 prefs()->SetPageIndex(extension_->id(), 1);
725 // Verify the page index.
726 EXPECT_EQ(1, prefs()->GetPageIndex(extension_->id()));
747 727
748 // Set the page ordinal. 728 // This extension doesn't exist, so it should return -1.
749 prefs()->SetPageOrdinal(extension_->id(), new_page); 729 EXPECT_EQ(-1, prefs()->GetPageIndex("foo"));
750 // Verify the page ordinal.
751 EXPECT_TRUE(new_page.Equal(prefs()->GetPageOrdinal(extension_->id())));
752 EXPECT_EQ(1, prefs()->PageStringOrdinalAsInteger(new_page));
753
754 // This extension doesn't exist, so it should return an invalid
755 // StringOrdinal.
756 EXPECT_FALSE(prefs()->GetPageOrdinal("foo").IsValid());
757 } 730 }
758 731
759 private: 732 private:
760 scoped_refptr<Extension> extension_; 733 scoped_refptr<Extension> extension_;
761 }; 734 };
762 TEST_F(ExtensionPrefsPageOrdinal, ExtensionPrefsPageOrdinal) {} 735 TEST_F(ExtensionPrefsPageIndex, ExtensionPrefsPageIndex) {}
763 736
764 class ExtensionPrefsAppLocation : public ExtensionPrefsTest { 737 class ExtensionPrefsAppLocation : public ExtensionPrefsTest {
765 public: 738 public:
766 virtual void Initialize() { 739 virtual void Initialize() {
767 extension_ = prefs_.AddExtension("not_an_app"); 740 extension_ = prefs_.AddExtension("not_an_app");
768 // Non-apps should not have any app launch ordinal or page ordinal. 741 // Non-apps should not have any app launch index or page index.
769 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, 742 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED,
770 false, StringOrdinal()); 743 false, 0);
771 } 744 }
772 745
773 virtual void Verify() { 746 virtual void Verify() {
774 EXPECT_FALSE(prefs()->GetAppLaunchOrdinal(extension_->id()).IsValid()); 747 EXPECT_EQ(-1, prefs()->GetAppLaunchIndex(extension_->id()));
775 EXPECT_FALSE(prefs()->GetPageOrdinal(extension_->id()).IsValid()); 748 EXPECT_EQ(-1, prefs()->GetPageIndex(extension_->id()));
776 } 749 }
777 750
778 private: 751 private:
779 scoped_refptr<Extension> extension_; 752 scoped_refptr<Extension> extension_;
780 }; 753 };
781 TEST_F(ExtensionPrefsAppLocation, ExtensionPrefsAppLocation) {} 754 TEST_F(ExtensionPrefsAppLocation, ExtensionPrefsAppLocation) {}
782 755
783 class ExtensionPrefsAppDraggedByUser : public ExtensionPrefsTest { 756 class ExtensionPrefsAppDraggedByUser : public ExtensionPrefsTest {
784 public: 757 public:
785 virtual void Initialize() { 758 virtual void Initialize() {
786 extension_ = prefs_.AddExtension("on_extension_installed"); 759 extension_ = prefs_.AddExtension("on_extension_installed");
787 EXPECT_FALSE(prefs()->WasAppDraggedByUser(extension_->id())); 760 EXPECT_FALSE(prefs()->WasAppDraggedByUser(extension_->id()));
788 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, 761 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED,
789 false, StringOrdinal()); 762 false, -1);
790 } 763 }
791 764
792 virtual void Verify() { 765 virtual void Verify() {
793 // Set the flag and see if it persisted. 766 // Set the flag and see if it persisted.
794 prefs()->SetAppDraggedByUser(extension_->id()); 767 prefs()->SetAppDraggedByUser(extension_->id());
795 EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id())); 768 EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id()));
796 769
797 // Make sure it doesn't change on consecutive calls. 770 // Make sure it doesn't change on consecutive calls.
798 prefs()->SetAppDraggedByUser(extension_->id()); 771 prefs()->SetAppDraggedByUser(extension_->id());
799 EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id())); 772 EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id()));
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 902
930 // Flags indicating whether each of the extensions has been installed, yet. 903 // Flags indicating whether each of the extensions has been installed, yet.
931 bool installed[3]; 904 bool installed[3];
932 905
933 private: 906 private:
934 void EnsureExtensionInstalled(Extension *ext) { 907 void EnsureExtensionInstalled(Extension *ext) {
935 // Install extension the first time a preference is set for it. 908 // Install extension the first time a preference is set for it.
936 Extension* extensions[] = {ext1_, ext2_, ext3_}; 909 Extension* extensions[] = {ext1_, ext2_, ext3_};
937 for (int i = 0; i < 3; ++i) { 910 for (int i = 0; i < 3; ++i) {
938 if (ext == extensions[i] && !installed[i]) { 911 if (ext == extensions[i] && !installed[i]) {
939 prefs()->OnExtensionInstalled(ext, Extension::ENABLED, 912 prefs()->OnExtensionInstalled(ext, Extension::ENABLED, false, -1);
940 false, StringOrdinal());
941 installed[i] = true; 913 installed[i] = true;
942 break; 914 break;
943 } 915 }
944 } 916 }
945 } 917 }
946 918
947 void EnsureExtensionUninstalled(const std::string& extension_id) { 919 void EnsureExtensionUninstalled(const std::string& extension_id) {
948 Extension* extensions[] = {ext1_, ext2_, ext3_}; 920 Extension* extensions[] = {ext1_, ext2_, ext3_};
949 for (int i = 0; i < 3; ++i) { 921 for (int i = 0; i < 3; ++i) {
950 if (extensions[i]->id() == extension_id) { 922 if (extensions[i]->id() == extension_id) {
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 ++iteration_; 1209 ++iteration_;
1238 } else { 1210 } else {
1239 EXPECT_EQ(kDefaultPref1, actual); 1211 EXPECT_EQ(kDefaultPref1, actual);
1240 } 1212 }
1241 } 1213 }
1242 1214
1243 private: 1215 private:
1244 int iteration_; 1216 int iteration_;
1245 }; 1217 };
1246 TEST_F(ExtensionPrefsDisableExtensions, ExtensionPrefsDisableExtensions) {} 1218 TEST_F(ExtensionPrefsDisableExtensions, ExtensionPrefsDisableExtensions) {}
1247
1248 // Tests the application index to ordinal migration code. This should be removed
1249 // when the migrate code is taken out.
1250 class ExtensionPrefsMigrateAppIndex : public ExtensionPrefsPreferencesBase {
1251 public:
1252 ExtensionPrefsMigrateAppIndex() {}
1253 virtual ~ExtensionPrefsMigrateAppIndex() {}
1254 virtual void Initialize() {
1255 // A preference determining the order of which the apps appear on the NTP.
1256 const char kPrefAppLaunchIndexDeprecated[] = "app_launcher_index";
1257 // A preference determining the page on which an app appears in the NTP.
1258 const char kPrefPageIndexDeprecated[] = "page_index";
1259
1260 // Setup the deprecated preferences.
1261 prefs()->UpdateExtensionPref(ext1_->id(),
1262 kPrefAppLaunchIndexDeprecated,
1263 Value::CreateIntegerValue(0));
1264 prefs()->UpdateExtensionPref(ext1_->id(),
1265 kPrefPageIndexDeprecated,
1266 Value::CreateIntegerValue(0));
1267
1268 prefs()->UpdateExtensionPref(ext2_->id(),
1269 kPrefAppLaunchIndexDeprecated,
1270 Value::CreateIntegerValue(1));
1271 prefs()->UpdateExtensionPref(ext2_->id(),
1272 kPrefPageIndexDeprecated,
1273 Value::CreateIntegerValue(0));
1274
1275 prefs()->UpdateExtensionPref(ext3_->id(),
1276 kPrefAppLaunchIndexDeprecated,
1277 Value::CreateIntegerValue(0));
1278 prefs()->UpdateExtensionPref(ext3_->id(),
1279 kPrefPageIndexDeprecated,
1280 Value::CreateIntegerValue(1));
1281
1282 // We insert the ids in reserve order so that we have to deal with the
1283 // element on the 2nd page before the 1st page is seen.
1284 ExtensionPrefs::ExtensionIdSet ids;
1285 ids.push_back(ext3_->id());
1286 ids.push_back(ext2_->id());
1287 ids.push_back(ext1_->id());
1288
1289 prefs_.prefs()->MigrateAppIndex(ids);
1290 }
1291 virtual void Verify() {
1292 StringOrdinal first_ordinal = StringOrdinal::CreateInitialOrdinal();
1293
1294 EXPECT_TRUE(first_ordinal.Equal(prefs()->GetAppLaunchOrdinal(ext1_->id())));
1295 EXPECT_TRUE(first_ordinal.LessThan(
1296 prefs()->GetAppLaunchOrdinal(ext2_->id())));
1297 EXPECT_TRUE(first_ordinal.Equal(prefs()->GetAppLaunchOrdinal(ext3_->id())));
1298
1299 EXPECT_TRUE(first_ordinal.Equal(prefs()->GetPageOrdinal(ext1_->id())));
1300 EXPECT_TRUE(first_ordinal.Equal(prefs()->GetPageOrdinal(ext2_->id())));
1301 EXPECT_TRUE(first_ordinal.LessThan(prefs()->GetPageOrdinal(ext3_->id())));
1302 }
1303 };
1304 TEST_F(ExtensionPrefsMigrateAppIndex, ExtensionPrefsMigrateAppIndex) {}
1305
1306 class ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage :
1307 public ExtensionPrefsPreferencesBase {
1308 public:
1309 ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage() {}
1310 virtual ~ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage() {}
1311 virtual void Initialize() {
1312 DictionaryValue simple_dict;
1313 simple_dict.SetString(keys::kVersion, "1.0.0.0");
1314 simple_dict.SetString(keys::kName, "unused");
1315 simple_dict.SetString(keys::kApp, "true");
1316 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html");
1317
1318 std::string error;
1319 app1_scoped_ = Extension::Create(
1320 prefs_.temp_dir().AppendASCII("app1_"), Extension::EXTERNAL_PREF,
1321 simple_dict, Extension::STRICT_ERROR_CHECKS, &error);
1322 prefs()->OnExtensionInstalled(app1_scoped_.get(),
1323 Extension::ENABLED,
1324 false,
1325 StringOrdinal());
1326
1327 app2_scoped_ = Extension::Create(
1328 prefs_.temp_dir().AppendASCII("app2_"), Extension::EXTERNAL_PREF,
1329 simple_dict, Extension::STRICT_ERROR_CHECKS, &error);
1330 prefs()->OnExtensionInstalled(app2_scoped_.get(),
1331 Extension::ENABLED,
1332 false,
1333 StringOrdinal());
1334 }
1335 virtual void Verify() {
1336 StringOrdinal page = StringOrdinal::CreateInitialOrdinal();
1337
1338 StringOrdinal min = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage(
1339 page,
1340 ExtensionPrefs::MIN_ORDINAL);
1341 StringOrdinal max = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage(
1342 page,
1343 ExtensionPrefs::MAX_ORDINAL);
1344 EXPECT_TRUE(min.IsValid());
1345 EXPECT_TRUE(max.IsValid());
1346 EXPECT_TRUE(min.LessThan(max));
1347
1348 // Ensure that the min and max values aren't set for empty pages.
1349 min = StringOrdinal();
1350 max = StringOrdinal();
1351 StringOrdinal empty_page = page.CreateAfter();
1352 EXPECT_FALSE(min.IsValid());
1353 EXPECT_FALSE(max.IsValid());
1354 min = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage(
1355 empty_page,
1356 ExtensionPrefs::MIN_ORDINAL);
1357 max = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage(
1358 empty_page,
1359 ExtensionPrefs::MAX_ORDINAL);
1360 EXPECT_FALSE(min.IsValid());
1361 EXPECT_FALSE(max.IsValid());
1362 }
1363
1364 private:
1365 scoped_refptr<Extension> app1_scoped_;
1366 scoped_refptr<Extension> app2_scoped_;
1367 };
1368 TEST_F(ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage,
1369 ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage) {}
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_prefs.cc ('k') | chrome/browser/extensions/extension_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698