| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/declarative_content/declarative_content_
is_bookmarked_condition_tracker.h" | 5 #include "chrome/browser/extensions/api/declarative_content/declarative_content_
is_bookmarked_condition_tracker.h" |
| 6 | 6 |
| 7 #include <memory> |
| 7 #include <set> | 8 #include <set> |
| 8 #include <utility> | 9 #include <utility> |
| 9 #include <vector> | 10 #include <vector> |
| 10 | 11 |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/test/values_test_util.h" | 16 #include "base/test/values_test_util.h" |
| 17 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 17 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 18 #include "chrome/browser/extensions/api/declarative_content/content_predicate_ev
aluator.h" | 18 #include "chrome/browser/extensions/api/declarative_content/content_predicate_ev
aluator.h" |
| 19 #include "chrome/browser/extensions/api/declarative_content/declarative_content_
condition_tracker_test.h" | 19 #include "chrome/browser/extensions/api/declarative_content/declarative_content_
condition_tracker_test.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 20 #include "chrome/test/base/testing_profile.h" |
| 21 #include "components/bookmarks/browser/bookmark_model.h" | 21 #include "components/bookmarks/browser/bookmark_model.h" |
| 22 #include "components/bookmarks/browser/scoped_group_bookmark_actions.h" | 22 #include "components/bookmarks/browser/scoped_group_bookmark_actions.h" |
| 23 #include "components/bookmarks/test/bookmark_test_helpers.h" | 23 #include "components/bookmarks/test/bookmark_test_helpers.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 41 return ExtensionBuilder() | 41 return ExtensionBuilder() |
| 42 .SetManifest(DictionaryBuilder() | 42 .SetManifest(DictionaryBuilder() |
| 43 .Set("name", "Test extension") | 43 .Set("name", "Test extension") |
| 44 .Set("version", "1.0") | 44 .Set("version", "1.0") |
| 45 .Set("manifest_version", 2) | 45 .Set("manifest_version", 2) |
| 46 .Set("permissions", permissions.Build()) | 46 .Set("permissions", permissions.Build()) |
| 47 .Build()) | 47 .Build()) |
| 48 .Build(); | 48 .Build(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> CreatePredicate( | 51 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> CreatePredicate( |
| 52 ContentPredicateEvaluator* evaluator, | 52 ContentPredicateEvaluator* evaluator, |
| 53 const Extension* extension, | 53 const Extension* extension, |
| 54 bool is_bookmarked) { | 54 bool is_bookmarked) { |
| 55 std::string error; | 55 std::string error; |
| 56 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = | 56 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = |
| 57 DeclarativeContentIsBookmarkedPredicate::Create( | 57 DeclarativeContentIsBookmarkedPredicate::Create( |
| 58 evaluator, | 58 evaluator, extension, |
| 59 extension, | 59 *base::test::ParseJson(is_bookmarked ? "true" : "false"), &error); |
| 60 *base::test::ParseJson(is_bookmarked ? "true" : "false"), | |
| 61 &error); | |
| 62 EXPECT_EQ("", error); | 60 EXPECT_EQ("", error); |
| 63 EXPECT_TRUE(predicate); | 61 EXPECT_TRUE(predicate); |
| 64 EXPECT_EQ(is_bookmarked, predicate->is_bookmarked()); | 62 EXPECT_EQ(is_bookmarked, predicate->is_bookmarked()); |
| 65 return predicate; | 63 return predicate; |
| 66 } | 64 } |
| 67 | 65 |
| 68 } // namespace | 66 } // namespace |
| 69 | 67 |
| 70 using testing::HasSubstr; | 68 using testing::HasSubstr; |
| 71 using testing::UnorderedElementsAre; | 69 using testing::UnorderedElementsAre; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 result << "IsBookmarkedPredicate(false): expected " | 142 result << "IsBookmarkedPredicate(false): expected " |
| 145 << (page_is_bookmarked ? "false" : "true") << " got " | 143 << (page_is_bookmarked ? "false" : "true") << " got " |
| 146 << (page_is_bookmarked ? "true" : "false"); | 144 << (page_is_bookmarked ? "true" : "false"); |
| 147 } | 145 } |
| 148 | 146 |
| 149 return result; | 147 return result; |
| 150 } | 148 } |
| 151 | 149 |
| 152 Delegate delegate_; | 150 Delegate delegate_; |
| 153 bookmarks::BookmarkModel* bookmark_model_; | 151 bookmarks::BookmarkModel* bookmark_model_; |
| 154 scoped_ptr<DeclarativeContentIsBookmarkedConditionTracker> tracker_; | 152 std::unique_ptr<DeclarativeContentIsBookmarkedConditionTracker> tracker_; |
| 155 scoped_refptr<Extension> extension_; | 153 scoped_refptr<Extension> extension_; |
| 156 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> is_bookmarked_predicate_; | 154 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> |
| 157 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> | 155 is_bookmarked_predicate_; |
| 156 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> |
| 158 is_not_bookmarked_predicate_; | 157 is_not_bookmarked_predicate_; |
| 159 | 158 |
| 160 private: | 159 private: |
| 161 DISALLOW_COPY_AND_ASSIGN(DeclarativeContentIsBookmarkedConditionTrackerTest); | 160 DISALLOW_COPY_AND_ASSIGN(DeclarativeContentIsBookmarkedConditionTrackerTest); |
| 162 }; | 161 }; |
| 163 | 162 |
| 164 | 163 |
| 165 // Tests that condition with isBookmarked requires "bookmarks" permission. | 164 // Tests that condition with isBookmarked requires "bookmarks" permission. |
| 166 TEST(DeclarativeContentIsBookmarkedPredicateTest, | 165 TEST(DeclarativeContentIsBookmarkedPredicateTest, |
| 167 IsBookmarkedPredicateRequiresBookmarkPermissionPermission) { | 166 IsBookmarkedPredicateRequiresBookmarkPermissionPermission) { |
| 168 scoped_refptr<Extension> extension = | 167 scoped_refptr<Extension> extension = |
| 169 CreateExtensionWithBookmarksPermission(false); | 168 CreateExtensionWithBookmarksPermission(false); |
| 170 std::string error; | 169 std::string error; |
| 171 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = | 170 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = |
| 172 DeclarativeContentIsBookmarkedPredicate::Create( | 171 DeclarativeContentIsBookmarkedPredicate::Create( |
| 173 nullptr, | 172 nullptr, extension.get(), *base::test::ParseJson("true"), &error); |
| 174 extension.get(), | |
| 175 *base::test::ParseJson("true"), | |
| 176 &error); | |
| 177 EXPECT_THAT(error, HasSubstr("requires 'bookmarks' permission")); | 173 EXPECT_THAT(error, HasSubstr("requires 'bookmarks' permission")); |
| 178 EXPECT_FALSE(predicate); | 174 EXPECT_FALSE(predicate); |
| 179 } | 175 } |
| 180 | 176 |
| 181 // Tests an invalid isBookmarked value type. | 177 // Tests an invalid isBookmarked value type. |
| 182 TEST(DeclarativeContentIsBookmarkedPredicateTest, | 178 TEST(DeclarativeContentIsBookmarkedPredicateTest, |
| 183 WrongIsBookmarkedPredicateDatatype) { | 179 WrongIsBookmarkedPredicateDatatype) { |
| 184 scoped_refptr<Extension> extension = | 180 scoped_refptr<Extension> extension = |
| 185 CreateExtensionWithBookmarksPermission(true); | 181 CreateExtensionWithBookmarksPermission(true); |
| 186 std::string error; | 182 std::string error; |
| 187 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = | 183 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = |
| 188 DeclarativeContentIsBookmarkedPredicate::Create( | 184 DeclarativeContentIsBookmarkedPredicate::Create( |
| 189 nullptr, | 185 nullptr, extension.get(), *base::test::ParseJson("[]"), &error); |
| 190 extension.get(), | |
| 191 *base::test::ParseJson("[]"), | |
| 192 &error); | |
| 193 EXPECT_THAT(error, HasSubstr("invalid type")); | 186 EXPECT_THAT(error, HasSubstr("invalid type")); |
| 194 EXPECT_FALSE(predicate); | 187 EXPECT_FALSE(predicate); |
| 195 } | 188 } |
| 196 | 189 |
| 197 // Tests isBookmark: true. Predicate state is checked in CreatePredicate(). | 190 // Tests isBookmark: true. Predicate state is checked in CreatePredicate(). |
| 198 TEST(DeclarativeContentIsBookmarkedPredicateTest, IsBookmarkedPredicateTrue) { | 191 TEST(DeclarativeContentIsBookmarkedPredicateTest, IsBookmarkedPredicateTrue) { |
| 199 scoped_refptr<Extension> extension = | 192 scoped_refptr<Extension> extension = |
| 200 CreateExtensionWithBookmarksPermission(true); | 193 CreateExtensionWithBookmarksPermission(true); |
| 201 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = | 194 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = |
| 202 CreatePredicate(nullptr, extension.get(), true); | 195 CreatePredicate(nullptr, extension.get(), true); |
| 203 } | 196 } |
| 204 | 197 |
| 205 // Tests isBookmark: false. Predicate state is checked in CreatePredicate(). | 198 // Tests isBookmark: false. Predicate state is checked in CreatePredicate(). |
| 206 TEST(DeclarativeContentIsBookmarkedPredicateTest, IsBookmarkedPredicateFalse) { | 199 TEST(DeclarativeContentIsBookmarkedPredicateTest, IsBookmarkedPredicateFalse) { |
| 207 scoped_refptr<Extension> extension = | 200 scoped_refptr<Extension> extension = |
| 208 CreateExtensionWithBookmarksPermission(true); | 201 CreateExtensionWithBookmarksPermission(true); |
| 209 scoped_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = | 202 std::unique_ptr<DeclarativeContentIsBookmarkedPredicate> predicate = |
| 210 CreatePredicate(nullptr, extension.get(), false); | 203 CreatePredicate(nullptr, extension.get(), false); |
| 211 } | 204 } |
| 212 | 205 |
| 213 // Tests that starting tracking for a WebContents that has a bookmarked URL | 206 // Tests that starting tracking for a WebContents that has a bookmarked URL |
| 214 // results in the proper IsUrlBookmarked state. | 207 // results in the proper IsUrlBookmarked state. |
| 215 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, | 208 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, |
| 216 BookmarkedAtStartOfTracking) { | 209 BookmarkedAtStartOfTracking) { |
| 217 scoped_ptr<content::WebContents> tab = MakeTab(); | 210 std::unique_ptr<content::WebContents> tab = MakeTab(); |
| 218 LoadURL(tab.get(), GURL("http://bookmarked/")); | 211 LoadURL(tab.get(), GURL("http://bookmarked/")); |
| 219 EXPECT_TRUE(delegate_.evaluation_requests().empty()); | 212 EXPECT_TRUE(delegate_.evaluation_requests().empty()); |
| 220 | 213 |
| 221 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, | 214 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, |
| 222 base::ASCIIToUTF16("title"), | 215 base::ASCIIToUTF16("title"), |
| 223 GURL("http://bookmarked/")); | 216 GURL("http://bookmarked/")); |
| 224 | 217 |
| 225 tracker_->TrackForWebContents(tab.get()); | 218 tracker_->TrackForWebContents(tab.get()); |
| 226 EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tab.get())); | 219 EXPECT_THAT(delegate_.evaluation_requests(), UnorderedElementsAre(tab.get())); |
| 227 EXPECT_TRUE(CheckPredicates(tab.get(), true)); | 220 EXPECT_TRUE(CheckPredicates(tab.get(), true)); |
| 228 } | 221 } |
| 229 | 222 |
| 230 // Tests that adding and removing bookmarks triggers evaluation requests for the | 223 // Tests that adding and removing bookmarks triggers evaluation requests for the |
| 231 // matching WebContents. | 224 // matching WebContents. |
| 232 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, | 225 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, |
| 233 AddAndRemoveBookmark) { | 226 AddAndRemoveBookmark) { |
| 234 // Create two tabs. | 227 // Create two tabs. |
| 235 std::vector<scoped_ptr<content::WebContents>> tabs; | 228 std::vector<std::unique_ptr<content::WebContents>> tabs; |
| 236 for (int i = 0; i < 2; ++i) { | 229 for (int i = 0; i < 2; ++i) { |
| 237 tabs.push_back(MakeTab()); | 230 tabs.push_back(MakeTab()); |
| 238 delegate_.evaluation_requests().clear(); | 231 delegate_.evaluation_requests().clear(); |
| 239 tracker_->TrackForWebContents(tabs.back().get()); | 232 tracker_->TrackForWebContents(tabs.back().get()); |
| 240 EXPECT_THAT(delegate_.evaluation_requests(), | 233 EXPECT_THAT(delegate_.evaluation_requests(), |
| 241 UnorderedElementsAre(tabs.back().get())); | 234 UnorderedElementsAre(tabs.back().get())); |
| 242 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); | 235 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); |
| 243 } | 236 } |
| 244 | 237 |
| 245 // Navigate the first tab to a URL that we will bookmark. | 238 // Navigate the first tab to a URL that we will bookmark. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 270 EXPECT_THAT(delegate_.evaluation_requests(), | 263 EXPECT_THAT(delegate_.evaluation_requests(), |
| 271 UnorderedElementsAre(tabs[0].get())); | 264 UnorderedElementsAre(tabs[0].get())); |
| 272 EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); | 265 EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); |
| 273 EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); | 266 EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); |
| 274 } | 267 } |
| 275 | 268 |
| 276 // Tests that adding and removing bookmarks triggers evaluation requests for the | 269 // Tests that adding and removing bookmarks triggers evaluation requests for the |
| 277 // matching WebContents. | 270 // matching WebContents. |
| 278 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { | 271 TEST_F(DeclarativeContentIsBookmarkedConditionTrackerTest, ExtensiveChanges) { |
| 279 // Create two tabs. | 272 // Create two tabs. |
| 280 std::vector<scoped_ptr<content::WebContents>> tabs; | 273 std::vector<std::unique_ptr<content::WebContents>> tabs; |
| 281 for (int i = 0; i < 2; ++i) { | 274 for (int i = 0; i < 2; ++i) { |
| 282 tabs.push_back(MakeTab()); | 275 tabs.push_back(MakeTab()); |
| 283 delegate_.evaluation_requests().clear(); | 276 delegate_.evaluation_requests().clear(); |
| 284 tracker_->TrackForWebContents(tabs.back().get()); | 277 tracker_->TrackForWebContents(tabs.back().get()); |
| 285 EXPECT_THAT(delegate_.evaluation_requests(), | 278 EXPECT_THAT(delegate_.evaluation_requests(), |
| 286 UnorderedElementsAre(tabs.back().get())); | 279 UnorderedElementsAre(tabs.back().get())); |
| 287 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); | 280 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); |
| 288 } | 281 } |
| 289 | 282 |
| 290 // Navigate the first tab to a URL that we will bookmark. | 283 // Navigate the first tab to a URL that we will bookmark. |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 // Bookmark two URLs. | 366 // Bookmark two URLs. |
| 374 delegate_.evaluation_requests().clear(); | 367 delegate_.evaluation_requests().clear(); |
| 375 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, | 368 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, |
| 376 base::ASCIIToUTF16("title"), | 369 base::ASCIIToUTF16("title"), |
| 377 GURL("http://bookmarked1/")); | 370 GURL("http://bookmarked1/")); |
| 378 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, | 371 bookmark_model_->AddURL(bookmark_model_->other_node(), 0, |
| 379 base::ASCIIToUTF16("title"), | 372 base::ASCIIToUTF16("title"), |
| 380 GURL("http://bookmarked2/")); | 373 GURL("http://bookmarked2/")); |
| 381 | 374 |
| 382 // Create two tabs. | 375 // Create two tabs. |
| 383 std::vector<scoped_ptr<content::WebContents>> tabs; | 376 std::vector<std::unique_ptr<content::WebContents>> tabs; |
| 384 for (int i = 0; i < 2; ++i) { | 377 for (int i = 0; i < 2; ++i) { |
| 385 tabs.push_back(MakeTab()); | 378 tabs.push_back(MakeTab()); |
| 386 delegate_.evaluation_requests().clear(); | 379 delegate_.evaluation_requests().clear(); |
| 387 tracker_->TrackForWebContents(tabs.back().get()); | 380 tracker_->TrackForWebContents(tabs.back().get()); |
| 388 EXPECT_THAT(delegate_.evaluation_requests(), | 381 EXPECT_THAT(delegate_.evaluation_requests(), |
| 389 UnorderedElementsAre(tabs.back().get())); | 382 UnorderedElementsAre(tabs.back().get())); |
| 390 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); | 383 EXPECT_TRUE(CheckPredicates(tabs.back().get(), false)); |
| 391 } | 384 } |
| 392 | 385 |
| 393 // Navigate the first tab to one bookmarked URL. | 386 // Navigate the first tab to one bookmarked URL. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 tracker_->OnWebContentsNavigation(tabs[0].get(), | 426 tracker_->OnWebContentsNavigation(tabs[0].get(), |
| 434 content::LoadCommittedDetails(), | 427 content::LoadCommittedDetails(), |
| 435 content::FrameNavigateParams()); | 428 content::FrameNavigateParams()); |
| 436 EXPECT_THAT(delegate_.evaluation_requests(), | 429 EXPECT_THAT(delegate_.evaluation_requests(), |
| 437 UnorderedElementsAre(tabs[0].get())); | 430 UnorderedElementsAre(tabs[0].get())); |
| 438 EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); | 431 EXPECT_TRUE(CheckPredicates(tabs[0].get(), false)); |
| 439 EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); | 432 EXPECT_TRUE(CheckPredicates(tabs[1].get(), false)); |
| 440 } | 433 } |
| 441 | 434 |
| 442 } // namespace extensions | 435 } // namespace extensions |
| OLD | NEW |