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 |