Commit 6ab1dc6c authored by Nicolas Ouellet-Payeur's avatar Nicolas Ouellet-Payeur Committed by Commit Bot

[BrowserSwitcher] Only write/delete cache.dat in Chrome builds

In Chromium builds, cache.dat and sitelistcache.dat will neither be written by
nor cleaned up by Legacy Browser Support.

Bug: 1054573
Change-Id: I9f0a782dc0011465dfb192cbe381892b97fc4c3e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2074920
Commit-Queue: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Auto-Submit: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745111}
parent 6e6b8903
...@@ -107,8 +107,21 @@ class BrowserSwitcherServiceTest : public InProcessBrowserTest { ...@@ -107,8 +107,21 @@ class BrowserSwitcherServiceTest : public InProcessBrowserTest {
BrowserSwitcherService::SetRefreshDelayForTesting(action_timeout() * 3 / 2); BrowserSwitcherService::SetRefreshDelayForTesting(action_timeout() * 3 / 2);
#if defined(OS_WIN) #if defined(OS_WIN)
ASSERT_TRUE(fake_appdata_dir_.CreateUniqueTempDir()); ASSERT_TRUE(fake_appdata_dir_.CreateUniqueTempDir());
base::PathService::Override(base::DIR_LOCAL_APP_DATA, #endif
fake_appdata_dir_.GetPath()); }
void SetUpOnMainThread() override {
#if defined(OS_WIN)
BrowserSwitcherServiceFactory::GetInstance()->SetTestingFactory(
browser()->profile(),
base::BindRepeating(
[](base::FilePath cache_dir, content::BrowserContext* context) {
auto* instance = new BrowserSwitcherServiceWin(
Profile::FromBrowserContext(context), cache_dir);
instance->Init();
return std::unique_ptr<KeyedService>(instance);
},
cache_dir()));
#endif #endif
} }
......
...@@ -39,16 +39,6 @@ const wchar_t kIeSiteListValue[] = L"SiteList"; ...@@ -39,16 +39,6 @@ const wchar_t kIeSiteListValue[] = L"SiteList";
const int kCurrentFileVersion = 1; const int kCurrentFileVersion = 1;
// Returns "AppData\Local\Google\BrowserSwitcher".
base::FilePath GetCacheDir() {
base::FilePath path;
if (!base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path))
return path;
path = path.AppendASCII("Google");
path = path.AppendASCII("BrowserSwitcher");
return path;
}
// Creates a RuleSet that is the concatenation of all 3 sources. // Creates a RuleSet that is the concatenation of all 3 sources.
RuleSet GetRules(const BrowserSwitcherPrefs& prefs, RuleSet GetRules(const BrowserSwitcherPrefs& prefs,
const BrowserSwitcherSitelist* sitelist) { const BrowserSwitcherSitelist* sitelist) {
...@@ -94,12 +84,8 @@ std::string SerializeCacheFile(const BrowserSwitcherPrefs& prefs, ...@@ -94,12 +84,8 @@ std::string SerializeCacheFile(const BrowserSwitcherPrefs& prefs,
return buffer.str(); return buffer.str();
} }
void SaveDataToFile(const std::string& data, base::StringPiece file_name) { void SaveDataToFile(const std::string& data, base::FilePath path) {
base::FilePath dir = GetCacheDir(); base::FilePath dir = path.DirName();
if (dir.empty())
return;
// Ensure the directory exists. // Ensure the directory exists.
bool success = base::CreateDirectory(dir); bool success = base::CreateDirectory(dir);
UMA_HISTOGRAM_BOOLEAN("BrowserSwitcher.CacheFile.MkDirSuccess", success); UMA_HISTOGRAM_BOOLEAN("BrowserSwitcher.CacheFile.MkDirSuccess", success);
...@@ -119,21 +105,12 @@ void SaveDataToFile(const std::string& data, base::StringPiece file_name) { ...@@ -119,21 +105,12 @@ void SaveDataToFile(const std::string& data, base::StringPiece file_name) {
base::WriteFile(tmp_path, data.c_str(), data.size()); base::WriteFile(tmp_path, data.c_str(), data.size());
base::FilePath dest_path = dir.AppendASCII(file_name); success = base::Move(tmp_path, path);
success = base::Move(tmp_path, dest_path);
UMA_HISTOGRAM_BOOLEAN("BrowserSwitcher.CacheFile.MoveSuccess", success); UMA_HISTOGRAM_BOOLEAN("BrowserSwitcher.CacheFile.MoveSuccess", success);
} }
// Delete the file at "AppData\Local\Google\BrowserSwitcher\<file_name>". void RemoveFile(base::FilePath path) {
void DoRemoveFileFromCacheDir(std::string file_name) { base::DeleteFile(path, false);
base::FilePath dir = GetCacheDir();
if (dir.empty())
return;
// Ignore errors while deleting.
base::FilePath dest_path = dir.AppendASCII(file_name);
base::DeleteFile(dest_path, false);
} }
// URL to fetch the IEEM sitelist from. Only used for testing. // URL to fetch the IEEM sitelist from. Only used for testing.
...@@ -152,8 +129,11 @@ bool IsLBSExtensionEnabled(Profile* profile) { ...@@ -152,8 +129,11 @@ bool IsLBSExtensionEnabled(Profile* profile) {
} // namespace } // namespace
BrowserSwitcherServiceWin::BrowserSwitcherServiceWin(Profile* profile) BrowserSwitcherServiceWin::BrowserSwitcherServiceWin(
Profile* profile,
base::FilePath cache_dir_for_testing)
: BrowserSwitcherService(profile), : BrowserSwitcherService(profile),
cache_dir_for_testing_(std::move(cache_dir_for_testing)),
sequenced_task_runner_(base::ThreadPool::CreateSequencedTaskRunner( sequenced_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(), base::TaskPriority::BEST_EFFORT, {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) { base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
...@@ -196,6 +176,21 @@ void BrowserSwitcherServiceWin::LoadRulesFromPrefs() { ...@@ -196,6 +176,21 @@ void BrowserSwitcherServiceWin::LoadRulesFromPrefs() {
SavePrefsToFile(); SavePrefsToFile();
} }
base::FilePath BrowserSwitcherServiceWin::GetCacheDir() {
if (!cache_dir_for_testing_.empty())
return cache_dir_for_testing_;
#if defined(GOOGLE_CHROME_BUILD)
base::FilePath path;
if (!base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path))
return path;
path = path.AppendASCII("Google");
path = path.AppendASCII("BrowserSwitcher");
return path;
#else
return base::FilePath();
#endif
}
void BrowserSwitcherServiceWin::OnAllRulesetsParsed() { void BrowserSwitcherServiceWin::OnAllRulesetsParsed() {
BrowserSwitcherService::OnAllRulesetsParsed(); BrowserSwitcherService::OnAllRulesetsParsed();
...@@ -239,21 +234,32 @@ void BrowserSwitcherServiceWin::OnIeemSitelistParsed(ParsedXml xml) { ...@@ -239,21 +234,32 @@ void BrowserSwitcherServiceWin::OnIeemSitelistParsed(ParsedXml xml) {
void BrowserSwitcherServiceWin::SavePrefsToFile() { void BrowserSwitcherServiceWin::SavePrefsToFile() {
DCHECK(prefs().IsEnabled()); DCHECK(prefs().IsEnabled());
base::FilePath path = GetCacheDir();
if (path.empty())
return;
path = path.AppendASCII("cache.dat");
sequenced_task_runner_->PostTask( sequenced_task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&SaveDataToFile, SerializeCacheFile(prefs(), sitelist()), base::BindOnce(&SaveDataToFile, SerializeCacheFile(prefs(), sitelist()),
"cache.dat")); std::move(path)));
} }
void BrowserSwitcherServiceWin::DeletePrefsFile() { void BrowserSwitcherServiceWin::DeletePrefsFile() {
base::FilePath path = GetCacheDir();
if (path.empty())
return;
path = path.AppendASCII("cache.dat");
sequenced_task_runner_->PostTask( sequenced_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&DoRemoveFileFromCacheDir, "cache.dat")); FROM_HERE, base::BindOnce(&RemoveFile, std::move(path)));
} }
void BrowserSwitcherServiceWin::DeleteSitelistCacheFile() { void BrowserSwitcherServiceWin::DeleteSitelistCacheFile() {
base::FilePath path = GetCacheDir();
if (path.empty())
return;
path = path.AppendASCII("sitelistcache.dat");
sequenced_task_runner_->PostTask( sequenced_task_runner_->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(&RemoveFile, std::move(path)));
base::BindOnce(&DoRemoveFileFromCacheDir, "sitelistcache.dat"));
} }
void BrowserSwitcherServiceWin::UpdateAllCacheFiles() { void BrowserSwitcherServiceWin::UpdateAllCacheFiles() {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "base/files/file_path.h"
#include "base/optional.h" #include "base/optional.h"
#include "chrome/browser/browser_switcher/browser_switcher_service.h" #include "chrome/browser/browser_switcher/browser_switcher_service.h"
...@@ -16,7 +17,9 @@ namespace browser_switcher { ...@@ -16,7 +17,9 @@ namespace browser_switcher {
// Windows-specific extension of BrowserSwitcherService. // Windows-specific extension of BrowserSwitcherService.
class BrowserSwitcherServiceWin : public BrowserSwitcherService { class BrowserSwitcherServiceWin : public BrowserSwitcherService {
public: public:
explicit BrowserSwitcherServiceWin(Profile* profile); explicit BrowserSwitcherServiceWin(
Profile* profile,
base::FilePath cache_dir_for_testing = base::FilePath());
~BrowserSwitcherServiceWin() override; ~BrowserSwitcherServiceWin() override;
static void SetIeemSitelistUrlForTesting(const std::string& url); static void SetIeemSitelistUrlForTesting(const std::string& url);
...@@ -35,6 +38,9 @@ class BrowserSwitcherServiceWin : public BrowserSwitcherService { ...@@ -35,6 +38,9 @@ class BrowserSwitcherServiceWin : public BrowserSwitcherService {
const std::vector<std::string>& changed_prefs) override; const std::vector<std::string>& changed_prefs) override;
private: private:
// Returns "AppData\Local\Google\BrowserSwitcher", in official builds.
base::FilePath GetCacheDir();
// Returns the URL to fetch to get Internet Explorer's Enterprise Mode // Returns the URL to fetch to get Internet Explorer's Enterprise Mode
// sitelist, based on policy. Returns an empty (invalid) URL if IE's SiteList // sitelist, based on policy. Returns an empty (invalid) URL if IE's SiteList
// policy is unset, or if |use_ie_sitelist| is false. // policy is unset, or if |use_ie_sitelist| is false.
...@@ -57,6 +63,8 @@ class BrowserSwitcherServiceWin : public BrowserSwitcherService { ...@@ -57,6 +63,8 @@ class BrowserSwitcherServiceWin : public BrowserSwitcherService {
// BrowserSwitcher is enabled or disabled. // BrowserSwitcher is enabled or disabled.
void UpdateAllCacheFiles(); void UpdateAllCacheFiles();
base::FilePath cache_dir_for_testing_;
scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
base::WeakPtrFactory<BrowserSwitcherServiceWin> weak_ptr_factory_{this}; base::WeakPtrFactory<BrowserSwitcherServiceWin> weak_ptr_factory_{this};
......
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