Commit be3b690b authored by Tsuyoshi Horo's avatar Tsuyoshi Horo Committed by Commit Bot

Clear PrefetchedSignedExchangeCache by chrome://settings/clearBrowserData

Bug: 935267
Change-Id: Ib395a834742ae38523ab26bae49d5f9b3b8c1552
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1775857Reviewed-by: default avatarKunihiko Sakamoto <ksakamoto@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691557}
parent 4b4eac00
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "base/task/post_task.h" #include "base/task/post_task.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
...@@ -444,6 +445,9 @@ void BrowsingDataRemoverImpl::RemoveImpl( ...@@ -444,6 +445,9 @@ void BrowsingDataRemoverImpl::RemoveImpl(
delete_begin, delete_begin,
CreateTaskCompletionClosureForMojo(TracingDataType::kNetworkHistory)); CreateTaskCompletionClosureForMojo(TracingDataType::kNetworkHistory));
// Clears the PrefetchedSignedExchangeCache of all RenderFrameHostImpls.
RenderFrameHostImpl::ClearAllPrefetchedSignedExchangeCache();
// Tell the shader disk cache to clear. // Tell the shader disk cache to clear.
base::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache")); base::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache"));
storage_partition_remove_mask |= storage_partition_remove_mask |=
......
...@@ -795,6 +795,14 @@ void RenderFrameHostImpl::SetNetworkFactoryForTesting( ...@@ -795,6 +795,14 @@ void RenderFrameHostImpl::SetNetworkFactoryForTesting(
create_network_factory_callback; create_network_factory_callback;
} }
// static
void RenderFrameHostImpl::ClearAllPrefetchedSignedExchangeCache() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer();
for (auto it : *frames)
it.second->ClearPrefetchedSignedExchangeCache();
}
RenderFrameHostImpl::RenderFrameHostImpl( RenderFrameHostImpl::RenderFrameHostImpl(
SiteInstance* site_instance, SiteInstance* site_instance,
scoped_refptr<RenderViewHostImpl> render_view_host, scoped_refptr<RenderViewHostImpl> render_view_host,
...@@ -7244,6 +7252,11 @@ RenderFrameHostImpl::EnsurePrefetchedSignedExchangeCache() { ...@@ -7244,6 +7252,11 @@ RenderFrameHostImpl::EnsurePrefetchedSignedExchangeCache() {
return prefetched_signed_exchange_cache_; return prefetched_signed_exchange_cache_;
} }
void RenderFrameHostImpl::ClearPrefetchedSignedExchangeCache() {
if (prefetched_signed_exchange_cache_)
prefetched_signed_exchange_cache_->Clear();
}
RenderWidgetHostImpl* RenderFrameHostImpl::GetLocalRenderWidgetHost() const { RenderWidgetHostImpl* RenderFrameHostImpl::GetLocalRenderWidgetHost() const {
if (!parent_) if (!parent_)
return render_view_host_->GetWidget(); return render_view_host_->GetWidget();
......
...@@ -218,6 +218,9 @@ class CONTENT_EXPORT RenderFrameHostImpl ...@@ -218,6 +218,9 @@ class CONTENT_EXPORT RenderFrameHostImpl
static void SetNetworkFactoryForTesting( static void SetNetworkFactoryForTesting(
const CreateNetworkFactoryCallback& url_loader_factory_callback); const CreateNetworkFactoryCallback& url_loader_factory_callback);
// Clears the all prefetched cached signed exchanges.
static void ClearAllPrefetchedSignedExchangeCache();
~RenderFrameHostImpl() override; ~RenderFrameHostImpl() override;
// RenderFrameHost // RenderFrameHost
...@@ -984,6 +987,9 @@ class CONTENT_EXPORT RenderFrameHostImpl ...@@ -984,6 +987,9 @@ class CONTENT_EXPORT RenderFrameHostImpl
scoped_refptr<PrefetchedSignedExchangeCache> scoped_refptr<PrefetchedSignedExchangeCache>
EnsurePrefetchedSignedExchangeCache(); EnsurePrefetchedSignedExchangeCache();
// Clears the entries in the PrefetchedSignedExchangeCache if exists.
void ClearPrefetchedSignedExchangeCache();
// Adds |message| to the DevTools console only if it is unique (i.e. has not // Adds |message| to the DevTools console only if it is unique (i.e. has not
// been added to the console previously from this frame). // been added to the console previously from this frame).
virtual void AddUniqueMessageToConsole( virtual void AddUniqueMessageToConsole(
......
...@@ -645,6 +645,10 @@ void PrefetchedSignedExchangeCache::Store( ...@@ -645,6 +645,10 @@ void PrefetchedSignedExchangeCache::Store(
exchanges_[outer_url] = std::move(cached_exchange); exchanges_[outer_url] = std::move(cached_exchange);
} }
void PrefetchedSignedExchangeCache::Clear() {
exchanges_.clear();
}
std::unique_ptr<NavigationLoaderInterceptor> std::unique_ptr<NavigationLoaderInterceptor>
PrefetchedSignedExchangeCache::MaybeCreateInterceptor(const GURL& outer_url) { PrefetchedSignedExchangeCache::MaybeCreateInterceptor(const GURL& outer_url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
......
...@@ -105,6 +105,8 @@ class CONTENT_EXPORT PrefetchedSignedExchangeCache ...@@ -105,6 +105,8 @@ class CONTENT_EXPORT PrefetchedSignedExchangeCache
void Store(std::unique_ptr<const Entry> cached_exchange); void Store(std::unique_ptr<const Entry> cached_exchange);
void Clear();
std::unique_ptr<NavigationLoaderInterceptor> MaybeCreateInterceptor( std::unique_ptr<NavigationLoaderInterceptor> MaybeCreateInterceptor(
const GURL& outer_url); const GURL& outer_url);
......
...@@ -26,14 +26,17 @@ ...@@ -26,14 +26,17 @@
#include "content/browser/loader/prefetch_browsertest_base.h" #include "content/browser/loader/prefetch_browsertest_base.h"
#include "content/browser/web_package/mock_signed_exchange_handler.h" #include "content/browser/web_package/mock_signed_exchange_handler.h"
#include "content/browser/web_package/prefetched_signed_exchange_cache.h" #include "content/browser/web_package/prefetched_signed_exchange_cache.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/browsing_data_remover.h"
#include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/common/content_features.h" #include "content/public/common/content_features.h"
#include "content/public/common/content_paths.h" #include "content/public/common/content_paths.h"
#include "content/public/test/browser_test_utils.h" #include "content/public/test/browser_test_utils.h"
#include "content/public/test/browsing_data_remover_test_util.h"
#include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h" #include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h" #include "content/shell/browser/shell.h"
...@@ -917,6 +920,52 @@ IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest, ...@@ -917,6 +920,52 @@ IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest,
} }
} }
IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest, ClearAll) {
const char* hostname = "example.com";
const char* sxg_path = "/target.sxg";
const char* inner_url_path = "/target.html";
const std::string content =
"<head><title>Prefetch Target (SXG)</title></head>";
auto sxg_request_counter =
RequestCounter::CreateAndMonitor(embedded_test_server(), sxg_path);
LoadPrefetchMainResourceSXGTestPage(
hostname, "/prefetch.html" /* prefetch_page_path */, hostname, sxg_path,
hostname, inner_url_path,
net::SHA256HashValue({{0x01}}) /* header_integrity */, content,
{} /* sxg_outer_headers */, {} /* sxg_inner_headers */);
EXPECT_EQ(1, sxg_request_counter->GetRequestCount());
const GURL sxg_url = embedded_test_server()->GetURL(hostname, sxg_path);
const GURL inner_url =
embedded_test_server()->GetURL(hostname, inner_url_path);
EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
GetCachedExchanges(shell()).size());
BrowsingDataRemover* remover = BrowserContext::GetBrowsingDataRemover(
shell()->web_contents()->GetBrowserContext());
BrowsingDataRemoverCompletionObserver completion_observer(remover);
remover->RemoveAndReply(
base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_CACHE,
content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB,
&completion_observer);
completion_observer.BlockUntilCompletion();
// Need to setup MockSignedExchangeHandlerFactory because the SXG is loaded
// from the server again.
MockSignedExchangeHandlerFactory factory({MockSignedExchangeHandlerParams(
sxg_url, SignedExchangeLoadResult::kSuccess, net::OK, inner_url,
"text/html", {} /* sxg_inner_headers */,
net::SHA256HashValue({{0x01}}) /* header_integrity */)});
ScopedSignedExchangeHandlerFactory scoped_factory(&factory);
NavigateToURLAndWaitTitle(sxg_url, "Prefetch Target (SXG)");
// SXG must be fetched again.
EXPECT_EQ(2, sxg_request_counter->GetRequestCount());
}
INSTANTIATE_TEST_SUITE_P(SignedExchangePrefetchBrowserTest, INSTANTIATE_TEST_SUITE_P(SignedExchangePrefetchBrowserTest,
SignedExchangePrefetchBrowserTest, SignedExchangePrefetchBrowserTest,
::testing::Combine(::testing::Bool(), ::testing::Combine(::testing::Bool(),
......
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