15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/content_settings/content_settings_store.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_rule.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "url/gurl.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Mock; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CheckRule(const content_settings::Rule& rule, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& primary_pattern, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(primary_pattern.ToString(), rule.primary_pattern.ToString()); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(secondary_pattern.ToString(), rule.secondary_pattern.ToString()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(setting, content_settings::ValueToContentSetting(rule.value.get())); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper class which returns monotonically-increasing base::Time objects. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeTimer { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeTimer() : internal_(0) {} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time GetNext() { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Time::FromInternalValue(++internal_); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 internal_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockContentSettingsStoreObserver 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingsStore::Observer { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnContentSettingChanged, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const std::string& extension_id, bool incognito)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSetting GetContentSettingFromStore( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsStore* store, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& primary_url, const GURL& secondary_url, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito) { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<content_settings::RuleIterator> rule_iterator( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store->GetRuleIterator(content_type, resource_identifier, incognito)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> setting( 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::GetContentSettingValueAndPatterns( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rule_iterator.get(), primary_url, secondary_url, NULL, NULL)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_settings::ValueToContentSetting(setting.get()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetSettingsForOneTypeFromStore( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsStore* store, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<content_settings::Rule>* rules) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules->clear(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content_settings::RuleIterator> rule_iterator( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store->GetRuleIterator(content_type, resource_identifier, incognito)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (rule_iterator->HasNext()) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules->push_back(rule_iterator->Next()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingsStoreTest : public ::testing::Test { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsStoreTest() : 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_(new ContentSettingsStore()) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RegisterExtension(const std::string& ext_id) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->RegisterExtension(ext_id, timer_.GetNext(), true); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsStore* store() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return store_.get(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeTimer timer_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ContentSettingsStore> store_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingsStoreTest, RegisterUnregister) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::StrictMock<MockContentSettingsStoreObserver> observer; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->AddObserver(&observer); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url("http://www.youtube.com"); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register first extension 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ext_id("my_extension"); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterExtension(ext_id); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set setting 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(GURL("http://www.youtube.com")); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnContentSettingChanged(ext_id, false)); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store()->SetExtensionContentSetting(ext_id, 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTING_ALLOW, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kExtensionPrefsScopeRegular); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClear(&observer); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register second extension. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ext_id_2("my_second_extension"); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterExtension(ext_id_2); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnContentSettingChanged(ext_id_2, false)); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store()->SetExtensionContentSetting(ext_id_2, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTING_BLOCK, 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kExtensionPrefsScopeRegular); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unregister first extension. This shouldn't change the setting. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnContentSettingChanged(ext_id, false)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->UnregisterExtension(ext_id); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClear(&observer); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unregister second extension. This should reset the setting to its default 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnContentSettingChanged(ext_id_2, false)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->UnregisterExtension(ext_id_2); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingFromStore(store(), 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->RemoveObserver(&observer); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingsStoreTest, GetAllSettings) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito = false; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<content_settings::Rule> rules; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSettingsForOneTypeFromStore( 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store(), CONTENT_SETTINGS_TYPE_COOKIES, std::string(), incognito, &rules); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, rules.size()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register first extension. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ext_id("my_extension"); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterExtension(ext_id); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(GURL("http://www.youtube.com")); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store()->SetExtensionContentSetting(ext_id, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern, 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTING_ALLOW, 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kExtensionPrefsScopeRegular); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSettingsForOneTypeFromStore( 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store(), CONTENT_SETTINGS_TYPE_COOKIES, std::string(), incognito, &rules); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, rules.size()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckRule(rules[0], pattern, pattern, CONTENT_SETTING_ALLOW); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register second extension. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ext_id_2("my_second_extension"); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterExtension(ext_id_2); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern_2 = 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(GURL("http://www.example.com")); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store()->SetExtensionContentSetting(ext_id_2, 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern_2, 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pattern_2, 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTING_BLOCK, 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kExtensionPrefsScopeRegular); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetSettingsForOneTypeFromStore( 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store(), CONTENT_SETTINGS_TYPE_COOKIES, std::string(), incognito, &rules); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, rules.size()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Rules appear in the reverse installation order of the extensions. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckRule(rules[0], pattern_2, pattern_2, CONTENT_SETTING_BLOCK); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckRule(rules[1], pattern, pattern, CONTENT_SETTING_ALLOW); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable first extension. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->SetExtensionState(ext_id, false); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSettingsForOneTypeFromStore( 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store(), CONTENT_SETTINGS_TYPE_COOKIES, std::string(), incognito, &rules); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, rules.size()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckRule(rules[0], pattern_2, pattern_2, CONTENT_SETTING_BLOCK); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uninstall second extension. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store()->UnregisterExtension(ext_id_2); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSettingsForOneTypeFromStore( 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) store(), CONTENT_SETTINGS_TYPE_COOKIES, std::string(), incognito, &rules); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, rules.size()); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 254