diff options
-rw-r--r-- | components/web_cache/renderer/web_cache_render_process_observer.cc | 33 | ||||
-rw-r--r-- | components/web_cache/renderer/web_cache_render_process_observer.h | 12 |
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_; |