summaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/web_cache/renderer/web_cache_render_process_observer.cc33
-rw-r--r--components/web_cache/renderer/web_cache_render_process_observer.h12
2 files changed, 36 insertions, 9 deletions
diff --git a/components/web_cache/renderer/web_cache_render_process_observer.cc b/components/web_cache/renderer/web_cache_render_process_observer.cc
index acf11c1..a1f1425 100644
--- a/components/web_cache/renderer/web_cache_render_process_observer.cc
+++ b/components/web_cache/renderer/web_cache_render_process_observer.cc
@@ -15,7 +15,7 @@
namespace web_cache {
WebCacheRenderProcessObserver::WebCacheRenderProcessObserver()
- : clear_cache_pending_(false) {
+ : clear_cache_state_(kInit) {
content::ServiceRegistry* service_registry =
content::RenderThread::Get()->GetServiceRegistry();
service_registry->AddService(base::Bind(
@@ -31,9 +31,16 @@ void WebCacheRenderProcessObserver::BindRequest(
}
void WebCacheRenderProcessObserver::ExecutePendingClearCache() {
- if (clear_cache_pending_) {
- clear_cache_pending_ = false;
- blink::WebCache::clear();
+ switch (clear_cache_state_) {
+ case kInit:
+ clear_cache_state_ = kNavigate_Pending;
+ break;
+ case kNavigate_Pending:
+ break;
+ case kClearCache_Pending:
+ blink::WebCache::clear();
+ clear_cache_state_ = kInit;
+ break;
}
}
@@ -50,10 +57,22 @@ void WebCacheRenderProcessObserver::SetCacheCapacities(
}
void WebCacheRenderProcessObserver::ClearCache(bool on_navigation) {
- if (on_navigation)
- clear_cache_pending_ = true;
- else
+ if (!on_navigation) {
blink::WebCache::clear();
+ return;
+ }
+
+ switch (clear_cache_state_) {
+ case kInit:
+ clear_cache_state_ = kClearCache_Pending;
+ break;
+ case kNavigate_Pending:
+ blink::WebCache::clear();
+ clear_cache_state_ = kInit;
+ break;
+ case kClearCache_Pending:
+ break;
+ }
}
} // namespace web_cache
diff --git a/components/web_cache/renderer/web_cache_render_process_observer.h b/components/web_cache/renderer/web_cache_render_process_observer.h
index aee3eac..a43f539 100644
--- a/components/web_cache/renderer/web_cache_render_process_observer.h
+++ b/components/web_cache/renderer/web_cache_render_process_observer.h
@@ -28,6 +28,12 @@ class WebCacheRenderProcessObserver : public mojom::WebCache {
void ExecutePendingClearCache();
private:
+ enum State {
+ kInit,
+ kNavigate_Pending,
+ kClearCache_Pending,
+ };
+
// mojom::WebCache methods:
void SetCacheCapacities(uint64_t min_dead_capacity,
uint64_t max_dead_capacity,
@@ -36,8 +42,10 @@ class WebCacheRenderProcessObserver : public mojom::WebCache {
// navigation event.
void ClearCache(bool on_navigation) override;
- // If true, the web cache shall be cleared before the next navigation event.
- bool clear_cache_pending_;
+ // Records status regarding the sequence of navigation event and
+ // ClearCache(true) call, to ensure delayed 'clear cache' command always
+ // get executed on navigation.
+ State clear_cache_state_;
mojo::BindingSet<mojom::WebCache> bindings_;