Chromium Code Reviews| Index: chrome/browser/extensions/activity_log/counting_policy_unittest.cc |
| diff --git a/chrome/browser/extensions/activity_log/counting_policy_unittest.cc b/chrome/browser/extensions/activity_log/counting_policy_unittest.cc |
| index 4763adb995a421a2ea4cc942e2af9f38354483b7..d709726b5ac8d98192a7aad9031813281a98c1e1 100644 |
| --- a/chrome/browser/extensions/activity_log/counting_policy_unittest.cc |
| +++ b/chrome/browser/extensions/activity_log/counting_policy_unittest.cc |
| @@ -249,6 +249,37 @@ class CountingPolicyTest : public testing::Test { |
| } |
| } |
| + static void AllURLsRemoved(scoped_ptr<Action::ActionVector> actions) { |
| + std::string action_urls_cleared = |
| + "ID=punky CATEGORY=dom_access API=lets ARGS=[\"vamoose\"] COUNT=1"; |
| + ASSERT_EQ(2, static_cast<int>(actions->size())); |
| + ASSERT_EQ(action_urls_cleared, actions->at(0)->PrintForDebug()); |
|
felt
2013/08/27 23:16:55
I'm trying to make a rule that new tests should di
karenlees
2013/08/27 23:26:55
Sure, if you already have the new rule can you poi
felt
2013/08/27 23:32:47
Np, I sort of originally imagined I would get to t
|
| + ASSERT_EQ(action_urls_cleared, actions->at(1)->PrintForDebug()); |
| + } |
| + |
| + static void SomeURLsRemoved(scoped_ptr<Action::ActionVector> actions) { |
| + std::string action_nothing_cleared = |
| + "ID=punky CATEGORY=dom_access API=lets ARGS=[\"vamoose\"] " |
| + "PAGE_URL=http://www.google.com/ PAGE_TITLE=\"Google\" " |
| + "ARG_URL=http://www.arg-urls.com/ COUNT=1"; |
| + std::string action_has_page_url = |
| + "ID=punky CATEGORY=dom_access API=lets ARGS=[\"vamoose\"] " |
| + "PAGE_URL=http://www.google.com/ PAGE_TITLE=\"Google\" COUNT=1"; |
| + std::string action_has_arg_url = |
| + "ID=punky CATEGORY=dom_access API=lets ARGS=[\"vamoose\"] " |
| + "ARG_URL=http://www.google.com/ COUNT=1"; |
| + std::string action_no_url_info = |
| + "ID=punky CATEGORY=dom_access API=lets ARGS=[\"vamoose\"] COUNT=1"; |
| + |
| + ASSERT_EQ(5, static_cast<int>(actions->size())); |
| + // These should be in reverse time order. |
| + ASSERT_EQ(action_nothing_cleared, actions->at(0)->PrintForDebug()); |
| + ASSERT_EQ(action_has_page_url, actions->at(1)->PrintForDebug()); |
| + ASSERT_EQ(action_no_url_info, actions->at(2)->PrintForDebug()); |
| + ASSERT_EQ(action_has_arg_url, actions->at(3)->PrintForDebug()); |
| + ASSERT_EQ(action_no_url_info, actions->at(4)->PrintForDebug()); |
| + } |
| + |
| protected: |
| ExtensionService* extension_service_; |
| scoped_ptr<TestingProfile> profile_; |
| @@ -738,4 +769,121 @@ TEST_F(CountingPolicyTest, EarlyFlush) { |
| policy->Close(); |
| } |
| +TEST_F(CountingPolicyTest, RemoveAllURLs) { |
| + ActivityLogPolicy* policy = new CountingPolicy(profile_.get()); |
| + |
| + // Use a mock clock to ensure that events are not recorded on the wrong day |
| + // when the test is run close to local midnight. |
| + base::SimpleTestClock* mock_clock = new base::SimpleTestClock(); |
| + mock_clock->SetNow(base::Time::Now().LocalMidnight() + |
| + base::TimeDelta::FromHours(12)); |
| + policy->SetClockForTesting(scoped_ptr<base::Clock>(mock_clock)); |
| + |
| + // Record some actions |
| + scoped_refptr<Action> action = |
| + new Action("punky", mock_clock->Now(), |
| + Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google.com")); |
| + action->set_page_title("Google"); |
| + action->set_arg_url(GURL("http://www.google.com")); |
| + policy->ProcessAction(action); |
| + |
| + mock_clock->Advance(base::TimeDelta::FromSeconds(1)); |
| + action = new Action( |
| + "punky", mock_clock->Now(), Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google2.com")); |
| + action->set_page_title("Google"); |
| + // Deliberately no arg url set to make sure it stills works if there is no arg |
| + // url. |
| + policy->ProcessAction(action); |
| + |
| + // Clean all the URLs. |
| + std::vector<GURL> no_url_restrictions; |
| + policy->RemoveURLs(no_url_restrictions); |
| + |
| + CheckReadData( |
| + policy, |
| + "punky", |
| + 0, |
| + base::Bind(&CountingPolicyTest::AllURLsRemoved)); |
| + policy->Close(); |
| +} |
| + |
| +TEST_F(CountingPolicyTest, RemoveSpecificURLs) { |
| + ActivityLogPolicy* policy = new CountingPolicy(profile_.get()); |
| + |
| + // Use a mock clock to ensure that events are not recorded on the wrong day |
| + // when the test is run close to local midnight. |
| + base::SimpleTestClock* mock_clock = new base::SimpleTestClock(); |
| + mock_clock->SetNow(base::Time::Now().LocalMidnight() + |
| + base::TimeDelta::FromHours(12)); |
| + policy->SetClockForTesting(scoped_ptr<base::Clock>(mock_clock)); |
| + |
| + // Record some actions |
| + // This should have the page url and args url cleared. |
| + scoped_refptr<Action> action = new Action("punky", mock_clock->Now(), |
| + Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google1.com")); |
| + action->set_page_title("Google"); |
| + action->set_arg_url(GURL("http://www.google1.com")); |
| + policy->ProcessAction(action); |
| + |
| + // This should have the page url cleared but not args url. |
| + mock_clock->Advance(base::TimeDelta::FromSeconds(1)); |
| + action = new Action( |
| + "punky", mock_clock->Now(), Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google1.com")); |
| + action->set_page_title("Google"); |
| + action->set_arg_url(GURL("http://www.google.com")); |
| + policy->ProcessAction(action); |
| + |
| + // This should have the page url cleared. The args url is deliberately not |
| + // set to make sure this doesn't cause any issues. |
| + mock_clock->Advance(base::TimeDelta::FromSeconds(1)); |
| + action = new Action( |
| + "punky", mock_clock->Now(), Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google2.com")); |
| + action->set_page_title("Google"); |
| + policy->ProcessAction(action); |
| + |
| + // This should have the args url cleared but not the page url or page title. |
| + mock_clock->Advance(base::TimeDelta::FromSeconds(1)); |
| + action = new Action( |
| + "punky", mock_clock->Now(), Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google.com")); |
| + action->set_page_title("Google"); |
| + action->set_arg_url(GURL("http://www.google1.com")); |
| + policy->ProcessAction(action); |
| + |
| + // This should have neither cleared. |
| + mock_clock->Advance(base::TimeDelta::FromSeconds(1)); |
| + action = new Action( |
| + "punky", mock_clock->Now(), Action::ACTION_DOM_ACCESS, "lets"); |
| + action->mutable_args()->AppendString("vamoose"); |
| + action->set_page_url(GURL("http://www.google.com")); |
| + action->set_page_title("Google"); |
| + action->set_arg_url(GURL("http://www.arg-urls.com")); |
| + policy->ProcessAction(action); |
| + |
| + // Clean some URLs. |
| + std::vector<GURL> urls; |
| + urls.push_back(GURL("http://www.google1.com")); |
| + urls.push_back(GURL("http://www.google2.com")); |
| + urls.push_back(GURL("http://www.url_not_in_db.com")); |
| + policy->RemoveURLs(urls); |
| + |
| + CheckReadData( |
| + policy, |
| + "punky", |
| + 0, |
| + base::Bind(&CountingPolicyTest::SomeURLsRemoved)); |
| + policy->Close(); |
| +} |
| + |
| } // namespace extensions |