Commit 4f4ee439 authored by Maggie Cai's avatar Maggie Cai Committed by Commit Bot

[IntentHandling] Delete app id from preferred apps list.

This CL adds the functionality to delete all entries with the given app
id from the preferred app list. This CL also migrates the unit tests
from the original preferred app tests.

BUG=853604

Change-Id: I475c0c2776c7c2723b7cfdcdfb4a9dccd2ddcbce
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2117141Reviewed-by: default avatarNancy Wang <nancylingwang@chromium.org>
Commit-Queue: Maggie Cai <mxcai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753131}
parent 4c8498ac
...@@ -70,6 +70,20 @@ void PreferredAppsList::DeletePreferredApp( ...@@ -70,6 +70,20 @@ void PreferredAppsList::DeletePreferredApp(
} }
} }
// static
void PreferredAppsList::DeleteAppId(const std::string& app_id,
PreferredApps* preferred_apps) {
auto iter = preferred_apps->begin();
// Go through the list and delete the entry with requested app_id.
while (iter != preferred_apps->end()) {
if ((*iter)->app_id == app_id) {
iter = preferred_apps->erase(iter);
} else {
iter++;
}
}
}
base::Optional<std::string> PreferredAppsList::FindPreferredAppForIntent( base::Optional<std::string> PreferredAppsList::FindPreferredAppForIntent(
const apps::mojom::IntentPtr& intent) { const apps::mojom::IntentPtr& intent) {
base::Optional<std::string> best_match_app_id = base::nullopt; base::Optional<std::string> best_match_app_id = base::nullopt;
...@@ -106,4 +120,8 @@ void PreferredAppsList::DeletePreferredApp( ...@@ -106,4 +120,8 @@ void PreferredAppsList::DeletePreferredApp(
DeletePreferredApp(app_id, intent_filter, &preferred_apps_); DeletePreferredApp(app_id, intent_filter, &preferred_apps_);
} }
void PreferredAppsList::DeleteAppId(const std::string& app_id) {
DeleteAppId(app_id, &preferred_apps_);
}
} // namespace apps } // namespace apps
...@@ -43,6 +43,10 @@ class PreferredAppsList { ...@@ -43,6 +43,10 @@ class PreferredAppsList {
const apps::mojom::IntentFilterPtr& intent_filter, const apps::mojom::IntentFilterPtr& intent_filter,
PreferredApps* preferred_apps); PreferredApps* preferred_apps);
// Delete all settings for an |app_id|.
static void DeleteAppId(const std::string& app_id,
PreferredApps* preferred_apps);
// Find preferred app id for an |intent|. // Find preferred app id for an |intent|.
base::Optional<std::string> FindPreferredAppForIntent( base::Optional<std::string> FindPreferredAppForIntent(
const apps::mojom::IntentPtr& intent); const apps::mojom::IntentPtr& intent);
...@@ -61,6 +65,9 @@ class PreferredAppsList { ...@@ -61,6 +65,9 @@ class PreferredAppsList {
void DeletePreferredApp(const std::string& app_id, void DeletePreferredApp(const std::string& app_id,
const apps::mojom::IntentFilterPtr& intent_filter); const apps::mojom::IntentFilterPtr& intent_filter);
// Delete all settings for an |app_id|.
void DeleteAppId(const std::string& app_id);
private: private:
PreferredApps preferred_apps_; PreferredApps preferred_apps_;
}; };
......
...@@ -456,3 +456,130 @@ TEST_F(PreferredAppListTest, DeleteOverlapFilters) { ...@@ -456,3 +456,130 @@ TEST_F(PreferredAppListTest, DeleteOverlapFilters) {
EXPECT_EQ(base::nullopt, EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_4)); preferred_apps_.FindPreferredAppForUrl(filter_url_4));
} }
// Test that DeleteAppId() can delete the setting for one filter.
TEST_F(PreferredAppListTest, DeleteAppIdForOneFilter) {
GURL filter_url = GURL("https://www.google.com/abc");
auto intent_filter = apps_util::CreateIntentFilterForUrlScope(filter_url);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url));
preferred_apps_.DeleteAppId(kAppId1);
EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(filter_url));
}
// Test that when multiple filters set to the same app id, DeleteAppId() can
// delete all of them.
TEST_F(PreferredAppListTest, DeleteAppIdForMultipleFilters) {
GURL filter_url_1 = GURL("https://www.google.com/abc");
auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1));
GURL filter_url_2 = GURL("https://www.abc.com/google");
auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_2);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter_2);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2));
GURL filter_url_3 = GURL("tel://12345678/");
auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter_3);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_3));
preferred_apps_.DeleteAppId(kAppId1);
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_1));
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_2));
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_3));
}
// Test that for filter with multiple condition values, DeleteAppId() can
// delete them all.
TEST_F(PreferredAppListTest, DeleteAppIdForMultipleConditionValues) {
auto intent_filter =
apps_util::CreateIntentFilterForUrlScope(GURL("https://www.google.com/"));
intent_filter->conditions[0]->condition_values.push_back(
apps_util::MakeConditionValue("http",
apps::mojom::PatternMatchType::kNone));
preferred_apps_.AddPreferredApp(kAppId1, intent_filter);
GURL url_https = GURL("https://www.google.com/");
GURL url_http = GURL("http://www.google.com/");
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_https));
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_http));
preferred_apps_.DeleteAppId(kAppId1);
EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_https));
EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_http));
}
// Test that for multiple filters set to different app ids, DeleteAppId() only
// deletes the correct app id.
TEST_F(PreferredAppListTest, DeleteAppIdForMultipleAppIds) {
GURL filter_url_1 = GURL("https://www.google.com/abc");
auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1));
GURL filter_url_2 = GURL("https://www.abc.com/google");
auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_2);
preferred_apps_.AddPreferredApp(kAppId1, intent_filter_2);
EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2));
GURL filter_url_3 = GURL("tel://12345678/");
auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3);
preferred_apps_.AddPreferredApp(kAppId2, intent_filter_3);
EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_3));
GURL filter_url_4 = GURL("https://www.google.com.au/");
auto intent_filter_4 = apps_util::CreateIntentFilterForUrlScope(filter_url_4);
preferred_apps_.AddPreferredApp(kAppId2, intent_filter_4);
EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_4));
GURL filter_url_5 = GURL("https://www.example.com/google");
auto intent_filter_5 = apps_util::CreateIntentFilterForUrlScope(filter_url_5);
preferred_apps_.AddPreferredApp(kAppId3, intent_filter_5);
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5));
GURL filter_url_6 = GURL("tel://98765432/");
auto intent_filter_6 = apps_util::CreateIntentFilterForUrlScope(filter_url_6);
preferred_apps_.AddPreferredApp(kAppId3, intent_filter_6);
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6));
preferred_apps_.DeleteAppId(kAppId1);
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_1));
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_2));
EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_3));
EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_4));
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5));
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6));
preferred_apps_.DeleteAppId(kAppId2);
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_3));
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_4));
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5));
EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6));
preferred_apps_.DeleteAppId(kAppId3);
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_5));
EXPECT_EQ(base::nullopt,
preferred_apps_.FindPreferredAppForUrl(filter_url_6));
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment