page_criteria_unittest.cc 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/offline_pages/core/page_criteria.h"
  5. #include "base/bind.h"
  6. #include "components/offline_pages/core/client_namespace_constants.h"
  7. #include "components/offline_pages/core/offline_page_item.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace offline_pages {
  10. namespace {
  11. GURL TestURL() {
  12. return GURL("http://someurl.com");
  13. }
  14. GURL OtherURL() {
  15. return GURL("http://other.com");
  16. }
  17. GURL TestURLWithFragment() {
  18. return GURL("http://someurl.com#fragment");
  19. }
  20. class PageCriteriaTest : public testing::Test {
  21. };
  22. TEST_F(PageCriteriaTest, MeetsCriteria_Url) {
  23. PageCriteria criteria;
  24. criteria.url = TestURL();
  25. OfflinePageItem item;
  26. item.url = TestURLWithFragment();
  27. EXPECT_TRUE(MeetsCriteria(criteria, item));
  28. item.url = TestURL();
  29. EXPECT_TRUE(MeetsCriteria(criteria, item));
  30. item.url = OtherURL();
  31. EXPECT_FALSE(MeetsCriteria(criteria, item));
  32. }
  33. TEST_F(PageCriteriaTest, MeetsCriteria_UrlWithFragment) {
  34. PageCriteria criteria;
  35. criteria.url = TestURLWithFragment();
  36. OfflinePageItem item;
  37. item.url = TestURLWithFragment();
  38. EXPECT_TRUE(MeetsCriteria(criteria, item));
  39. item.url = TestURL();
  40. EXPECT_TRUE(MeetsCriteria(criteria, item));
  41. item.url = OtherURL();
  42. EXPECT_FALSE(MeetsCriteria(criteria, item));
  43. }
  44. TEST_F(PageCriteriaTest, MeetsCriteria_ExcludeTabBoundPages) {
  45. PageCriteria criteria;
  46. criteria.exclude_tab_bound_pages = true;
  47. OfflinePageItem item;
  48. item.client_id.name_space = kLastNNamespace;
  49. EXPECT_FALSE(MeetsCriteria(criteria, item));
  50. item.client_id.name_space = "";
  51. EXPECT_TRUE(MeetsCriteria(criteria, item));
  52. item.client_id.name_space = kDownloadNamespace;
  53. EXPECT_TRUE(MeetsCriteria(criteria, item));
  54. }
  55. TEST_F(PageCriteriaTest, MeetsCriteria_PagesForTabId) {
  56. PageCriteria criteria;
  57. criteria.pages_for_tab_id = 0;
  58. OfflinePageItem item;
  59. item.client_id.id = "0";
  60. item.client_id.name_space = kLastNNamespace;
  61. EXPECT_TRUE(MeetsCriteria(criteria, item));
  62. // Namespace not restricted to tab.
  63. item.client_id.id = "1";
  64. item.client_id.name_space = kDownloadNamespace;
  65. EXPECT_TRUE(MeetsCriteria(criteria, item));
  66. // Different tab id.
  67. item.client_id.id = "1";
  68. item.client_id.name_space = kLastNNamespace;
  69. EXPECT_FALSE(MeetsCriteria(criteria, item));
  70. }
  71. TEST_F(PageCriteriaTest, MeetsCriteria_SupportedByDownloads) {
  72. PageCriteria criteria;
  73. criteria.supported_by_downloads = true;
  74. OfflinePageItem item;
  75. item.client_id.name_space = kDownloadNamespace;
  76. EXPECT_TRUE(MeetsCriteria(criteria, item));
  77. EXPECT_TRUE(MeetsCriteria(criteria, item.client_id));
  78. item.client_id.name_space = kLastNNamespace;
  79. EXPECT_FALSE(MeetsCriteria(criteria, item));
  80. EXPECT_FALSE(MeetsCriteria(criteria, item.client_id));
  81. }
  82. TEST_F(PageCriteriaTest, MeetsCriteria_PersistentLifetime) {
  83. PageCriteria criteria;
  84. criteria.lifetime_type = LifetimeType::PERSISTENT;
  85. OfflinePageItem item;
  86. item.client_id.name_space = kDownloadNamespace;
  87. EXPECT_TRUE(MeetsCriteria(criteria, item));
  88. EXPECT_TRUE(MeetsCriteria(criteria, item.client_id));
  89. item.client_id.name_space = kLastNNamespace;
  90. EXPECT_FALSE(MeetsCriteria(criteria, item));
  91. EXPECT_FALSE(MeetsCriteria(criteria, item.client_id));
  92. }
  93. TEST_F(PageCriteriaTest, MeetsCriteria_TemporaryLifetime) {
  94. PageCriteria criteria;
  95. criteria.lifetime_type = LifetimeType::TEMPORARY;
  96. OfflinePageItem item;
  97. item.client_id.name_space = kLastNNamespace;
  98. EXPECT_TRUE(MeetsCriteria(criteria, item));
  99. EXPECT_TRUE(MeetsCriteria(criteria, item.client_id));
  100. item.client_id.name_space = kDownloadNamespace;
  101. EXPECT_FALSE(MeetsCriteria(criteria, item));
  102. EXPECT_FALSE(MeetsCriteria(criteria, item.client_id));
  103. }
  104. TEST_F(PageCriteriaTest, MeetsCriteria_FileSize) {
  105. PageCriteria criteria;
  106. criteria.file_size = 123;
  107. OfflinePageItem item;
  108. item.file_size = 123;
  109. EXPECT_TRUE(MeetsCriteria(criteria, item));
  110. item.file_size = 124;
  111. EXPECT_FALSE(MeetsCriteria(criteria, item));
  112. item.file_size = 0;
  113. EXPECT_FALSE(MeetsCriteria(criteria, item));
  114. }
  115. TEST_F(PageCriteriaTest, MeetsCriteria_Digest) {
  116. PageCriteria criteria;
  117. criteria.digest = "abc";
  118. OfflinePageItem item;
  119. item.digest = "abc";
  120. EXPECT_TRUE(MeetsCriteria(criteria, item));
  121. item.digest = "";
  122. EXPECT_FALSE(MeetsCriteria(criteria, item));
  123. item.digest = "def";
  124. EXPECT_FALSE(MeetsCriteria(criteria, item));
  125. }
  126. TEST_F(PageCriteriaTest, MeetsCriteria_Namespaces) {
  127. PageCriteria criteria;
  128. criteria.client_namespaces = std::vector<std::string>{"namespace1"};
  129. OfflinePageItem item;
  130. item.client_id.name_space = "namespace1";
  131. EXPECT_TRUE(MeetsCriteria(criteria, item));
  132. EXPECT_TRUE(MeetsCriteria(criteria, item.client_id));
  133. item.client_id.name_space = "namespace2";
  134. EXPECT_FALSE(MeetsCriteria(criteria, item));
  135. EXPECT_FALSE(MeetsCriteria(criteria, item.client_id));
  136. item.client_id.name_space = "";
  137. EXPECT_FALSE(MeetsCriteria(criteria, item));
  138. EXPECT_FALSE(MeetsCriteria(criteria, item.client_id));
  139. }
  140. TEST_F(PageCriteriaTest, MeetsCriteria_MultipleNamespaces) {
  141. PageCriteria criteria;
  142. criteria.client_namespaces =
  143. std::vector<std::string>{"namespace1", "foobar1"};
  144. OfflinePageItem item;
  145. item.client_id.name_space = "namespace1";
  146. EXPECT_TRUE(MeetsCriteria(criteria, item));
  147. item.client_id.name_space = "foobar1";
  148. EXPECT_TRUE(MeetsCriteria(criteria, item));
  149. item.client_id.name_space = "namespace";
  150. EXPECT_FALSE(MeetsCriteria(criteria, item));
  151. item.client_id.name_space = "foobar";
  152. EXPECT_FALSE(MeetsCriteria(criteria, item));
  153. item.client_id.name_space = "";
  154. EXPECT_FALSE(MeetsCriteria(criteria, item));
  155. }
  156. TEST_F(PageCriteriaTest, MeetsCriteria_ClientId) {
  157. PageCriteria criteria;
  158. criteria.client_ids = std::vector<ClientId>{ClientId("namespace1", "id")};
  159. OfflinePageItem item;
  160. item.client_id = ClientId("namespace1", "id");
  161. EXPECT_TRUE(MeetsCriteria(criteria, item));
  162. item.client_id = ClientId("namespace2", "id");
  163. EXPECT_FALSE(MeetsCriteria(criteria, item));
  164. item.client_id = ClientId("namespace1", "id2");
  165. EXPECT_FALSE(MeetsCriteria(criteria, item));
  166. item.client_id = ClientId();
  167. EXPECT_FALSE(MeetsCriteria(criteria, item));
  168. }
  169. TEST_F(PageCriteriaTest, MeetsCriteria_MultipleClientId) {
  170. PageCriteria criteria;
  171. criteria.client_ids = std::vector<ClientId>{ClientId("namespace1", "id"),
  172. ClientId("namespace2", "id"),
  173. ClientId("namespace3", "id3")};
  174. OfflinePageItem item;
  175. item.client_id = ClientId("namespace1", "id");
  176. EXPECT_TRUE(MeetsCriteria(criteria, item));
  177. item.client_id = ClientId("namespace2", "id");
  178. EXPECT_TRUE(MeetsCriteria(criteria, item));
  179. item.client_id = ClientId("namespace3", "id3");
  180. EXPECT_TRUE(MeetsCriteria(criteria, item));
  181. item.client_id = ClientId("namespace", "i");
  182. EXPECT_FALSE(MeetsCriteria(criteria, item));
  183. item.client_id = ClientId("namespace", "");
  184. EXPECT_FALSE(MeetsCriteria(criteria, item));
  185. item.client_id = ClientId("name", "id");
  186. EXPECT_FALSE(MeetsCriteria(criteria, item));
  187. item.client_id = ClientId("namespace", "foo");
  188. EXPECT_FALSE(MeetsCriteria(criteria, item));
  189. }
  190. TEST_F(PageCriteriaTest, MeetsCriteria_Guid) {
  191. PageCriteria criteria;
  192. criteria.guid = "abc";
  193. OfflinePageItem item;
  194. item.client_id = ClientId("namespace", "abc");
  195. EXPECT_TRUE(MeetsCriteria(criteria, item));
  196. item.client_id = ClientId("namespace2", "abc");
  197. EXPECT_TRUE(MeetsCriteria(criteria, item));
  198. item.client_id = ClientId("namespace", "abcd");
  199. EXPECT_FALSE(MeetsCriteria(criteria, item));
  200. item.client_id = ClientId();
  201. EXPECT_FALSE(MeetsCriteria(criteria, item));
  202. }
  203. TEST_F(PageCriteriaTest, MeetsCriteria_RequestOrigin) {
  204. PageCriteria criteria;
  205. criteria.request_origin = "abc";
  206. OfflinePageItem item;
  207. item.request_origin = "abc";
  208. EXPECT_TRUE(MeetsCriteria(criteria, item));
  209. item.request_origin = "abcd";
  210. EXPECT_FALSE(MeetsCriteria(criteria, item));
  211. item.request_origin = "";
  212. EXPECT_FALSE(MeetsCriteria(criteria, item));
  213. }
  214. TEST_F(PageCriteriaTest, MeetsCriteria_OfflineId) {
  215. PageCriteria criteria;
  216. criteria.offline_ids = std::vector<int64_t>{1, 5};
  217. OfflinePageItem item;
  218. item.offline_id = 5;
  219. EXPECT_TRUE(MeetsCriteria(criteria, item));
  220. item.offline_id = 4;
  221. EXPECT_FALSE(MeetsCriteria(criteria, item));
  222. }
  223. TEST_F(PageCriteriaTest, MeetsCriteria_AdditionalCriteria) {
  224. PageCriteria criteria;
  225. criteria.additional_criteria = base::BindRepeating(
  226. [](const OfflinePageItem& item) { return item.offline_id == 5; });
  227. OfflinePageItem item;
  228. item.offline_id = 5;
  229. EXPECT_TRUE(MeetsCriteria(criteria, item));
  230. item.offline_id = 4;
  231. EXPECT_FALSE(MeetsCriteria(criteria, item));
  232. }
  233. } // namespace
  234. } // namespace offline_pages