Commit 2c5d73b6 authored by Jarryd's avatar Jarryd Committed by Commit Bot

AllSites: Plumb isInstalled to siteEntries in all sites page.

isInstalled will be used to determine whether or not the browser should
warn the user about deleting offline data for associated apps when
the user goes to clear site data. The UI changes will come in a follow
up CL.

Change-Id: Ia9d3f7b51e6fc1b5584044750b3bb32479dc220f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1761587Reviewed-by: default avatarMaggie Cai <mxcai@chromium.org>
Reviewed-by: default avatarDan Beam <dbeam@chromium.org>
Commit-Queue: Jarryd Goodman <jarrydg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713536}
parent 19482bff
...@@ -41,7 +41,8 @@ let IsValid; ...@@ -41,7 +41,8 @@ let IsValid;
* engagement: number, * engagement: number,
* usage: number, * usage: number,
numCookies: number, numCookies: number,
hasPermissionSettings: boolean}} hasPermissionSettings: boolean,
isInstalled: boolean}}
*/ */
let OriginInfo; let OriginInfo;
...@@ -52,7 +53,8 @@ let OriginInfo; ...@@ -52,7 +53,8 @@ let OriginInfo;
* "example.com". * "example.com".
* @typedef {{etldPlus1: string, * @typedef {{etldPlus1: string,
* numCookies: number, * numCookies: number,
* origins: Array<OriginInfo>}} * origins: Array<OriginInfo>,
* hasInstalledPWA: boolean}}
*/ */
let SiteGroup; let SiteGroup;
......
...@@ -47,6 +47,9 @@ ...@@ -47,6 +47,9 @@
#include "chrome/browser/ui/webui/settings/settings_security_key_handler.h" #include "chrome/browser/ui/webui/settings/settings_security_key_handler.h"
#include "chrome/browser/ui/webui/settings/settings_startup_pages_handler.h" #include "chrome/browser/ui/webui/settings/settings_startup_pages_handler.h"
#include "chrome/browser/ui/webui/settings/site_settings_handler.h" #include "chrome/browser/ui/webui/settings/site_settings_handler.h"
#include "chrome/browser/web_applications/components/app_registrar.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
...@@ -161,6 +164,10 @@ void SettingsUI::RegisterProfilePrefs( ...@@ -161,6 +164,10 @@ void SettingsUI::RegisterProfilePrefs(
registry->RegisterBooleanPref(prefs::kImportDialogSearchEngine, true); registry->RegisterBooleanPref(prefs::kImportDialogSearchEngine, true);
} }
web_app::AppRegistrar& GetRegistrarForProfile(Profile* profile) {
return web_app::WebAppProvider::Get(profile)->registrar();
}
SettingsUI::SettingsUI(content::WebUI* web_ui) SettingsUI::SettingsUI(content::WebUI* web_ui)
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
: ui::MojoWebUIController(web_ui, /*enable_chrome_send =*/true), : ui::MojoWebUIController(web_ui, /*enable_chrome_send =*/true),
...@@ -206,7 +213,8 @@ SettingsUI::SettingsUI(content::WebUI* web_ui) ...@@ -206,7 +213,8 @@ SettingsUI::SettingsUI(content::WebUI* web_ui)
AddSettingsPageUIHandler(std::make_unique<ProfileInfoHandler>(profile)); AddSettingsPageUIHandler(std::make_unique<ProfileInfoHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<ProtocolHandlersHandler>()); AddSettingsPageUIHandler(std::make_unique<ProtocolHandlersHandler>());
AddSettingsPageUIHandler(std::make_unique<SearchEnginesHandler>(profile)); AddSettingsPageUIHandler(std::make_unique<SearchEnginesHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<SiteSettingsHandler>(profile)); AddSettingsPageUIHandler(std::make_unique<SiteSettingsHandler>(
profile, GetRegistrarForProfile(profile)));
AddSettingsPageUIHandler(std::make_unique<StartupPagesHandler>(web_ui)); AddSettingsPageUIHandler(std::make_unique<StartupPagesHandler>(web_ui));
AddSettingsPageUIHandler(std::make_unique<SecurityKeysPINHandler>()); AddSettingsPageUIHandler(std::make_unique<SecurityKeysPINHandler>());
AddSettingsPageUIHandler(std::make_unique<SecurityKeysResetHandler>()); AddSettingsPageUIHandler(std::make_unique<SecurityKeysResetHandler>());
......
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#include "chrome/browser/ui/webui/site_settings_helper.h" #include "chrome/browser/ui/webui/site_settings_helper.h"
#include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context.h"
#include "chrome/browser/usb/usb_chooser_context_factory.h" #include "chrome/browser/usb/usb_chooser_context_factory.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
...@@ -76,6 +78,8 @@ constexpr char kEffectiveTopLevelDomainPlus1Name[] = "etldPlus1"; ...@@ -76,6 +78,8 @@ constexpr char kEffectiveTopLevelDomainPlus1Name[] = "etldPlus1";
constexpr char kOriginList[] = "origins"; constexpr char kOriginList[] = "origins";
constexpr char kNumCookies[] = "numCookies"; constexpr char kNumCookies[] = "numCookies";
constexpr char kHasPermissionSettings[] = "hasPermissionSettings"; constexpr char kHasPermissionSettings[] = "hasPermissionSettings";
constexpr char kHasInstalledPWA[] = "hasInstalledPWA";
constexpr char kIsInstalled[] = "isInstalled";
constexpr char kZoom[] = "zoom"; constexpr char kZoom[] = "zoom";
// Placeholder value for ETLD+1 until a valid origin is added. If an ETLD+1 // Placeholder value for ETLD+1 until a valid origin is added. If an ETLD+1
// only has placeholder, then create an ETLD+1 origin. // only has placeholder, then create an ETLD+1 origin.
...@@ -141,6 +145,19 @@ void AddExceptionsGrantedByHostedApps( ...@@ -141,6 +145,19 @@ void AddExceptionsGrantedByHostedApps(
} }
} }
base::flat_set<web_app::AppId> GetInstalledApps(
Profile* profile,
web_app::AppRegistrar& registrar) {
auto apps = registrar.GetAppIds();
base::flat_set<std::string> installed;
for (auto app : apps) {
base::Optional<GURL> scope = registrar.GetAppScope(app);
if (scope.has_value())
installed.insert(scope.value().GetOrigin().spec());
}
return installed;
}
// Whether |pattern| applies to a single origin. // Whether |pattern| applies to a single origin.
bool PatternAppliesToSingleOrigin(const ContentSettingPatternSource& pattern) { bool PatternAppliesToSingleOrigin(const ContentSettingPatternSource& pattern) {
const GURL url(pattern.primary_pattern.ToString()); const GURL url(pattern.primary_pattern.ToString());
...@@ -221,9 +238,12 @@ void ConvertSiteGroupMapToListValue( ...@@ -221,9 +238,12 @@ void ConvertSiteGroupMapToListValue(
const std::map<std::string, std::set<std::string>>& site_group_map, const std::map<std::string, std::set<std::string>>& site_group_map,
const std::set<std::string>& origin_permission_set, const std::set<std::string>& origin_permission_set,
base::Value* list_value, base::Value* list_value,
Profile* profile) { Profile* profile,
web_app::AppRegistrar& registrar) {
DCHECK_EQ(base::Value::Type::LIST, list_value->type()); DCHECK_EQ(base::Value::Type::LIST, list_value->type());
DCHECK(profile); DCHECK(profile);
base::flat_set<web_app::AppId> installed_apps =
GetInstalledApps(profile, registrar);
SiteEngagementService* engagement_service = SiteEngagementService* engagement_service =
SiteEngagementService::Get(profile); SiteEngagementService::Get(profile);
for (const auto& entry : site_group_map) { for (const auto& entry : site_group_map) {
...@@ -231,6 +251,7 @@ void ConvertSiteGroupMapToListValue( ...@@ -231,6 +251,7 @@ void ConvertSiteGroupMapToListValue(
base::Value site_group(base::Value::Type::DICTIONARY); base::Value site_group(base::Value::Type::DICTIONARY);
site_group.SetKey(kEffectiveTopLevelDomainPlus1Name, site_group.SetKey(kEffectiveTopLevelDomainPlus1Name,
base::Value(entry.first)); base::Value(entry.first));
bool has_installed_pwa = false;
base::Value origin_list(base::Value::Type::LIST); base::Value origin_list(base::Value::Type::LIST);
for (const std::string& origin : entry.second) { for (const std::string& origin : entry.second) {
base::Value origin_object(base::Value::Type::DICTIONARY); base::Value origin_object(base::Value::Type::DICTIONARY);
...@@ -248,11 +269,18 @@ void ConvertSiteGroupMapToListValue( ...@@ -248,11 +269,18 @@ void ConvertSiteGroupMapToListValue(
base::Value(engagement_service->GetScore(GURL(origin)))); base::Value(engagement_service->GetScore(GURL(origin))));
origin_object.SetKey("usage", base::Value(0)); origin_object.SetKey("usage", base::Value(0));
origin_object.SetKey(kNumCookies, base::Value(0)); origin_object.SetKey(kNumCookies, base::Value(0));
bool is_installed = installed_apps.contains(origin);
if (is_installed)
has_installed_pwa = true;
origin_object.SetKey(kIsInstalled, base::Value(is_installed));
origin_object.SetKey( origin_object.SetKey(
kHasPermissionSettings, kHasPermissionSettings,
base::Value(base::Contains(origin_permission_set, origin))); base::Value(base::Contains(origin_permission_set, origin)));
origin_list.Append(std::move(origin_object)); origin_list.Append(std::move(origin_object));
} }
site_group.SetKey(kHasInstalledPWA, base::Value(has_installed_pwa));
site_group.SetKey(kNumCookies, base::Value(0)); site_group.SetKey(kNumCookies, base::Value(0));
site_group.SetKey(kOriginList, std::move(origin_list)); site_group.SetKey(kOriginList, std::move(origin_list));
list_value->Append(std::move(site_group)); list_value->Append(std::move(site_group));
...@@ -308,8 +336,10 @@ void LogAllSitesAction(AllSitesAction action) { ...@@ -308,8 +336,10 @@ void LogAllSitesAction(AllSitesAction action) {
} // namespace } // namespace
SiteSettingsHandler::SiteSettingsHandler(Profile* profile) SiteSettingsHandler::SiteSettingsHandler(Profile* profile,
web_app::AppRegistrar& app_registrar)
: profile_(profile), : profile_(profile),
app_registrar_(app_registrar),
pref_change_registrar_(nullptr) {} pref_change_registrar_(nullptr) {}
SiteSettingsHandler::~SiteSettingsHandler() { SiteSettingsHandler::~SiteSettingsHandler() {
...@@ -743,7 +773,7 @@ void SiteSettingsHandler::HandleGetAllSites(const base::ListValue* args) { ...@@ -743,7 +773,7 @@ void SiteSettingsHandler::HandleGetAllSites(const base::ListValue* args) {
// Respond with currently available data. // Respond with currently available data.
ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_, ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_,
&result, profile); &result, profile, app_registrar_);
LogAllSitesAction(AllSitesAction::kLoadPage); LogAllSitesAction(AllSitesAction::kLoadPage);
...@@ -760,7 +790,7 @@ base::Value SiteSettingsHandler::PopulateCookiesAndUsageData(Profile* profile) { ...@@ -760,7 +790,7 @@ base::Value SiteSettingsHandler::PopulateCookiesAndUsageData(Profile* profile) {
GetOriginStorage(&all_sites_map_, &origin_size_map); GetOriginStorage(&all_sites_map_, &origin_size_map);
GetOriginCookies(&all_sites_map_, &origin_cookie_map); GetOriginCookies(&all_sites_map_, &origin_cookie_map);
ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_, ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_,
&list_value, profile); &list_value, profile, app_registrar_);
// Merge the origin usage and cookies number into |list_value|. // Merge the origin usage and cookies number into |list_value|.
for (base::Value& site_group : list_value.GetList()) { for (base::Value& site_group : list_value.GetList()) {
......
...@@ -10,10 +10,13 @@ ...@@ -10,10 +10,13 @@
#include <set> #include <set>
#include <string> #include <string>
#include "base/containers/flat_set.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
#include "chrome/browser/browsing_data/cookies_tree_model.h" #include "chrome/browser/browsing_data/cookies_tree_model.h"
#include "chrome/browser/permissions/chooser_context_base.h" #include "chrome/browser/permissions/chooser_context_base.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "chrome/browser/web_applications/components/app_registrar.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "components/content_settings/core/browser/content_settings_observer.h" #include "components/content_settings/core/browser/content_settings_observer.h"
#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/browser/host_content_settings_map.h"
#include "content/public/browser/host_zoom_map.h" #include "content/public/browser/host_zoom_map.h"
...@@ -38,7 +41,8 @@ class SiteSettingsHandler : public SettingsPageUIHandler, ...@@ -38,7 +41,8 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
public ChooserContextBase::PermissionObserver, public ChooserContextBase::PermissionObserver,
public CookiesTreeModel::Observer { public CookiesTreeModel::Observer {
public: public:
explicit SiteSettingsHandler(Profile* profile); explicit SiteSettingsHandler(Profile* profile,
web_app::AppRegistrar& web_app_registrar);
~SiteSettingsHandler() override; ~SiteSettingsHandler() override;
// SettingsPageUIHandler: // SettingsPageUIHandler:
...@@ -240,6 +244,7 @@ class SiteSettingsHandler : public SettingsPageUIHandler, ...@@ -240,6 +244,7 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
void ClearAllSitesMapForTesting(); void ClearAllSitesMapForTesting();
Profile* profile_; Profile* profile_;
web_app::AppRegistrar& app_registrar_;
content::NotificationRegistrar notification_registrar_; content::NotificationRegistrar notification_registrar_;
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include "chrome/browser/ui/webui/site_settings_helper.h" #include "chrome/browser/ui/webui/site_settings_helper.h"
#include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context.h"
#include "chrome/browser/usb/usb_chooser_context_factory.h" #include "chrome/browser/usb/usb_chooser_context_factory.h"
#include "chrome/browser/web_applications/components/web_app_helpers.h"
#include "chrome/browser/web_applications/test/test_app_registrar.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/browser_with_test_window_test.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
...@@ -126,6 +128,10 @@ class FlashContentSettingsChangeWaiter : public content_settings::Observer { ...@@ -126,6 +128,10 @@ class FlashContentSettingsChangeWaiter : public content_settings::Observer {
}; };
#endif #endif
std::string GenerateFakeAppId(const GURL& url) {
return web_app::GenerateAppIdFromURL(url);
}
} // namespace } // namespace
namespace settings { namespace settings {
...@@ -173,7 +179,7 @@ class SiteSettingsHandlerTest : public testing::Test { ...@@ -173,7 +179,7 @@ class SiteSettingsHandlerTest : public testing::Test {
ContentSettingsType::COOKIES)), ContentSettingsType::COOKIES)),
kFlash(site_settings::ContentSettingsTypeToGroupName( kFlash(site_settings::ContentSettingsTypeToGroupName(
ContentSettingsType::PLUGINS)), ContentSettingsType::PLUGINS)),
handler_(&profile_) { handler_(&profile_, app_registrar_) {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>( user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
std::make_unique<chromeos::MockUserManager>()); std::make_unique<chromeos::MockUserManager>());
...@@ -188,6 +194,7 @@ class SiteSettingsHandlerTest : public testing::Test { ...@@ -188,6 +194,7 @@ class SiteSettingsHandlerTest : public testing::Test {
TestingProfile* profile() { return &profile_; } TestingProfile* profile() { return &profile_; }
TestingProfile* incognito_profile() { return incognito_profile_; } TestingProfile* incognito_profile() { return incognito_profile_; }
web_app::TestAppRegistrar& app_registrar() { return app_registrar_; }
content::TestWebUI* web_ui() { return &web_ui_; } content::TestWebUI* web_ui() { return &web_ui_; }
SiteSettingsHandler* handler() { return &handler_; } SiteSettingsHandler* handler() { return &handler_; }
...@@ -472,6 +479,7 @@ class SiteSettingsHandlerTest : public testing::Test { ...@@ -472,6 +479,7 @@ class SiteSettingsHandlerTest : public testing::Test {
content::BrowserTaskEnvironment task_environment_; content::BrowserTaskEnvironment task_environment_;
TestingProfile profile_; TestingProfile profile_;
TestingProfile* incognito_profile_; TestingProfile* incognito_profile_;
web_app::TestAppRegistrar app_registrar_;
content::TestWebUI web_ui_; content::TestWebUI web_ui_;
SiteSettingsHandler handler_; SiteSettingsHandler handler_;
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
...@@ -789,6 +797,48 @@ TEST_F(SiteSettingsHandlerTest, OnStorageFetched) { ...@@ -789,6 +797,48 @@ TEST_F(SiteSettingsHandlerTest, OnStorageFetched) {
EXPECT_EQ(1, origin_info->FindKey("numCookies")->GetDouble()); EXPECT_EQ(1, origin_info->FindKey("numCookies")->GetDouble());
} }
TEST_F(SiteSettingsHandlerTest, InstalledApps) {
web_app::TestAppRegistrar& registrar = app_registrar();
const GURL url("http://abc.example.com/");
registrar.AddExternalApp(GenerateFakeAppId(url), {url});
SetUpCookiesTreeModel();
const base::ListValue* storage_and_cookie_list =
GetOnStorageFetchedSentListValue();
EXPECT_EQ(3U, storage_and_cookie_list->GetSize());
const base::DictionaryValue* site_group;
ASSERT_TRUE(storage_and_cookie_list->GetDictionary(0, &site_group));
std::string etld_plus1_string;
ASSERT_TRUE(site_group->GetString("etldPlus1", &etld_plus1_string));
ASSERT_EQ("example.com", etld_plus1_string);
ASSERT_TRUE(site_group->FindKey("hasInstalledPWA")->GetBool());
const base::ListValue* origin_list;
ASSERT_TRUE(site_group->GetList("origins", &origin_list));
const base::DictionaryValue* origin_info;
ASSERT_TRUE(origin_list->GetDictionary(0, &origin_info));
EXPECT_EQ("http://abc.example.com/",
origin_info->FindKey("origin")->GetString());
EXPECT_TRUE(origin_info->FindKey("isInstalled")->GetBool());
// Verify that installed booleans are false for other siteGroups/origins
ASSERT_TRUE(storage_and_cookie_list->GetDictionary(1, &site_group));
ASSERT_TRUE(site_group->GetString("etldPlus1", &etld_plus1_string));
ASSERT_EQ("google.com", etld_plus1_string);
ASSERT_TRUE(site_group->GetList("origins", &origin_list));
ASSERT_TRUE(origin_list->GetDictionary(0, &origin_info));
EXPECT_EQ("https://www.google.com/",
origin_info->FindKey("origin")->GetString());
EXPECT_FALSE(site_group->FindKey("hasInstalledPWA")->GetBool());
EXPECT_FALSE(origin_info->FindKey("isInstalled")->GetBool());
}
TEST_F(SiteSettingsHandlerTest, Origins) { TEST_F(SiteSettingsHandlerTest, Origins) {
const std::string google("https://www.google.com:443"); const std::string google("https://www.google.com:443");
const std::string uma_base("WebsiteSettings.Menu.PermissionChanged"); const std::string uma_base("WebsiteSettings.Menu.PermissionChanged");
...@@ -1234,7 +1284,7 @@ class SiteSettingsHandlerInfobarTest : public BrowserWithTestWindowTest { ...@@ -1234,7 +1284,7 @@ class SiteSettingsHandlerInfobarTest : public BrowserWithTestWindowTest {
void SetUp() override { void SetUp() override {
BrowserWithTestWindowTest::SetUp(); BrowserWithTestWindowTest::SetUp();
handler_ = std::make_unique<SiteSettingsHandler>(profile()); handler_ = std::make_unique<SiteSettingsHandler>(profile(), app_registrar_);
handler()->set_web_ui(web_ui()); handler()->set_web_ui(web_ui());
handler()->AllowJavascript(); handler()->AllowJavascript();
web_ui()->ClearTrackedCalls(); web_ui()->ClearTrackedCalls();
...@@ -1281,6 +1331,7 @@ class SiteSettingsHandlerInfobarTest : public BrowserWithTestWindowTest { ...@@ -1281,6 +1331,7 @@ class SiteSettingsHandlerInfobarTest : public BrowserWithTestWindowTest {
const std::string kNotifications; const std::string kNotifications;
private: private:
web_app::TestAppRegistrar app_registrar_;
content::TestWebUI web_ui_; content::TestWebUI web_ui_;
std::unique_ptr<SiteSettingsHandler> handler_; std::unique_ptr<SiteSettingsHandler> handler_;
std::unique_ptr<BrowserWindow> window2_; std::unique_ptr<BrowserWindow> window2_;
......
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