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

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

Issue 11362268: Implement the ability to obliterate a storage partition from disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: onditionals are hard, let's go shopping Created 8 years, 1 month 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) 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/extension_service_unittest.h" 5 #include "chrome/browser/extensions/extension_service_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 3735 matching lines...) Expand 10 before | Expand all | Expand 10 after
3746 ExtensionCookieCallback callback; 3746 ExtensionCookieCallback callback;
3747 3747
3748 // Load a test extension. 3748 // Load a test extension.
3749 FilePath path = data_dir_; 3749 FilePath path = data_dir_;
3750 path = path.AppendASCII("good.crx"); 3750 path = path.AppendASCII("good.crx");
3751 const Extension* extension = InstallCRX(path, INSTALL_NEW); 3751 const Extension* extension = InstallCRX(path, INSTALL_NEW);
3752 ASSERT_TRUE(extension); 3752 ASSERT_TRUE(extension);
3753 GURL ext_url(extension->url()); 3753 GURL ext_url(extension->url());
3754 string16 origin_id = 3754 string16 origin_id =
3755 webkit_database::DatabaseUtil::GetOriginIdentifier(ext_url); 3755 webkit_database::DatabaseUtil::GetOriginIdentifier(ext_url);
3756 // For extensions, the extension's base URL is always the site.
3757 content::StoragePartition* partition =
3758 BrowserContext::GetStoragePartition(profile_.get(), ext_url);
3756 3759
3757 // Set a cookie for the extension. 3760 // Set a cookie for the extension.
3758 net::CookieMonster* cookie_monster = 3761 net::CookieMonster* cookie_monster =
3759 profile_->GetRequestContextForExtensions()->GetURLRequestContext()-> 3762 profile_->GetRequestContextForExtensions()->GetURLRequestContext()->
3760 cookie_store()->GetCookieMonster(); 3763 cookie_store()->GetCookieMonster();
3761 ASSERT_TRUE(cookie_monster); 3764 ASSERT_TRUE(cookie_monster);
3762 net::CookieOptions options; 3765 net::CookieOptions options;
3763 cookie_monster->SetCookieWithOptionsAsync( 3766 cookie_monster->SetCookieWithOptionsAsync(
3764 ext_url, "dummy=value", options, 3767 ext_url, "dummy=value", options,
3765 base::Bind(&ExtensionCookieCallback::SetCookieCallback, 3768 base::Bind(&ExtensionCookieCallback::SetCookieCallback,
3766 base::Unretained(&callback))); 3769 base::Unretained(&callback)));
3767 loop_.RunAllPending(); 3770 loop_.RunAllPending();
3768 EXPECT_TRUE(callback.result_); 3771 EXPECT_TRUE(callback.result_);
3769 3772
3770 cookie_monster->GetAllCookiesForURLAsync( 3773 cookie_monster->GetAllCookiesForURLAsync(
3771 ext_url, 3774 ext_url,
3772 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, 3775 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback,
3773 base::Unretained(&callback))); 3776 base::Unretained(&callback)));
3774 loop_.RunAllPending(); 3777 loop_.RunAllPending();
3775 EXPECT_EQ(1U, callback.list_.size()); 3778 EXPECT_EQ(1U, callback.list_.size());
3776 3779
3777 // Open a database. 3780 // Open a database.
3778 webkit_database::DatabaseTracker* db_tracker = 3781 webkit_database::DatabaseTracker* db_tracker =
3779 BrowserContext::GetDefaultStoragePartition(profile_.get())-> 3782 partition->GetDatabaseTracker();
3780 GetDatabaseTracker();
3781 string16 db_name = UTF8ToUTF16("db"); 3783 string16 db_name = UTF8ToUTF16("db");
3782 string16 description = UTF8ToUTF16("db_description"); 3784 string16 description = UTF8ToUTF16("db_description");
3783 int64 size; 3785 int64 size;
3784 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); 3786 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size);
3785 db_tracker->DatabaseClosed(origin_id, db_name); 3787 db_tracker->DatabaseClosed(origin_id, db_name);
3786 std::vector<webkit_database::OriginInfo> origins; 3788 std::vector<webkit_database::OriginInfo> origins;
3787 db_tracker->GetAllOriginsInfo(&origins); 3789 db_tracker->GetAllOriginsInfo(&origins);
3788 EXPECT_EQ(1U, origins.size()); 3790 EXPECT_EQ(1U, origins.size());
3789 EXPECT_EQ(origin_id, origins[0].GetOrigin()); 3791 EXPECT_EQ(origin_id, origins[0].GetOrigin());
3790 3792
3791 // Create local storage. We only simulate this by creating the backing files. 3793 // Create local storage. We only simulate this by creating the backing files.
3792 // Note: This test depends on details of how the dom_storage library 3794 // Note: This test depends on details of how the dom_storage library
3793 // stores data in the host file system. 3795 // stores data in the host file system.
3794 FilePath lso_dir_path = profile_->GetPath().AppendASCII("Local Storage"); 3796 FilePath lso_dir_path = partition->GetPath().AppendASCII("Local Storage");
3795 FilePath lso_file_path = lso_dir_path.AppendASCII( 3797 FilePath lso_file_path = lso_dir_path.AppendASCII(
3796 UTF16ToUTF8(origin_id) + ".localstorage"); 3798 UTF16ToUTF8(origin_id) + ".localstorage");
3797 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path)); 3799 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path));
3798 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0)); 3800 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0));
3799 EXPECT_TRUE(file_util::PathExists(lso_file_path)); 3801 EXPECT_TRUE(file_util::PathExists(lso_file_path));
3800 3802
3801 // Create indexed db. Similarly, it is enough to only simulate this by 3803 // Create indexed db. Similarly, it is enough to only simulate this by
3802 // creating the directory on the disk. 3804 // creating the directory on the disk.
3803 IndexedDBContext* idb_context = 3805 IndexedDBContext* idb_context = partition->GetIndexedDBContext();
3804 BrowserContext::GetDefaultStoragePartition(profile_.get())->
3805 GetIndexedDBContext();
3806 FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); 3806 FilePath idb_path = idb_context->GetFilePathForTesting(origin_id);
3807 EXPECT_TRUE(file_util::CreateDirectory(idb_path)); 3807 EXPECT_TRUE(file_util::CreateDirectory(idb_path));
3808 EXPECT_TRUE(file_util::DirectoryExists(idb_path)); 3808 EXPECT_TRUE(file_util::DirectoryExists(idb_path));
3809 3809
3810 // Uninstall the extension. 3810 // Uninstall the extension.
3811 service_->UninstallExtension(good_crx, false, NULL); 3811 service_->UninstallExtension(good_crx, false, NULL);
3812 loop_.RunAllPending(); 3812 loop_.RunAllPending();
3813 3813
3814 // Check that the cookie is gone. 3814 // Check that the cookie is gone.
3815 cookie_monster->GetAllCookiesForURLAsync( 3815 cookie_monster->GetAllCookiesForURLAsync(
(...skipping 29 matching lines...) Expand all
3845 ValidatePrefKeyCount(++pref_count); 3845 ValidatePrefKeyCount(++pref_count);
3846 ASSERT_EQ(1u, service_->extensions()->size()); 3846 ASSERT_EQ(1u, service_->extensions()->size());
3847 const std::string id1 = extension->id(); 3847 const std::string id1 = extension->id();
3848 EXPECT_TRUE(extension->HasAPIPermission( 3848 EXPECT_TRUE(extension->HasAPIPermission(
3849 APIPermission::kUnlimitedStorage)); 3849 APIPermission::kUnlimitedStorage));
3850 const GURL origin1(extension->GetFullLaunchURL().GetOrigin()); 3850 const GURL origin1(extension->GetFullLaunchURL().GetOrigin());
3851 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> 3851 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()->
3852 IsStorageUnlimited(origin1)); 3852 IsStorageUnlimited(origin1));
3853 string16 origin_id = 3853 string16 origin_id =
3854 webkit_database::DatabaseUtil::GetOriginIdentifier(origin1); 3854 webkit_database::DatabaseUtil::GetOriginIdentifier(origin1);
3855 // For extensions, the extension's base URL is always the site.
3856 content::StoragePartition* partition =
3857 BrowserContext::GetStoragePartition(profile_.get(), extension->url());
3855 3858
3856 // Install app2 from the same origin with unlimited storage. 3859 // Install app2 from the same origin with unlimited storage.
3857 extension = PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); 3860 extension = PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW);
3858 ValidatePrefKeyCount(++pref_count); 3861 ValidatePrefKeyCount(++pref_count);
3859 ASSERT_EQ(2u, service_->extensions()->size()); 3862 ASSERT_EQ(2u, service_->extensions()->size());
3860 const std::string id2 = extension->id(); 3863 const std::string id2 = extension->id();
3861 EXPECT_TRUE(extension->HasAPIPermission( 3864 EXPECT_TRUE(extension->HasAPIPermission(
3862 APIPermission::kUnlimitedStorage)); 3865 APIPermission::kUnlimitedStorage));
3863 EXPECT_TRUE(extension->web_extent().MatchesURL( 3866 EXPECT_TRUE(extension->web_extent().MatchesURL(
3864 extension->GetFullLaunchURL())); 3867 extension->GetFullLaunchURL()));
3865 const GURL origin2(extension->GetFullLaunchURL().GetOrigin()); 3868 const GURL origin2(extension->GetFullLaunchURL().GetOrigin());
3866 EXPECT_EQ(origin1, origin2); 3869 EXPECT_EQ(origin1, origin2);
3867 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> 3870 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()->
3868 IsStorageUnlimited(origin2)); 3871 IsStorageUnlimited(origin2));
3872 // Neither apps here have isolated storage, so they should share the same
3873 // partition.
3869 3874
3870 // Set a cookie for the extension. 3875 // Set a cookie for the extension.
3871 net::CookieMonster* cookie_monster = 3876 net::CookieMonster* cookie_monster =
3872 profile_->GetRequestContext()->GetURLRequestContext()-> 3877 partition->GetRequestContext()->GetURLRequestContext()->
3873 cookie_store()->GetCookieMonster(); 3878 cookie_store()->GetCookieMonster();
3874 ASSERT_TRUE(cookie_monster); 3879 ASSERT_TRUE(cookie_monster);
3875 net::CookieOptions options; 3880 net::CookieOptions options;
3876 cookie_monster->SetCookieWithOptionsAsync( 3881 cookie_monster->SetCookieWithOptionsAsync(
3877 origin1, "dummy=value", options, 3882 origin1, "dummy=value", options,
3878 base::Bind(&ExtensionCookieCallback::SetCookieCallback, 3883 base::Bind(&ExtensionCookieCallback::SetCookieCallback,
3879 base::Unretained(&callback))); 3884 base::Unretained(&callback)));
3880 loop_.RunAllPending(); 3885 loop_.RunAllPending();
3881 EXPECT_TRUE(callback.result_); 3886 EXPECT_TRUE(callback.result_);
3882 3887
3883 cookie_monster->GetAllCookiesForURLAsync( 3888 cookie_monster->GetAllCookiesForURLAsync(
3884 origin1, 3889 origin1,
3885 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, 3890 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback,
3886 base::Unretained(&callback))); 3891 base::Unretained(&callback)));
3887 loop_.RunAllPending(); 3892 loop_.RunAllPending();
3888 EXPECT_EQ(1U, callback.list_.size()); 3893 EXPECT_EQ(1U, callback.list_.size());
3889 3894
3890 // Open a database. 3895 // Open a database.
3891 webkit_database::DatabaseTracker* db_tracker = 3896 webkit_database::DatabaseTracker* db_tracker =
3892 BrowserContext::GetDefaultStoragePartition(profile_.get())-> 3897 partition->GetDatabaseTracker();
3893 GetDatabaseTracker();
3894 string16 db_name = UTF8ToUTF16("db"); 3898 string16 db_name = UTF8ToUTF16("db");
3895 string16 description = UTF8ToUTF16("db_description"); 3899 string16 description = UTF8ToUTF16("db_description");
3896 int64 size; 3900 int64 size;
3897 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); 3901 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size);
3898 db_tracker->DatabaseClosed(origin_id, db_name); 3902 db_tracker->DatabaseClosed(origin_id, db_name);
3899 std::vector<webkit_database::OriginInfo> origins; 3903 std::vector<webkit_database::OriginInfo> origins;
3900 db_tracker->GetAllOriginsInfo(&origins); 3904 db_tracker->GetAllOriginsInfo(&origins);
3901 EXPECT_EQ(1U, origins.size()); 3905 EXPECT_EQ(1U, origins.size());
3902 EXPECT_EQ(origin_id, origins[0].GetOrigin()); 3906 EXPECT_EQ(origin_id, origins[0].GetOrigin());
3903 3907
3904 // Create local storage. We only simulate this by creating the backing files. 3908 // Create local storage. We only simulate this by creating the backing files.
3905 // Note: This test depends on details of how the dom_storage library 3909 // Note: This test depends on details of how the dom_storage library
3906 // stores data in the host file system. 3910 // stores data in the host file system.
3907 FilePath lso_dir_path = profile_->GetPath().AppendASCII("Local Storage"); 3911 FilePath lso_dir_path = partition->GetPath().AppendASCII("Local Storage");
3908 FilePath lso_file_path = lso_dir_path.AppendASCII( 3912 FilePath lso_file_path = lso_dir_path.AppendASCII(
3909 UTF16ToUTF8(origin_id) + ".localstorage"); 3913 UTF16ToUTF8(origin_id) + ".localstorage");
3910 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path)); 3914 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path));
3911 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0)); 3915 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0));
3912 EXPECT_TRUE(file_util::PathExists(lso_file_path)); 3916 EXPECT_TRUE(file_util::PathExists(lso_file_path));
3913 3917
3914 // Create indexed db. Similarly, it is enough to only simulate this by 3918 // Create indexed db. Similarly, it is enough to only simulate this by
3915 // creating the directory on the disk. 3919 // creating the directory on the disk.
3916 IndexedDBContext* idb_context = 3920 IndexedDBContext* idb_context = partition->GetIndexedDBContext();
3917 BrowserContext::GetDefaultStoragePartition(profile_.get())->
3918 GetIndexedDBContext();
3919 FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); 3921 FilePath idb_path = idb_context->GetFilePathForTesting(origin_id);
3920 EXPECT_TRUE(file_util::CreateDirectory(idb_path)); 3922 EXPECT_TRUE(file_util::CreateDirectory(idb_path));
3921 EXPECT_TRUE(file_util::DirectoryExists(idb_path)); 3923 EXPECT_TRUE(file_util::DirectoryExists(idb_path));
3922 3924
3923 // Uninstall one of them, unlimited storage should still be granted 3925 // Uninstall one of them, unlimited storage should still be granted
3924 // to the origin. 3926 // to the origin.
3925 UninstallExtension(id1, false); 3927 UninstallExtension(id1, false);
3926 EXPECT_EQ(1u, service_->extensions()->size()); 3928 EXPECT_EQ(1u, service_->extensions()->size());
3927 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> 3929 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()->
3928 IsStorageUnlimited(origin1)); 3930 IsStorageUnlimited(origin1));
(...skipping 1889 matching lines...) Expand 10 before | Expand all | Expand 10 after
5818 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 5820 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5819 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); 5821 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
5820 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); 5822 EXPECT_TRUE(service_->IsExtensionEnabled(page_action));
5821 5823
5822 ExtensionPrefs* prefs = service_->extension_prefs(); 5824 ExtensionPrefs* prefs = service_->extension_prefs();
5823 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) & 5825 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) &
5824 Extension::DISABLE_SIDELOAD_WIPEOUT); 5826 Extension::DISABLE_SIDELOAD_WIPEOUT);
5825 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) & 5827 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) &
5826 Extension::DISABLE_SIDELOAD_WIPEOUT); 5828 Extension::DISABLE_SIDELOAD_WIPEOUT);
5827 } 5829 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698