Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: chrome/browser/browsing_data/browsing_data_remover_browsertest.cc

Issue 2008323002: Add tests for the cache deletion in BrowsingDataRemover (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix memory leak Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
index a70fcd8002df6ff8b153fcb47910158d31190b61..aa22bdb6163f4a3b3a350b44f814c2e0d7603645 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -3,13 +3,19 @@
// found in the LICENSE file.
#include <stddef.h>
+#include <memory>
+#include "base/bind.h"
+#include "base/callback.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
+#include "base/run_loop.h"
#include "chrome/browser/browsing_data/browsing_data_helper.h"
#include "chrome/browser/browsing_data/browsing_data_remover.h"
#include "chrome/browser/browsing_data/browsing_data_remover_factory.h"
#include "chrome/browser/browsing_data/browsing_data_remover_test_util.h"
+#include "chrome/browser/browsing_data/cache_counter.h"
+#include "chrome/browser/browsing_data/origin_filter_builder.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
@@ -25,8 +31,9 @@
#include "content/public/common/content_paths.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/download_test_observer.h"
+#include "net/dns/mock_host_resolver.h"
#include "net/http/transport_security_state.h"
-#include "net/test/url_request/url_request_mock_http_job.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -34,10 +41,7 @@
using content::BrowserThread;
namespace {
-void SetUrlRequestMock(const base::FilePath& path) {
- net::URLRequestMockHTTPJob::AddUrlHandlers(path,
- BrowserThread::GetBlockingPool());
-}
+static const char* kExampleHost = "example.com";
}
class BrowsingDataRemoverBrowserTest : public InProcessBrowserTest {
@@ -47,8 +51,9 @@ class BrowsingDataRemoverBrowserTest : public InProcessBrowserTest {
void SetUpOnMainThread() override {
base::FilePath path;
PathService::Get(content::DIR_TEST_DATA, &path);
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path));
+ host_resolver()->AddRule(kExampleHost, "127.0.0.1");
+ embedded_test_server()->ServeFilesFromDirectory(path);
+ ASSERT_TRUE(embedded_test_server()->Start());
}
void RunScriptAndCheckResult(const std::string& script,
@@ -90,6 +95,21 @@ class BrowsingDataRemoverBrowserTest : public InProcessBrowserTest {
VerifyDownloadCount(1u);
}
+ BrowsingDataCounter::ResultInt GetCacheSize() {
+ base::RunLoop run_loop;
+ BrowsingDataCounter::ResultInt size;
+
+ CacheCounter counter;
+ counter.Init(browser()->profile(),
+ base::Bind(&BrowsingDataRemoverBrowserTest::OnCacheSizeResult,
+ base::Unretained(this),
+ base::Unretained(&run_loop),
+ base::Unretained(&size)));
+ counter.Restart();
+ run_loop.Run();
+ return size;
+ }
+
void RemoveAndWait(int remove_mask) {
BrowsingDataRemover* remover =
BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile());
@@ -98,6 +118,31 @@ class BrowsingDataRemoverBrowserTest : public InProcessBrowserTest {
remove_mask, BrowsingDataHelper::UNPROTECTED_WEB);
completion_observer.BlockUntilCompletion();
}
+
+ void RemoveWithFilterAndWait(
+ int remove_mask,
+ const BrowsingDataFilterBuilder& filter_builder) {
+ BrowsingDataRemover* remover =
+ BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile());
+ BrowsingDataRemoverCompletionObserver completion_observer(remover);
+ remover->RemoveWithFilter(
+ BrowsingDataRemover::Period(BrowsingDataRemover::LAST_HOUR),
+ remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, filter_builder);
+ completion_observer.BlockUntilCompletion();
+ }
+
+ private:
+ void OnCacheSizeResult(
+ base::RunLoop* run_loop,
+ BrowsingDataCounter::ResultInt* out_size,
+ std::unique_ptr<BrowsingDataCounter::Result> result) {
+ if (!result->Finished())
+ return;
+
+ *out_size = static_cast<BrowsingDataCounter::FinishedResult*>(
+ result.get())->Value();
+ run_loop->Quit();
+ }
};
class BrowsingDataRemoverTransportSecurityStateBrowserTest
@@ -161,7 +206,8 @@ IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, DownloadProhibited) {
// Verify can modify database after deleting it.
IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, Database) {
- GURL url(net::URLRequestMockHTTPJob::GetMockUrl("simple_database.html"));
+ GURL url = embedded_test_server()->GetURL("/simple_database.html");
+ LOG(ERROR) << url;
ui_test_utils::NavigateToURL(browser(), url);
RunScriptAndCheckResult("createTable()", "done");
@@ -176,6 +222,45 @@ IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, Database) {
RunScriptAndCheckResult("getRecords()", "text2");
}
+// Verify that cache deleting cache finishes successfully. Complete deletion
+// of cache should leave it empty, and partial deletion should leave nonzero
+// amount of data. Note that this tests the integration of BrowsingDataRemover
+// with ConditionalCacheDeletionHelper. Whether ConditionalCacheDeletionHelper
+// actually deletes the correct entries is tested
+// in ConditionalCacheDeletionHelperBrowsertest.
+IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, Cache) {
+ // Load several resources.
+ GURL url1 = embedded_test_server()->GetURL("/simple.html");
+ GURL url2 = embedded_test_server()->GetURL(kExampleHost, "/simple.html");
+ ASSERT_FALSE(url::IsSameOriginWith(url1, url2));
+ ui_test_utils::NavigateToURL(browser(), url1);
+ ui_test_utils::NavigateToURL(browser(), url2);
+
+ // The cache is nonempty, because we created entries by visiting websites.
+ BrowsingDataCounter::ResultInt original_size = GetCacheSize();
+ EXPECT_GT(original_size, 0);
+
+ // Partially delete cache data. Delete data for localhost, which is the origin
+ // of |url1|, but not for |kExampleHost|, which is the origin of |url2|.
+ OriginFilterBuilder filter_builder(OriginFilterBuilder::WHITELIST);
+ filter_builder.AddOrigin(url::Origin(url1));
+ RemoveWithFilterAndWait(BrowsingDataRemover::REMOVE_CACHE, filter_builder);
+
+ // After the partial deletion, the cache should be smaller but still nonempty.
+ BrowsingDataCounter::ResultInt new_size = GetCacheSize();
+ EXPECT_LT(new_size, original_size);
+
+ // Another partial deletion with the same filter should have no effect.
+ RemoveWithFilterAndWait(BrowsingDataRemover::REMOVE_CACHE, filter_builder);
+ EXPECT_EQ(new_size, GetCacheSize());
+
+ // Delete the remaining data.
+ RemoveAndWait(BrowsingDataRemover::REMOVE_CACHE);
+
+ // The cache is empty.
+ EXPECT_EQ(0, GetCacheSize());
+}
+
// Verify that TransportSecurityState data is cleared for REMOVE_CACHE.
IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverTransportSecurityStateBrowserTest,
ClearTransportSecurityState) {
« no previous file with comments | « chrome/browser/browsing_data/browsing_data_remover.cc ('k') | components/browsing_data/conditional_cache_deletion_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698