blob: 9105fc5e75434429c4cce07ea68d44f16ce2f0ab [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/offline_pages/core/page_criteria.h"
#include "base/bind.h"
#include "components/offline_pages/core/client_namespace_constants.h"
#include "components/offline_pages/core/client_policy_controller.h"
#include "components/offline_pages/core/offline_page_item.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace offline_pages {
namespace {
GURL TestURL() {
return GURL("http://someurl.com");
}
GURL OtherURL() {
return GURL("http://other.com");
}
GURL TestURLWithFragment() {
return GURL("http://someurl.com#fragment");
}
class PageCriteriaTest : public testing::Test {
protected:
ClientPolicyController policy_controller_;
};
TEST_F(PageCriteriaTest, MeetsCriteria_Url) {
PageCriteria criteria;
criteria.url = TestURL();
OfflinePageItem item;
item.url = TestURLWithFragment();
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.url = TestURL();
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.url = OtherURL();
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_UrlWithFragment) {
PageCriteria criteria;
criteria.url = TestURLWithFragment();
OfflinePageItem item;
item.url = TestURLWithFragment();
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.url = TestURL();
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.url = OtherURL();
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_ExcludeTabBoundPages) {
PageCriteria criteria;
criteria.exclude_tab_bound_pages = true;
OfflinePageItem item;
item.client_id.name_space = kLastNNamespace;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = "";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = kDownloadNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_PagesForTabId) {
PageCriteria criteria;
criteria.pages_for_tab_id = 0;
OfflinePageItem item;
item.client_id.id = "0";
item.client_id.name_space = kLastNNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
// Namespace not restricted to tab.
item.client_id.id = "1";
item.client_id.name_space = kDownloadNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
// Different tab id.
item.client_id.id = "1";
item.client_id.name_space = kLastNNamespace;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_SupportedByDownloads) {
PageCriteria criteria;
criteria.supported_by_downloads = true;
OfflinePageItem item;
item.client_id.name_space = kDownloadNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item.client_id));
item.client_id.name_space = kLastNNamespace;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item.client_id));
}
TEST_F(PageCriteriaTest, MeetsCriteria_UserRequestedDownload) {
PageCriteria criteria;
criteria.user_requested_download = true;
OfflinePageItem item;
item.client_id.name_space = kDownloadNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item.client_id));
item.client_id.name_space = kLastNNamespace;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item.client_id));
}
TEST_F(PageCriteriaTest, MeetsCriteria_RemovedOnCacheReset) {
PageCriteria criteria;
criteria.removed_on_cache_reset = true;
OfflinePageItem item;
item.client_id.name_space = kLastNNamespace;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item.client_id));
item.client_id.name_space = kDownloadNamespace;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item.client_id));
}
TEST_F(PageCriteriaTest, MeetsCriteria_FileSize) {
PageCriteria criteria;
criteria.file_size = 123;
OfflinePageItem item;
item.file_size = 123;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.file_size = 124;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.file_size = 0;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_Digest) {
PageCriteria criteria;
criteria.digest = "abc";
OfflinePageItem item;
item.digest = "abc";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.digest = "";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.digest = "def";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_Namespaces) {
PageCriteria criteria;
criteria.client_namespaces = std::vector<std::string>{"namespace1"};
OfflinePageItem item;
item.client_id.name_space = "namespace1";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item.client_id));
item.client_id.name_space = "namespace2";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item.client_id));
item.client_id.name_space = "";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item.client_id));
}
TEST_F(PageCriteriaTest, MeetsCriteria_MultipleNamespaces) {
PageCriteria criteria;
criteria.client_namespaces =
std::vector<std::string>{"namespace1", "foobar1"};
OfflinePageItem item;
item.client_id.name_space = "namespace1";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = "foobar1";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = "namespace";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = "foobar";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id.name_space = "";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_ClientId) {
PageCriteria criteria;
criteria.client_ids = std::vector<ClientId>{ClientId("namespace1", "id")};
OfflinePageItem item;
item.client_id = ClientId("namespace1", "id");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace2", "id");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace1", "id2");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId();
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_MultipleClientId) {
PageCriteria criteria;
criteria.client_ids = std::vector<ClientId>{ClientId("namespace1", "id"),
ClientId("namespace2", "id"),
ClientId("namespace3", "id3")};
OfflinePageItem item;
item.client_id = ClientId("namespace1", "id");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace2", "id");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace3", "id3");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace", "i");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace", "");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("name", "id");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace", "foo");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_Guid) {
PageCriteria criteria;
criteria.guid = "abc";
OfflinePageItem item;
item.client_id = ClientId("namespace", "abc");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace2", "abc");
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId("namespace", "abcd");
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.client_id = ClientId();
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_RequestOrigin) {
PageCriteria criteria;
criteria.request_origin = "abc";
OfflinePageItem item;
item.request_origin = "abc";
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.request_origin = "abcd";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
item.request_origin = "";
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_OfflineId) {
PageCriteria criteria;
criteria.offline_ids = std::vector<int64_t>{1, 5};
OfflinePageItem item;
item.offline_id = 5;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.offline_id = 4;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
TEST_F(PageCriteriaTest, MeetsCriteria_AdditionalCriteria) {
PageCriteria criteria;
criteria.additional_criteria = base::BindRepeating(
[](const OfflinePageItem& item) { return item.offline_id == 5; });
OfflinePageItem item;
item.offline_id = 5;
EXPECT_TRUE(MeetsCriteria(policy_controller_, criteria, item));
item.offline_id = 4;
EXPECT_FALSE(MeetsCriteria(policy_controller_, criteria, item));
}
} // namespace
} // namespace offline_pages