diff options
author | weisert <weisert@yandex-team.ru> | 2015-11-26 08:04:39 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-26 16:05:19 +0000 |
commit | 12177f716b731a9fafa7cf11eaf0b7d23e8edc9d (patch) | |
tree | ec3e8cd37294c300e0f9500ab09a290f8382b74f | |
parent | 7c2671f0eaf3f55b3c36858f651d414689d63365 (diff) | |
download | chromium_src-12177f716b731a9fafa7cf11eaf0b7d23e8edc9d.zip chromium_src-12177f716b731a9fafa7cf11eaf0b7d23e8edc9d.tar.gz chromium_src-12177f716b731a9fafa7cf11eaf0b7d23e8edc9d.tar.bz2 |
Remove ScopedVector from extensions/api/declarative_content/*
BUG=554289
R=bauerb@chromium.org, rkc@chromium.org, rdevlin.cronin@chromium.org, battre@chromium.org
Review URL: https://codereview.chromium.org/1459323005
Cr-Commit-Position: refs/heads/master@{#361896}
41 files changed, 329 insertions, 290 deletions
diff --git a/chrome/browser/content_settings/content_settings_internal_extension_provider.cc b/chrome/browser/content_settings/content_settings_internal_extension_provider.cc index 45e2af7..b6c49a1 100644 --- a/chrome/browser/content_settings/content_settings_internal_extension_provider.cc +++ b/chrome/browser/content_settings/content_settings_internal_extension_provider.cc @@ -60,7 +60,7 @@ InternalExtensionProvider::~InternalExtensionProvider() { DCHECK(!registrar_.get()); } -RuleIterator* InternalExtensionProvider::GetRuleIterator( +scoped_ptr<RuleIterator> InternalExtensionProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { diff --git a/chrome/browser/content_settings/content_settings_internal_extension_provider.h b/chrome/browser/content_settings/content_settings_internal_extension_provider.h index 99a67af..a815bf0 100644 --- a/chrome/browser/content_settings/content_settings_internal_extension_provider.h +++ b/chrome/browser/content_settings/content_settings_internal_extension_provider.h @@ -36,9 +36,10 @@ class InternalExtensionProvider : public ObservableProvider, ~InternalExtensionProvider() override; // ProviderInterface methods: - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc b/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc index 619ab75..bcb56d9 100644 --- a/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc +++ b/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc @@ -54,11 +54,8 @@ TEST_F(PolicyProviderTest, DefaultGeolocationContentSetting) { prefs->SetManagedPref(prefs::kManagedDefaultGeolocationSetting, new base::FundamentalValue(CONTENT_SETTING_BLOCK)); - rule_iterator.reset( - provider.GetRuleIterator( - CONTENT_SETTINGS_TYPE_GEOLOCATION, - std::string(), - false)); + rule_iterator = provider.GetRuleIterator(CONTENT_SETTINGS_TYPE_GEOLOCATION, + std::string(), false); EXPECT_TRUE(rule_iterator->HasNext()); Rule rule = rule_iterator->Next(); EXPECT_FALSE(rule_iterator->HasNext()); diff --git a/chrome/browser/content_settings/content_settings_supervised_provider.cc b/chrome/browser/content_settings/content_settings_supervised_provider.cc index e956f0a..af3c721 100644 --- a/chrome/browser/content_settings/content_settings_supervised_provider.cc +++ b/chrome/browser/content_settings/content_settings_supervised_provider.cc @@ -51,7 +51,7 @@ SupervisedProvider::SupervisedProvider( SupervisedProvider::~SupervisedProvider() { } -RuleIterator* SupervisedProvider::GetRuleIterator( +scoped_ptr<RuleIterator> SupervisedProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { diff --git a/chrome/browser/content_settings/content_settings_supervised_provider.h b/chrome/browser/content_settings/content_settings_supervised_provider.h index ef305a5..a5cc640 100644 --- a/chrome/browser/content_settings/content_settings_supervised_provider.h +++ b/chrome/browser/content_settings/content_settings_supervised_provider.h @@ -26,9 +26,10 @@ class SupervisedProvider : public ObservableProvider { ~SupervisedProvider() override; // ProviderInterface implementations. - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/chrome/browser/content_settings/content_settings_supervised_provider_unittest.cc b/chrome/browser/content_settings/content_settings_supervised_provider_unittest.cc index 1533cb7..56e2f04 100644 --- a/chrome/browser/content_settings/content_settings_supervised_provider_unittest.cc +++ b/chrome/browser/content_settings/content_settings_supervised_provider_unittest.cc @@ -61,8 +61,8 @@ TEST_F(SupervisedUserProviderTest, GeolocationTest) { supervised_users::kGeolocationDisabled, scoped_ptr<base::Value>(new base::FundamentalValue(true))); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), false)); + rule_iterator = provider_->GetRuleIterator(CONTENT_SETTINGS_TYPE_GEOLOCATION, + std::string(), false); ASSERT_TRUE(rule_iterator->HasNext()); Rule rule = rule_iterator->Next(); EXPECT_FALSE(rule_iterator->HasNext()); @@ -79,8 +79,8 @@ TEST_F(SupervisedUserProviderTest, GeolocationTest) { supervised_users::kGeolocationDisabled, scoped_ptr<base::Value>(new base::FundamentalValue(false))); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), false)); + rule_iterator = provider_->GetRuleIterator(CONTENT_SETTINGS_TYPE_GEOLOCATION, + std::string(), false); EXPECT_FALSE(rule_iterator->HasNext()); } @@ -89,8 +89,8 @@ TEST_F(SupervisedUserProviderTest, CameraMicTest) { CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), false)); EXPECT_FALSE(rule_iterator->HasNext()); rule_iterator.reset(); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false)); + rule_iterator = provider_->GetRuleIterator( + CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false); EXPECT_FALSE(rule_iterator->HasNext()); rule_iterator.reset(); @@ -105,8 +105,8 @@ TEST_F(SupervisedUserProviderTest, CameraMicTest) { supervised_users::kCameraMicDisabled, scoped_ptr<base::Value>(new base::FundamentalValue(true))); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), false)); + rule_iterator = provider_->GetRuleIterator( + CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), false); ASSERT_TRUE(rule_iterator->HasNext()); Rule rule = rule_iterator->Next(); EXPECT_FALSE(rule_iterator->HasNext()); @@ -116,8 +116,8 @@ TEST_F(SupervisedUserProviderTest, CameraMicTest) { EXPECT_EQ(CONTENT_SETTING_BLOCK, ValueToContentSetting(rule.value.get())); rule_iterator.reset(); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false)); + rule_iterator = provider_->GetRuleIterator( + CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false); ASSERT_TRUE(rule_iterator->HasNext()); rule = rule_iterator->Next(); EXPECT_FALSE(rule_iterator->HasNext()); @@ -138,12 +138,12 @@ TEST_F(SupervisedUserProviderTest, CameraMicTest) { supervised_users::kCameraMicDisabled, scoped_ptr<base::Value>(new base::FundamentalValue(false))); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), false)); + rule_iterator = provider_->GetRuleIterator( + CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), false); EXPECT_FALSE(rule_iterator->HasNext()); rule_iterator.reset(); - rule_iterator.reset(provider_->GetRuleIterator( - CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false)); + rule_iterator = provider_->GetRuleIterator( + CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), false); EXPECT_FALSE(rule_iterator->HasNext()); } diff --git a/chrome/browser/extensions/active_script_controller_browsertest.cc b/chrome/browser/extensions/active_script_controller_browsertest.cc index ce80212..3b81195 100644 --- a/chrome/browser/extensions/active_script_controller_browsertest.cc +++ b/chrome/browser/extensions/active_script_controller_browsertest.cc @@ -2,8 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <utility> +#include <vector> + #include "base/files/file_path.h" #include "base/macros.h" +#include "base/memory/scoped_ptr.h" #include "base/strings/stringprintf.h" #include "chrome/browser/extensions/active_script_controller.h" #include "chrome/browser/extensions/extension_action.h" @@ -83,7 +87,7 @@ class ActiveScriptControllerBrowserTest : public ExtensionBrowserTest { InjectionType injection_type); private: - ScopedVector<TestExtensionDir> test_extension_dirs_; + std::vector<scoped_ptr<TestExtensionDir>> test_extension_dirs_; std::vector<const Extension*> extensions_; }; @@ -151,7 +155,7 @@ const Extension* ActiveScriptControllerBrowserTest::CreateExtension( const Extension* extension = LoadExtension(dir->unpacked_path()); if (extension) { - test_extension_dirs_.push_back(dir.release()); + test_extension_dirs_.push_back(std::move(dir)); extensions_.push_back(extension); } diff --git a/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc b/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc index f2cd614..d1d0c5e 100644 --- a/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc +++ b/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc @@ -4,6 +4,7 @@ #include <map> #include <string> +#include <utility> #include <vector> #include "base/callback.h" @@ -141,12 +142,7 @@ scoped_ptr<KeyedService> StubEventRouterFactoryFunction( class AudioModemApiUnittest : public ExtensionApiUnittest { public: AudioModemApiUnittest() {} - ~AudioModemApiUnittest() override { - for (const auto& events : events_by_extension_id_) { - for (const Event* event : events.second) - delete event; - } - } + ~AudioModemApiUnittest() override {} protected: template<typename Function> @@ -185,14 +181,14 @@ class AudioModemApiUnittest : public ExtensionApiUnittest { return extensions_by_name_[name].get(); } - const std::vector<const Event*>& - GetEventsForExtension(const std::string& name) { + const std::vector<scoped_ptr<const Event>>& GetEventsForExtension( + const std::string& name) { const Extension* extension = extensions_by_name_[name].get(); DCHECK(extension); return events_by_extension_id_[extension->id()]; } - const std::vector<const Event*>& GetEvents() { + const std::vector<scoped_ptr<const Event>>& GetEvents() { return GetEventsForExtension(std::string()); } @@ -211,16 +207,13 @@ class AudioModemApiUnittest : public ExtensionApiUnittest { void CaptureEvent(const std::string& extension_id, scoped_ptr<Event> event) { - // Since scoped_ptr (and ScopedVector) do not work inside STL containers, - // we must manage this memory manually. It is cleaned up by the destructor. - events_by_extension_id_[extension_id].push_back(event.release()); + events_by_extension_id_[extension_id].push_back(std::move(event)); } std::map<std::string, scoped_refptr<Extension>> extensions_by_name_; - // We own all of these pointers. - // Do not remove them from the map without calling delete. - std::map<std::string, std::vector<const Event*>> events_by_extension_id_; + std::map<std::string, std::vector<scoped_ptr<const Event>>> + events_by_extension_id_; }; TEST_F(AudioModemApiUnittest, TransmitBasic) { @@ -360,10 +353,10 @@ TEST_F(AudioModemApiUnittest, ReceiveMultiple) { // Check the token received. scoped_ptr<DictionaryValue> expected_token( CreateReceivedToken("abcd", "inaudible")); - EXPECT_TRUE(ReceivedSingleToken( - GetEventsForExtension("ext1")[0], expected_token.get())); - EXPECT_TRUE(ReceivedSingleToken( - GetEventsForExtension("ext2")[0], expected_token.get())); + EXPECT_TRUE(ReceivedSingleToken(GetEventsForExtension("ext1")[0].get(), + expected_token.get())); + EXPECT_TRUE(ReceivedSingleToken(GetEventsForExtension("ext2")[0].get(), + expected_token.get())); // If one extension stops, the modem is still receiving for the other. EXPECT_EQ("success", RunFunction<AudioModemStopReceiveFunction>( @@ -376,8 +369,8 @@ TEST_F(AudioModemApiUnittest, ReceiveMultiple) { EXPECT_EQ(1u, GetEventsForExtension("ext1").size()); EXPECT_EQ(2u, GetEventsForExtension("ext2").size()); expected_token.reset(CreateReceivedToken("1234", "inaudible")); - EXPECT_TRUE(ReceivedSingleToken( - GetEventsForExtension("ext2")[1], expected_token.get())); + EXPECT_TRUE(ReceivedSingleToken(GetEventsForExtension("ext2")[1].get(), + expected_token.get())); EXPECT_EQ("success", RunFunction<AudioModemStopReceiveFunction>( CreateList(new StringValue("inaudible")), GetExtension("ext2"))); diff --git a/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.cc b/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.cc index 172ff8e0..188227b 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.cc +++ b/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.cc @@ -6,6 +6,7 @@ #include "base/memory/scoped_ptr.h" #include "chrome/browser/extensions/api/content_settings/content_settings_store.h" +#include "components/content_settings/core/browser/content_settings_rule.h" #include "components/content_settings/core/browser/content_settings_utils.h" #include "components/content_settings/core/common/content_settings_pattern.h" @@ -21,7 +22,7 @@ CustomExtensionProvider::CustomExtensionProvider( CustomExtensionProvider::~CustomExtensionProvider() { } -RuleIterator* CustomExtensionProvider::GetRuleIterator( +scoped_ptr<RuleIterator> CustomExtensionProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { diff --git a/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.h b/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.h index e74343a..f34346e 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.h +++ b/chrome/browser/extensions/api/content_settings/content_settings_custom_extension_provider.h @@ -24,9 +24,10 @@ class CustomExtensionProvider : public ObservableProvider, ~CustomExtensionProvider() override; // ProviderInterface methods: - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/chrome/browser/extensions/api/content_settings/content_settings_store.cc b/chrome/browser/extensions/api/content_settings/content_settings_store.cc index 523203d..ee4a2cc 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_store.cc +++ b/chrome/browser/extensions/api/content_settings/content_settings_store.cc @@ -5,11 +5,12 @@ #include "chrome/browser/extensions/api/content_settings/content_settings_store.h" #include <set> +#include <utility> +#include <vector> #include "base/debug/alias.h" #include "base/logging.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/values.h" @@ -54,11 +55,11 @@ ContentSettingsStore::~ContentSettingsStore() { STLDeleteValues(&entries_); } -RuleIterator* ContentSettingsStore::GetRuleIterator( +scoped_ptr<RuleIterator> ContentSettingsStore::GetRuleIterator( ContentSettingsType type, const content_settings::ResourceIdentifier& identifier, bool incognito) const { - ScopedVector<RuleIterator> iterators; + std::vector<scoped_ptr<RuleIterator>> iterators; // Iterate the extensions based on install time (last installed extensions // first). ExtensionEntryMap::const_reverse_iterator entry; @@ -87,7 +88,8 @@ RuleIterator* ContentSettingsStore::GetRuleIterator( entry->second->settings.GetRuleIterator(type, identifier, NULL)); } } - return new ConcatenationIterator(&iterators, auto_lock.release()); + return scoped_ptr<RuleIterator>( + new ConcatenationIterator(std::move(iterators), auto_lock.release())); } void ContentSettingsStore::SetExtensionContentSetting( diff --git a/chrome/browser/extensions/api/content_settings/content_settings_store.h b/chrome/browser/extensions/api/content_settings/content_settings_store.h index 33aa972..c40df85 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_store.h +++ b/chrome/browser/extensions/api/content_settings/content_settings_store.h @@ -51,7 +51,7 @@ class ContentSettingsStore // ////////////////////////////////////////////////////////////////////////// - content_settings::RuleIterator* GetRuleIterator( + scoped_ptr<content_settings::RuleIterator> GetRuleIterator( ContentSettingsType type, const content_settings::ResourceIdentifier& identifier, bool incognito) const; diff --git a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc index 4a21a40..cd6b3f9 100644 --- a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc +++ b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc @@ -4,8 +4,6 @@ #include "chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h" -#include <utility> - #include "base/bind.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/api/declarative_content/content_constants.h" @@ -132,7 +130,7 @@ void ChromeContentRulesRegistry::MonitorWebContentsForRuleEvaluation( active_rules_[contents] = std::set<const ContentRule*>(); EvaluationScope evaluation_scope(this); - for (ContentPredicateEvaluator* evaluator : evaluators_) + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : evaluators_) evaluator->TrackForWebContents(contents); } @@ -142,21 +140,20 @@ void ChromeContentRulesRegistry::DidNavigateMainFrame( const content::FrameNavigateParams& params) { if (ContainsKey(active_rules_, contents)) { EvaluationScope evaluation_scope(this); - for (ContentPredicateEvaluator* evaluator : evaluators_) + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : evaluators_) evaluator->OnWebContentsNavigation(contents, details, params); } } ChromeContentRulesRegistry::ContentRule::ContentRule( const Extension* extension, - ScopedVector<const ContentCondition> conditions, - ScopedVector<const ContentAction> actions, + std::vector<scoped_ptr<const ContentCondition>> conditions, + std::vector<scoped_ptr<const ContentAction>> actions, int priority) : extension(extension), - conditions(conditions.Pass()), - actions(actions.Pass()), - priority(priority) { -} + conditions(std::move(conditions)), + actions(std::move(actions)), + priority(priority) {} ChromeContentRulesRegistry::ContentRule::~ContentRule() {} @@ -166,7 +163,7 @@ ChromeContentRulesRegistry::CreateRule( const std::map<std::string, ContentPredicateFactory*>& predicate_factories, const api::events::Rule& api_rule, std::string* error) { - ScopedVector<const ContentCondition> conditions; + std::vector<scoped_ptr<const ContentCondition>> conditions; for (const linked_ptr<base::Value>& value : api_rule.conditions) { conditions.push_back( CreateContentCondition(extension, predicate_factories, *value, error)); @@ -174,7 +171,7 @@ ChromeContentRulesRegistry::CreateRule( return scoped_ptr<ContentRule>(); } - ScopedVector<const ContentAction> actions; + std::vector<scoped_ptr<const ContentAction>> actions; for (const linked_ptr<base::Value>& value : api_rule.actions) { actions.push_back(ContentAction::Create(browser_context(), extension, *value, error)); @@ -184,9 +181,9 @@ ChromeContentRulesRegistry::CreateRule( // Note: |api_rule| may contain tags, but these are ignored. - return make_scoped_ptr( - new ContentRule(extension, conditions.Pass(), actions.Pass(), - *api_rule.priority)); + return make_scoped_ptr(new ContentRule(extension, std::move(conditions), + std::move(actions), + *api_rule.priority)); } bool ChromeContentRulesRegistry::ManagingRulesForBrowserContext( @@ -200,10 +197,10 @@ bool ChromeContentRulesRegistry::ManagingRulesForBrowserContext( bool ChromeContentRulesRegistry::EvaluateConditionForTab( const ContentCondition* condition, content::WebContents* tab) { - for (const ContentPredicate* predicate : condition->predicates) { - if (predicate && - !predicate->IsIgnored() && - !predicate->GetEvaluator()->EvaluatePredicate(predicate, tab)) { + for (const scoped_ptr<const ContentPredicate>& predicate : + condition->predicates) { + if (predicate && !predicate->IsIgnored() && + !predicate->GetEvaluator()->EvaluatePredicate(predicate.get(), tab)) { return false; } } @@ -221,8 +218,9 @@ ChromeContentRulesRegistry::GetMatchingRules(content::WebContents* tab) const { !ShouldEvaluateExtensionRulesForIncognitoRenderer(rule->extension)) continue; - for (const ContentCondition* condition : rule->conditions) { - if (EvaluateConditionForTab(condition, tab)) + for (const scoped_ptr<const ContentCondition>& condition : + rule->conditions) { + if (EvaluateConditionForTab(condition.get(), tab)) matching_rules.insert(rule); } } @@ -244,8 +242,10 @@ std::string ChromeContentRulesRegistry::AddRulesImpl( new_predicates; std::map<std::string, ContentPredicateFactory*> predicate_factories; - for (ContentPredicateEvaluator* evaluator : evaluators_) - predicate_factories[evaluator->GetPredicateApiAttributeName()] = evaluator; + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : evaluators_) { + predicate_factories[evaluator->GetPredicateApiAttributeName()] = + evaluator.get(); + } for (const linked_ptr<api::events::Rule>& api_rule : api_rules) { ExtensionIdRuleIdPair rule_id(extension_id, *api_rule->id); @@ -256,8 +256,9 @@ std::string ChromeContentRulesRegistry::AddRulesImpl( if (!error.empty()) { // Notify evaluators that none of the created predicates will be tracked // after all. - for (ContentPredicateEvaluator* evaluator : evaluators_) { - if (!new_predicates[evaluator].empty()) { + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : + evaluators_) { + if (!new_predicates[evaluator.get()].empty()) { evaluator->TrackPredicates( std::map<const void*, std::vector<const ContentPredicate*>>()); } @@ -269,11 +270,13 @@ std::string ChromeContentRulesRegistry::AddRulesImpl( // Group predicates by evaluator and rule, so we can later notify the // evaluators that they have new predicates to manage. - for (const ContentCondition* condition : rule->conditions) { - for (const ContentPredicate* predicate : condition->predicates) { - if (predicate) { + for (const scoped_ptr<const ContentCondition>& condition : + rule->conditions) { + for (const scoped_ptr<const ContentPredicate>& predicate : + condition->predicates) { + if (predicate.get()) { new_predicates[predicate->GetEvaluator()][rule.get()].push_back( - predicate); + predicate.get()); } } } @@ -282,8 +285,8 @@ std::string ChromeContentRulesRegistry::AddRulesImpl( } // Notify the evaluators about their new predicates. - for (ContentPredicateEvaluator* evaluator : evaluators_) - evaluator->TrackPredicates(new_predicates[evaluator]); + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : evaluators_) + evaluator->TrackPredicates(new_predicates[evaluator.get()]); // Wohoo, everything worked fine. content_rules_.insert(new_rules.begin(), new_rules.end()); @@ -321,7 +324,7 @@ std::string ChromeContentRulesRegistry::RemoveRulesImpl( ContentAction::ApplyInfo apply_info = {rule->extension, browser_context(), tab_rules_pair.first, rule->priority}; - for (const ContentAction* action : rule->actions) + for (const auto& action : rule->actions) action->Revert(apply_info); tab_rules_pair.second.erase(rule); } @@ -332,7 +335,7 @@ std::string ChromeContentRulesRegistry::RemoveRulesImpl( } // Notify the evaluators to stop tracking the predicates that will be removed. - for (ContentPredicateEvaluator* evaluator : evaluators_) + for (const scoped_ptr<ContentPredicateEvaluator>& evaluator : evaluators_) evaluator->StopTrackingPredicates(predicate_groups_to_stop_tracking); // Remove the rules. @@ -366,10 +369,10 @@ void ChromeContentRulesRegistry::EvaluateConditionsForTab( ContentAction::ApplyInfo apply_info = {rule->extension, browser_context(), tab, rule->priority}; if (!ContainsKey(prev_matching_rules, rule)) { - for (const ContentAction* action : rule->actions) + for (const scoped_ptr<const ContentAction>& action : rule->actions) action->Apply(apply_info); } else { - for (const ContentAction* action : rule->actions) + for (const scoped_ptr<const ContentAction>& action : rule->actions) action->Reapply(apply_info); } } @@ -377,7 +380,7 @@ void ChromeContentRulesRegistry::EvaluateConditionsForTab( if (!ContainsKey(matching_rules, rule)) { ContentAction::ApplyInfo apply_info = {rule->extension, browser_context(), tab, rule->priority}; - for (const ContentAction* action : rule->actions) + for (const scoped_ptr<const ContentAction>& action : rule->actions) action->Revert(apply_info); } } diff --git a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h index 494715e..d2aa910 100644 --- a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h +++ b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h @@ -14,7 +14,6 @@ #include "base/callback.h" #include "base/memory/linked_ptr.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "chrome/browser/extensions/api/declarative_content/content_action.h" #include "chrome/browser/extensions/api/declarative_content/content_condition.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate_evaluator.h" @@ -54,7 +53,7 @@ class ChromeContentRulesRegistry public ContentPredicateEvaluator::Delegate { public: using PredicateEvaluatorsFactory = - base::Callback<ScopedVector<ContentPredicateEvaluator>( + base::Callback<std::vector<scoped_ptr<ContentPredicateEvaluator>>( ContentPredicateEvaluator::Delegate*)>; // For testing, |cache_delegate| can be NULL. In that case it constructs the @@ -103,14 +102,14 @@ class ChromeContentRulesRegistry struct ContentRule { public: ContentRule(const Extension* extension, - ScopedVector<const ContentCondition> conditions, - ScopedVector<const ContentAction> actions, + std::vector<scoped_ptr<const ContentCondition>> conditions, + std::vector<scoped_ptr<const ContentAction>> actions, int priority); ~ContentRule(); const Extension* extension; - ScopedVector<const ContentCondition> conditions; - ScopedVector<const ContentAction> actions; + std::vector<scoped_ptr<const ContentCondition>> conditions; + std::vector<scoped_ptr<const ContentAction>> actions; int priority; private: @@ -173,7 +172,7 @@ class ChromeContentRulesRegistry // The evaluators responsible for creating predicates and tracking // predicate-related state. - ScopedVector<ContentPredicateEvaluator> evaluators_; + std::vector<scoped_ptr<ContentPredicateEvaluator>> evaluators_; // Specifies what to do with evaluation requests. EvaluationDisposition evaluation_disposition_; diff --git a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry_unittest.cc b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry_unittest.cc index a9d1a6c..e392baf 100644 --- a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry_unittest.cc +++ b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry_unittest.cc @@ -4,8 +4,6 @@ #include "chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h" -#include <string> - #include "base/bind.h" #include "base/test/values_test_util.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate.h" @@ -116,13 +114,13 @@ class TestPredicateEvaluator : public ContentPredicateEvaluator { }; // Create the test evaluator and set |evaluator| to its pointer. -ScopedVector<ContentPredicateEvaluator> CreateTestEvaluator( +std::vector<scoped_ptr<ContentPredicateEvaluator>> CreateTestEvaluator( TestPredicateEvaluator** evaluator, ContentPredicateEvaluator::Delegate* delegate) { - ScopedVector<ContentPredicateEvaluator> evaluators; + std::vector<scoped_ptr<ContentPredicateEvaluator>> evaluators; *evaluator = new TestPredicateEvaluator(delegate); - evaluators.push_back(*evaluator); - return evaluators.Pass(); + evaluators.push_back(scoped_ptr<ContentPredicateEvaluator>(*evaluator)); + return evaluators; } } // namespace diff --git a/chrome/browser/extensions/api/declarative_content/content_condition.cc b/chrome/browser/extensions/api/declarative_content/content_condition.cc index 5f217cb..6cce824 100644 --- a/chrome/browser/extensions/api/declarative_content/content_condition.cc +++ b/chrome/browser/extensions/api/declarative_content/content_condition.cc @@ -4,6 +4,8 @@ #include "chrome/browser/extensions/api/declarative_content/content_condition.h" +#include <utility> + #include "base/bind.h" #include "base/strings/stringprintf.h" #include "base/values.h" @@ -25,9 +27,8 @@ const char kUnknownConditionAttribute[] = "Unknown condition attribute '%s'"; } // namespace ContentCondition::ContentCondition( - ScopedVector<const ContentPredicate> predicates) - : predicates(predicates.Pass()) { -} + std::vector<scoped_ptr<const ContentPredicate>> predicates) + : predicates(std::move(predicates)) {} ContentCondition::~ContentCondition() {} @@ -54,7 +55,7 @@ scoped_ptr<ContentCondition> CreateContentCondition( return scoped_ptr<ContentCondition>(); } - ScopedVector<const ContentPredicate> predicates; + std::vector<scoped_ptr<const ContentPredicate>> predicates; for (base::DictionaryValue::Iterator iter(*api_condition_dict); !iter.IsAtEnd(); iter.Advance()) { const std::string& predicate_name = iter.key(); @@ -75,7 +76,8 @@ scoped_ptr<ContentCondition> CreateContentCondition( return scoped_ptr<ContentCondition>(); } - return scoped_ptr<ContentCondition>(new ContentCondition(predicates.Pass())); + return scoped_ptr<ContentCondition>( + new ContentCondition(std::move(predicates))); } } // namespace extensions diff --git a/chrome/browser/extensions/api/declarative_content/content_condition.h b/chrome/browser/extensions/api/declarative_content/content_condition.h index 7df7fe3..baefed6 100644 --- a/chrome/browser/extensions/api/declarative_content/content_condition.h +++ b/chrome/browser/extensions/api/declarative_content/content_condition.h @@ -7,9 +7,9 @@ #include <map> #include <string> +#include <vector> #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate_evaluator.h" namespace base { @@ -29,10 +29,11 @@ class Extension; // rule1['conditions'][0] is represented by a ContentCondition. struct ContentCondition { public: - explicit ContentCondition(ScopedVector<const ContentPredicate> predicates); + explicit ContentCondition( + std::vector<scoped_ptr<const ContentPredicate>> predicates); ~ContentCondition(); - ScopedVector<const ContentPredicate> predicates; + std::vector<scoped_ptr<const ContentPredicate>> predicates; private: DISALLOW_COPY_AND_ASSIGN(ContentCondition); diff --git a/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc b/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc index 0f07761..3f8413f 100644 --- a/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc +++ b/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc @@ -4,6 +4,8 @@ #include "chrome/browser/extensions/api/declarative_content/content_condition.h" +#include <vector> + #include "base/bind.h" #include "base/test/values_test_util.h" #include "base/values.h" @@ -127,7 +129,10 @@ TEST(DeclarativeContentConditionTest, AllSpecifiedPredicatesCreated) { ASSERT_TRUE(condition); ASSERT_EQ(1u, factory1.created_predicates().size()); ASSERT_EQ(1u, factory2.created_predicates().size()); - EXPECT_THAT(condition->predicates, + std::vector<const ContentPredicate*> predicates; + for (const auto& predicate : condition->predicates) + predicates.push_back(predicate.get()); + EXPECT_THAT(predicates, UnorderedElementsAre(factory1.created_predicates()[0], factory2.created_predicates()[0])); } diff --git a/chrome/browser/extensions/api/declarative_content/declarative_content_css_condition_tracker_unittest.cc b/chrome/browser/extensions/api/declarative_content/declarative_content_css_condition_tracker_unittest.cc index 0eb7979..a2cda6a 100644 --- a/chrome/browser/extensions/api/declarative_content/declarative_content_css_condition_tracker_unittest.cc +++ b/chrome/browser/extensions/api/declarative_content/declarative_content_css_condition_tracker_unittest.cc @@ -5,7 +5,6 @@ #include "chrome/browser/extensions/api/declarative_content/declarative_content_css_condition_tracker.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "base/test/values_test_util.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate_evaluator.h" #include "chrome/browser/extensions/api/declarative_content/declarative_content_condition_tracker_test.h" @@ -148,7 +147,7 @@ TEST_F(DeclarativeContentCssConditionTrackerTest, AddAndRemovePredicates) { // Check that adding predicates sends a WatchPages message with the // corresponding selectors to the tab's RenderProcessHost. - ScopedVector<const ContentPredicate> predicates; + std::vector<scoped_ptr<const ContentPredicate>> predicates; predicates.push_back(CreatePredicate("[\"a\", \"div\"]")); predicates.push_back(CreatePredicate("[\"b\"]")); predicates.push_back(CreatePredicate("[\"input\"]")); @@ -156,10 +155,10 @@ TEST_F(DeclarativeContentCssConditionTrackerTest, AddAndRemovePredicates) { // Add the predicates in two groups: (0, 1) and (2). std::map<const void*, std::vector<const ContentPredicate*>> predicate_groups; const void* const group1 = GeneratePredicateGroupID(); - predicate_groups[group1].push_back(predicates[0]); - predicate_groups[group1].push_back(predicates[1]); + predicate_groups[group1].push_back(predicates[0].get()); + predicate_groups[group1].push_back(predicates[1].get()); const void* const group2 = GeneratePredicateGroupID(); - predicate_groups[group2].push_back(predicates[2]); + predicate_groups[group2].push_back(predicates[2].get()); std::set<std::string> watched_selectors; watched_selectors.insert("a"); diff --git a/chrome/browser/extensions/api/declarative_content/declarative_content_is_bookmarked_condition_tracker_unittest.cc b/chrome/browser/extensions/api/declarative_content/declarative_content_is_bookmarked_condition_tracker_unittest.cc index 5027c6c..b114258 100644 --- a/chrome/browser/extensions/api/declarative_content/declarative_content_is_bookmarked_condition_tracker_unittest.cc +++ b/chrome/browser/extensions/api/declarative_content/declarative_content_is_bookmarked_condition_tracker_unittest.cc @@ -6,10 +6,10 @@ #include <set> #include <utility> +#include <vector> #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/values_test_util.h" @@ -230,24 +230,26 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, AddAndRemoveBookmark) { // Create two tabs. - ScopedVector<content::WebContents> tabs; + std::vector<scoped_ptr<content::WebContents>> tabs; for (int i = 0; i < 2; ++i) { tabs.push_back(MakeTab()); delegate_.evaluation_requests().clear(); - tracker_->TrackForWebContents(tabs.back()); + tracker_->TrackForWebContents(tabs.back().get()); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs.back())); - EXPECT_TRUE(CheckPredicates(tabs.back(), false)); + UnorderedElementsAre(tabs.back().get())); + EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); } // Navigate the first tab to a URL that we will bookmark. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://bookmarked/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://bookmarked/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Bookmark the first tab's URL. delegate_.evaluation_requests().clear(); @@ -255,40 +257,44 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, bookmark_model_->AddURL(bookmark_model_->other_node(), 0, base::ASCIIToUTF16("title"), GURL("http://bookmarked/")); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Remove the bookmark. delegate_.evaluation_requests().clear(); bookmark_model_->Remove(node); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } // Tests that adding and removing bookmarks triggers evaluation requests for the // matching WebContents. TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { // Create two tabs. - ScopedVector<content::WebContents> tabs; + std::vector<scoped_ptr<content::WebContents>> tabs; for (int i = 0; i < 2; ++i) { tabs.push_back(MakeTab()); delegate_.evaluation_requests().clear(); - tracker_->TrackForWebContents(tabs.back()); + tracker_->TrackForWebContents(tabs.back().get()); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs.back())); - EXPECT_TRUE(CheckPredicates(tabs.back(), false)); + UnorderedElementsAre(tabs.back().get())); + EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); } // Navigate the first tab to a URL that we will bookmark. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://bookmarked/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://bookmarked/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); { // Check that evaluation requests occur outside ExtensiveBookmarkChanges for @@ -300,12 +306,13 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { base::ASCIIToUTF16("title"), GURL("http://bookmarked/")); EXPECT_TRUE(delegate_.evaluation_requests().empty()); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); bookmark_model_->EndExtensiveChanges(); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Check that evaluation requests occur outside ExtensiveBookmarkChanges for // removed nodes. @@ -313,12 +320,13 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { bookmark_model_->BeginExtensiveChanges(); bookmark_model_->Remove(node); EXPECT_TRUE(delegate_.evaluation_requests().empty()); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); bookmark_model_->EndExtensiveChanges(); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } { @@ -332,12 +340,13 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { base::ASCIIToUTF16("title"), GURL("http://bookmarked/")); EXPECT_TRUE(delegate_.evaluation_requests().empty()); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Check that evaluation requests occur outside ScopedGroupBookmarkActions // for removed nodes. @@ -346,12 +355,13 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { bookmarks::ScopedGroupBookmarkActions scoped_group(bookmark_model_); bookmark_model_->Remove(node); EXPECT_TRUE(delegate_.evaluation_requests().empty()); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } } @@ -368,55 +378,63 @@ TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, Navigation) { GURL("http://bookmarked2/")); // Create two tabs. - ScopedVector<content::WebContents> tabs; + std::vector<scoped_ptr<content::WebContents>> tabs; for (int i = 0; i < 2; ++i) { tabs.push_back(MakeTab()); delegate_.evaluation_requests().clear(); - tracker_->TrackForWebContents(tabs.back()); + tracker_->TrackForWebContents(tabs.back().get()); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs.back())); - EXPECT_TRUE(CheckPredicates(tabs.back(), false)); + UnorderedElementsAre(tabs.back().get())); + EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); } // Navigate the first tab to one bookmarked URL. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://bookmarked1/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://bookmarked1/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Navigate the first tab to another bookmarked URL. The contents have // changed, so we should receive a new evaluation request even though the // bookmarked state hasn't. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://bookmarked2/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://bookmarked2/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], true)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), true)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Navigate the first tab to a non-bookmarked URL. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://not-bookmarked1/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://not-bookmarked1/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); // Navigate the first tab to another non-bookmarked URL. The contents have // changed, so we should receive a new evaluation request even though the // bookmarked state hasn't. delegate_.evaluation_requests().clear(); - LoadURL(tabs[0], GURL("http://not-bookmarked2/")); - tracker_->OnWebContentsNavigation(tabs[0], content::LoadCommittedDetails(), + LoadURL(tabs[0].get(), GURL("http://not-bookmarked2/")); + tracker_->OnWebContentsNavigation(tabs[0].get(), + content::LoadCommittedDetails(), content::FrameNavigateParams()); - EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tabs[0])); - EXPECT_TRUE(CheckPredicates(tabs[0], false)); - EXPECT_TRUE(CheckPredicates(tabs[1], false)); + EXPECT_THAT(delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get())); + EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); + EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); } } // namespace extensions diff --git a/chrome/browser/extensions/api/declarative_content/declarative_content_page_url_condition_tracker_unittest.cc b/chrome/browser/extensions/api/declarative_content/declarative_content_page_url_condition_tracker_unittest.cc index a6bc408..54d043f 100644 --- a/chrome/browser/extensions/api/declarative_content/declarative_content_page_url_condition_tracker_unittest.cc +++ b/chrome/browser/extensions/api/declarative_content/declarative_content_page_url_condition_tracker_unittest.cc @@ -5,9 +5,9 @@ #include "chrome/browser/extensions/api/declarative_content/declarative_content_page_url_condition_tracker.h" #include <set> +#include <vector> #include "base/memory/ref_counted.h" -#include "base/memory/scoped_vector.h" #include "base/stl_util.h" #include "base/test/values_test_util.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate_evaluator.h" @@ -133,22 +133,22 @@ TEST(DeclarativeContentPageUrlPredicateTest, PageUrlPredicate) { // the matching WebContents. TEST_F(DeclarativeContentPageUrlConditionTrackerTest, AddAndRemovePredicates) { // Create four tabs. - ScopedVector<content::WebContents> tabs; + std::vector<scoped_ptr<content::WebContents>> tabs; for (int i = 0; i < 4; ++i) { tabs.push_back(MakeTab()); delegate_.evaluation_requests().clear(); - tracker_.TrackForWebContents(tabs.back()); + tracker_.TrackForWebContents(tabs.back().get()); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs.back())); + UnorderedElementsAre(tabs.back().get())); } // Navigate three of them to URLs that will match with predicats we're about // to add. - LoadURL(tabs[0], GURL("http://test1/")); - LoadURL(tabs[1], GURL("http://test2/")); - LoadURL(tabs[2], GURL("http://test3/")); + LoadURL(tabs[0].get(), GURL("http://test1/")); + LoadURL(tabs[1].get(), GURL("http://test2/")); + LoadURL(tabs[2].get(), GURL("http://test3/")); - ScopedVector<const ContentPredicate> predicates; + std::vector<scoped_ptr<const ContentPredicate>> predicates; std::string error; predicates.push_back(CreatePredicate("{\"hostPrefix\": \"test1\"}")); predicates.push_back(CreatePredicate("{\"hostPrefix\": \"test2\"}")); @@ -158,41 +158,42 @@ TEST_F(DeclarativeContentPageUrlConditionTrackerTest, AddAndRemovePredicates) { delegate_.evaluation_requests().clear(); std::map<const void*, std::vector<const ContentPredicate*>> predicate_groups; const void* const group1 = GeneratePredicateGroupID(); - predicate_groups[group1].push_back(predicates[0]); - predicate_groups[group1].push_back(predicates[1]); + predicate_groups[group1].push_back(predicates[0].get()); + predicate_groups[group1].push_back(predicates[1].get()); const void* const group2 = GeneratePredicateGroupID(); - predicate_groups[group2].push_back(predicates[2]); + predicate_groups[group2].push_back(predicates[2].get()); tracker_.TrackPredicates(predicate_groups); - EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs[0], tabs[1], tabs[2])); + EXPECT_THAT( + delegate_.evaluation_requests(), + UnorderedElementsAre(tabs[0].get(), tabs[1].get(), tabs[2].get())); // Check that the predicates evaluate as expected for the tabs. - EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[0], tabs[0])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0], tabs[1])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0], tabs[2])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0], tabs[3])); + EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[0].get(), tabs[0].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0].get(), tabs[1].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0].get(), tabs[2].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[0].get(), tabs[3].get())); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1], tabs[0])); - EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[1], tabs[1])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1], tabs[2])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1], tabs[3])); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1].get(), tabs[0].get())); + EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[1].get(), tabs[1].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1].get(), tabs[2].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[1].get(), tabs[3].get())); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2], tabs[0])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2], tabs[1])); - EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[2], tabs[2])); - EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2], tabs[3])); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2].get(), tabs[0].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2].get(), tabs[1].get())); + EXPECT_TRUE(tracker_.EvaluatePredicate(predicates[2].get(), tabs[2].get())); + EXPECT_FALSE(tracker_.EvaluatePredicate(predicates[2].get(), tabs[3].get())); // Remove the first group of predicates. delegate_.evaluation_requests().clear(); tracker_.StopTrackingPredicates(std::vector<const void*>(1, group1)); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs[0], tabs[1])); + UnorderedElementsAre(tabs[0].get(), tabs[1].get())); // Remove the second group of predicates. delegate_.evaluation_requests().clear(); tracker_.StopTrackingPredicates(std::vector<const void*>(1, group2)); EXPECT_THAT(delegate_.evaluation_requests(), - UnorderedElementsAre(tabs[2])); + UnorderedElementsAre(tabs[2].get())); } // Tests that tracking WebContents triggers evaluation requests for matching diff --git a/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.cc b/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.cc index ff2af09..cce04f6 100644 --- a/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.cc +++ b/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.cc @@ -10,16 +10,19 @@ namespace extensions { -ScopedVector<ContentPredicateEvaluator> CreateDefaultContentPredicateEvaluators( +std::vector<scoped_ptr<ContentPredicateEvaluator>> +CreateDefaultContentPredicateEvaluators( content::BrowserContext* browser_context, ContentPredicateEvaluator::Delegate* delegate) { - ScopedVector<ContentPredicateEvaluator> evaluators; - evaluators.push_back(new DeclarativeContentPageUrlConditionTracker(delegate)); - evaluators.push_back(new DeclarativeContentCssConditionTracker(delegate)); - evaluators.push_back(new DeclarativeContentIsBookmarkedConditionTracker( - browser_context, - delegate)); - return evaluators.Pass(); + std::vector<scoped_ptr<ContentPredicateEvaluator>> evaluators; + evaluators.push_back(scoped_ptr<ContentPredicateEvaluator>( + new DeclarativeContentPageUrlConditionTracker(delegate))); + evaluators.push_back(scoped_ptr<ContentPredicateEvaluator>( + new DeclarativeContentCssConditionTracker(delegate))); + evaluators.push_back(scoped_ptr<ContentPredicateEvaluator>( + new DeclarativeContentIsBookmarkedConditionTracker(browser_context, + delegate))); + return evaluators; } } // namespace extensions diff --git a/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.h b/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.h index a1516a8..b7f1a90 100644 --- a/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.h +++ b/chrome/browser/extensions/api/declarative_content/default_content_predicate_evaluators.h @@ -5,7 +5,9 @@ #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_CONTENT_DEFAULT_CONTENT_PREDICATE_EVALUATORS_H_ #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_CONTENT_DEFAULT_CONTENT_PREDICATE_EVALUATORS_H_ -#include "base/memory/scoped_vector.h" +#include <vector> + +#include "base/memory/scoped_ptr.h" #include "chrome/browser/extensions/api/declarative_content/content_predicate_evaluator.h" namespace content { @@ -14,7 +16,8 @@ class BrowserContext; namespace extensions { -ScopedVector<ContentPredicateEvaluator> CreateDefaultContentPredicateEvaluators( +std::vector<scoped_ptr<ContentPredicateEvaluator>> +CreateDefaultContentPredicateEvaluators( content::BrowserContext* browser_context, ContentPredicateEvaluator::Delegate* delegate); diff --git a/components/content_settings/core/browser/content_settings_binary_value_map.cc b/components/content_settings/core/browser/content_settings_binary_value_map.cc index 48f2412..088a941 100644 --- a/components/content_settings/core/browser/content_settings_binary_value_map.cc +++ b/components/content_settings/core/browser/content_settings_binary_value_map.cc @@ -39,15 +39,15 @@ BinaryValueMap::BinaryValueMap() {} BinaryValueMap::~BinaryValueMap() {} -RuleIterator* BinaryValueMap::GetRuleIterator( +scoped_ptr<RuleIterator> BinaryValueMap::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, scoped_ptr<base::AutoLock> auto_lock) const { if (resource_identifier.empty()) { - return new RuleIteratorBinary(IsContentSettingEnabled(content_type), - auto_lock.Pass()); + return scoped_ptr<RuleIterator>(new RuleIteratorBinary( + IsContentSettingEnabled(content_type), auto_lock.Pass())); } - return new EmptyRuleIterator(); + return scoped_ptr<RuleIterator>(new EmptyRuleIterator()); } void BinaryValueMap::SetContentSettingDisabled(ContentSettingsType content_type, diff --git a/components/content_settings/core/browser/content_settings_binary_value_map.h b/components/content_settings/core/browser/content_settings_binary_value_map.h index 17c1e55..0eea112 100644 --- a/components/content_settings/core/browser/content_settings_binary_value_map.h +++ b/components/content_settings/core/browser/content_settings_binary_value_map.h @@ -26,9 +26,10 @@ class BinaryValueMap { BinaryValueMap(); ~BinaryValueMap(); - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - scoped_ptr<base::AutoLock> lock) const; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + scoped_ptr<base::AutoLock> lock) const; void SetContentSettingDisabled(ContentSettingsType content_type, bool disabled); bool IsContentSettingEnabled(ContentSettingsType content_type) const; diff --git a/components/content_settings/core/browser/content_settings_default_provider.cc b/components/content_settings/core/browser/content_settings_default_provider.cc index c1ca4cc..90531a5 100644 --- a/components/content_settings/core/browser/content_settings_default_provider.cc +++ b/components/content_settings/core/browser/content_settings_default_provider.cc @@ -256,7 +256,7 @@ bool DefaultProvider::SetWebsiteSetting( return true; } -RuleIterator* DefaultProvider::GetRuleIterator( +scoped_ptr<RuleIterator> DefaultProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { @@ -264,10 +264,10 @@ RuleIterator* DefaultProvider::GetRuleIterator( if (resource_identifier.empty()) { auto it(default_settings_.find(content_type)); if (it != default_settings_.end()) - return new DefaultRuleIterator(it->second); + return scoped_ptr<RuleIterator>(new DefaultRuleIterator(it->second)); NOTREACHED(); } - return new EmptyRuleIterator(); + return scoped_ptr<RuleIterator>(new EmptyRuleIterator()); } void DefaultProvider::ClearAllContentSettingsRules( diff --git a/components/content_settings/core/browser/content_settings_default_provider.h b/components/content_settings/core/browser/content_settings_default_provider.h index 0877c6f..0312ae8 100644 --- a/components/content_settings/core/browser/content_settings_default_provider.h +++ b/components/content_settings/core/browser/content_settings_default_provider.h @@ -36,9 +36,10 @@ class DefaultProvider : public ObservableProvider { ~DefaultProvider() override; // ProviderInterface implementations. - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/components/content_settings/core/browser/content_settings_mock_provider.cc b/components/content_settings/core/browser/content_settings_mock_provider.cc index fb79057..57cd64b 100644 --- a/components/content_settings/core/browser/content_settings_mock_provider.cc +++ b/components/content_settings/core/browser/content_settings_mock_provider.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "components/content_settings/core/browser/content_settings_mock_provider.h" +#include "components/content_settings/core/browser/content_settings_rule.h" namespace content_settings { @@ -15,11 +16,11 @@ MockProvider::MockProvider(bool read_only) MockProvider::~MockProvider() {} -RuleIterator* MockProvider::GetRuleIterator( +scoped_ptr<RuleIterator> MockProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { - return value_map_.GetRuleIterator(content_type, resource_identifier, NULL); + return value_map_.GetRuleIterator(content_type, resource_identifier, nullptr); } bool MockProvider::SetWebsiteSetting( diff --git a/components/content_settings/core/browser/content_settings_mock_provider.h b/components/content_settings/core/browser/content_settings_mock_provider.h index 7d16b9b0..cd3d19b 100644 --- a/components/content_settings/core/browser/content_settings_mock_provider.h +++ b/components/content_settings/core/browser/content_settings_mock_provider.h @@ -22,9 +22,10 @@ class MockProvider : public ObservableProvider { explicit MockProvider(bool read_only); ~MockProvider() override; - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; // The MockProvider is only able to store one content setting. So every time // this method is called the previously set content settings is overwritten. diff --git a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc index 0c3ab90..363f605f 100644 --- a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc +++ b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc @@ -83,7 +83,7 @@ bool OriginIdentifierValueMap::PatternPair::operator<( std::tie(other.primary_pattern, other.secondary_pattern); } -RuleIterator* OriginIdentifierValueMap::GetRuleIterator( +scoped_ptr<RuleIterator> OriginIdentifierValueMap::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, base::Lock* lock) const { @@ -97,10 +97,9 @@ RuleIterator* OriginIdentifierValueMap::GetRuleIterator( auto_lock.reset(new base::AutoLock(*lock)); EntryMap::const_iterator it = entries_.find(key); if (it == entries_.end()) - return new EmptyRuleIterator(); - return new RuleIteratorImpl(it->second.begin(), - it->second.end(), - auto_lock.release()); + return scoped_ptr<RuleIterator>(new EmptyRuleIterator()); + return scoped_ptr<RuleIterator>(new RuleIteratorImpl( + it->second.begin(), it->second.end(), auto_lock.release())); } size_t OriginIdentifierValueMap::size() const { diff --git a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h index 09cac65..b0f3d83 100644 --- a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h +++ b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h @@ -9,6 +9,7 @@ #include <string> #include "base/memory/linked_ptr.h" +#include "base/memory/scoped_ptr.h" #include "components/content_settings/core/common/content_settings.h" class GURL; @@ -66,14 +67,14 @@ class OriginIdentifierValueMap { size_t size() const; // Returns an iterator for reading the rules for |content_type| and - // |resource_identifier|. The caller takes the ownership of the iterator. It - // is not allowed to call functions of |OriginIdentifierValueMap| (also - // |GetRuleIterator|) before the iterator has been destroyed. If |lock| is - // non-NULL, the returned |RuleIterator| locks it and releases it when it is - // destroyed. - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - base::Lock* lock) const; + // |resource_identifier|. It is not allowed to call functions of + // |OriginIdentifierValueMap| (also |GetRuleIterator|) before the iterator + // has been destroyed. If |lock| is non-NULL, the returned |RuleIterator| + // locks it and releases it when it is destroyed. + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + base::Lock* lock) const; OriginIdentifierValueMap(); ~OriginIdentifierValueMap(); diff --git a/components/content_settings/core/browser/content_settings_policy_provider.cc b/components/content_settings/core/browser/content_settings_policy_provider.cc index df1becd..3e82333 100644 --- a/components/content_settings/core/browser/content_settings_policy_provider.cc +++ b/components/content_settings/core/browser/content_settings_policy_provider.cc @@ -5,7 +5,6 @@ #include "components/content_settings/core/browser/content_settings_policy_provider.h" #include <string> -#include <vector> #include "base/bind.h" #include "base/json/json_reader.h" @@ -182,7 +181,7 @@ PolicyProvider::~PolicyProvider() { DCHECK(!prefs_); } -RuleIterator* PolicyProvider::GetRuleIterator( +scoped_ptr<RuleIterator> PolicyProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { diff --git a/components/content_settings/core/browser/content_settings_policy_provider.h b/components/content_settings/core/browser/content_settings_policy_provider.h index a8153c3..dde632d 100644 --- a/components/content_settings/core/browser/content_settings_policy_provider.h +++ b/components/content_settings/core/browser/content_settings_policy_provider.h @@ -31,9 +31,10 @@ class PolicyProvider : public ObservableProvider { static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); // ProviderInterface implementations. - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/components/content_settings/core/browser/content_settings_pref.cc b/components/content_settings/core/browser/content_settings_pref.cc index c79c973..762cb62 100644 --- a/components/content_settings/core/browser/content_settings_pref.cc +++ b/components/content_settings/core/browser/content_settings_pref.cc @@ -82,7 +82,7 @@ ContentSettingsPref::ContentSettingsPref( ContentSettingsPref::~ContentSettingsPref() { } -RuleIterator* ContentSettingsPref::GetRuleIterator( +scoped_ptr<RuleIterator> ContentSettingsPref::GetRuleIterator( const ResourceIdentifier& resource_identifier, bool incognito) const { if (incognito) diff --git a/components/content_settings/core/browser/content_settings_pref.h b/components/content_settings/core/browser/content_settings_pref.h index 5b9e5bb..2f0aea7 100644 --- a/components/content_settings/core/browser/content_settings_pref.h +++ b/components/content_settings/core/browser/content_settings_pref.h @@ -48,8 +48,9 @@ class ContentSettingsPref { NotifyObserversCallback notify_callback); ~ContentSettingsPref(); - RuleIterator* GetRuleIterator(const ResourceIdentifier& resource_identifier, - bool incognito) const; + scoped_ptr<RuleIterator> GetRuleIterator( + const ResourceIdentifier& resource_identifier, + bool incognito) const; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc index 92aa5d22..2bbc1cf 100644 --- a/components/content_settings/core/browser/content_settings_pref_provider.cc +++ b/components/content_settings/core/browser/content_settings_pref_provider.cc @@ -119,7 +119,7 @@ PrefProvider::~PrefProvider() { DCHECK(!prefs_); } -RuleIterator* PrefProvider::GetRuleIterator( +scoped_ptr<RuleIterator> PrefProvider::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const { diff --git a/components/content_settings/core/browser/content_settings_pref_provider.h b/components/content_settings/core/browser/content_settings_pref_provider.h index 8554bcf..d35f3ea 100644 --- a/components/content_settings/core/browser/content_settings_pref_provider.h +++ b/components/content_settings/core/browser/content_settings_pref_provider.h @@ -41,9 +41,10 @@ class PrefProvider : public ObservableProvider { ~PrefProvider() override; // ProviderInterface implementations. - RuleIterator* GetRuleIterator(ContentSettingsType content_type, - const ResourceIdentifier& resource_identifier, - bool incognito) const override; + scoped_ptr<RuleIterator> GetRuleIterator( + ContentSettingsType content_type, + const ResourceIdentifier& resource_identifier, + bool incognito) const override; bool SetWebsiteSetting(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, diff --git a/components/content_settings/core/browser/content_settings_provider.h b/components/content_settings/core/browser/content_settings_provider.h index c3e63e7..e2bfcc6 100644 --- a/components/content_settings/core/browser/content_settings_provider.h +++ b/components/content_settings/core/browser/content_settings_provider.h @@ -9,7 +9,9 @@ #include <string> +#include "base/memory/scoped_ptr.h" #include "base/values.h" +#include "components/content_settings/core/browser/content_settings_rule.h" #include "components/content_settings/core/common/content_settings.h" class ContentSettingsPattern; @@ -27,11 +29,10 @@ class ProviderInterface { // provider. If |incognito| is true, the iterator returns only the content // settings which are applicable to the incognito mode and differ from the // normal mode. Otherwise, it returns the content settings for the normal - // mode. The caller takes the ownership of the returned |RuleIterator|. It is - // not allowed to call other |ProviderInterface| functions (including - // |GetRuleIterator|) for the same provider until the |RuleIterator| is - // destroyed. - virtual RuleIterator* GetRuleIterator( + // mode. It is not allowed to call other |ProviderInterface| functions + // (including |GetRuleIterator|) for the same provider until the + // |RuleIterator| is destroyed. + virtual scoped_ptr<RuleIterator> GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, bool incognito) const = 0; diff --git a/components/content_settings/core/browser/content_settings_rule.cc b/components/content_settings/core/browser/content_settings_rule.cc index 9549c1c..470c563 100644 --- a/components/content_settings/core/browser/content_settings_rule.cc +++ b/components/content_settings/core/browser/content_settings_rule.cc @@ -35,12 +35,10 @@ Rule EmptyRuleIterator::Next() { } ConcatenationIterator::ConcatenationIterator( - ScopedVector<RuleIterator>* iterators, + std::vector<scoped_ptr<RuleIterator>> iterators, base::AutoLock* auto_lock) - : auto_lock_(auto_lock) { - iterators_.swap(*iterators); - - ScopedVector<RuleIterator>::iterator it = iterators_.begin(); + : iterators_(std::move(iterators)), auto_lock_(auto_lock) { + auto it = iterators_.begin(); while (it != iterators_.end()) { if (!(*it)->HasNext()) it = iterators_.erase(it); @@ -56,8 +54,7 @@ bool ConcatenationIterator::HasNext() const { } Rule ConcatenationIterator::Next() { - ScopedVector<RuleIterator>::iterator current_iterator = - iterators_.begin(); + auto current_iterator = iterators_.begin(); DCHECK(current_iterator != iterators_.end()); DCHECK((*current_iterator)->HasNext()); const Rule& to_return = (*current_iterator)->Next(); diff --git a/components/content_settings/core/browser/content_settings_rule.h b/components/content_settings/core/browser/content_settings_rule.h index 6305c8c..9c4d2d5 100644 --- a/components/content_settings/core/browser/content_settings_rule.h +++ b/components/content_settings/core/browser/content_settings_rule.h @@ -7,10 +7,11 @@ #ifndef COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_RULE_H_ #define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_RULE_H_ +#include <vector> + #include "base/compiler_specific.h" #include "base/memory/linked_ptr.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" #include "base/synchronization/lock.h" #include "base/values.h" #include "components/content_settings/core/common/content_settings_pattern.h" @@ -48,14 +49,14 @@ class ConcatenationIterator : public RuleIterator { public: // ConcatenationIterator takes ownership of the pointers in the |iterators| // list and |auto_lock|. |auto_lock| can be NULL if no locking is needed. - ConcatenationIterator(ScopedVector<RuleIterator>* iterators, + ConcatenationIterator(std::vector<scoped_ptr<RuleIterator>> iterators, base::AutoLock* auto_lock); ~ConcatenationIterator() override; bool HasNext() const override; Rule Next() override; private: - ScopedVector<RuleIterator> iterators_; + std::vector<scoped_ptr<RuleIterator>> iterators_; scoped_ptr<base::AutoLock> auto_lock_; }; diff --git a/components/content_settings/core/browser/content_settings_rule_unittest.cc b/components/content_settings/core/browser/content_settings_rule_unittest.cc index e588596..8796d03 100644 --- a/components/content_settings/core/browser/content_settings_rule_unittest.cc +++ b/components/content_settings/core/browser/content_settings_rule_unittest.cc @@ -3,6 +3,8 @@ // found in the LICENSE file. #include <list> +#include <utility> +#include <vector> #include "components/content_settings/core/browser/content_settings_rule.h" #include "components/content_settings/core/common/content_settings_pattern.h" @@ -52,10 +54,10 @@ TEST(RuleTest, ConcatenationIterator) { ContentSettingsPattern::Wildcard(), new base::FundamentalValue(0))); - ScopedVector<RuleIterator> iterators; - iterators.push_back(new ListIterator(rules1)); - iterators.push_back(new ListIterator(rules2)); - ConcatenationIterator concatenation_iterator(&iterators, NULL); + std::vector<scoped_ptr<RuleIterator>> iterators; + iterators.push_back(scoped_ptr<RuleIterator>(new ListIterator(rules1))); + iterators.push_back(scoped_ptr<RuleIterator>(new ListIterator(rules2))); + ConcatenationIterator concatenation_iterator(std::move(iterators), nullptr); Rule rule; ASSERT_TRUE(concatenation_iterator.HasNext()); |