1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/web_cache/renderer/web_cache_render_process_observer.h" 6 7#include <limits> 8 9#include "components/web_cache/common/web_cache_messages.h" 10#include "third_party/WebKit/public/web/WebCache.h" 11 12using blink::WebCache; 13 14namespace web_cache { 15 16namespace { 17const size_t kUnitializedCacheCapacity = UINT_MAX; 18} 19 20WebCacheRenderProcessObserver::WebCacheRenderProcessObserver() 21 : clear_cache_pending_(false), 22 webkit_initialized_(false), 23 pending_cache_min_dead_capacity_(0), 24 pending_cache_max_dead_capacity_(0), 25 pending_cache_capacity_(kUnitializedCacheCapacity) { 26} 27 28WebCacheRenderProcessObserver::~WebCacheRenderProcessObserver() { 29} 30 31void WebCacheRenderProcessObserver::ExecutePendingClearCache() { 32 if (clear_cache_pending_ && webkit_initialized_) { 33 clear_cache_pending_ = false; 34 WebCache::clear(); 35 } 36} 37 38bool WebCacheRenderProcessObserver::OnControlMessageReceived( 39 const IPC::Message& message) { 40 bool handled = true; 41 IPC_BEGIN_MESSAGE_MAP(WebCacheRenderProcessObserver, message) 42 IPC_MESSAGE_HANDLER(WebCacheMsg_SetCacheCapacities, OnSetCacheCapacities) 43 IPC_MESSAGE_HANDLER(WebCacheMsg_ClearCache, OnClearCache) 44 IPC_MESSAGE_UNHANDLED(handled = false) 45 IPC_END_MESSAGE_MAP() 46 return handled; 47} 48 49void WebCacheRenderProcessObserver::WebKitInitialized() { 50 webkit_initialized_ = true; 51 if (pending_cache_capacity_ != kUnitializedCacheCapacity) { 52 WebCache::setCapacities(pending_cache_min_dead_capacity_, 53 pending_cache_max_dead_capacity_, 54 pending_cache_capacity_); 55 } 56} 57 58void WebCacheRenderProcessObserver::OnRenderProcessShutdown() { 59 webkit_initialized_ = false; 60} 61 62void WebCacheRenderProcessObserver::OnSetCacheCapacities( 63 size_t min_dead_capacity, 64 size_t max_dead_capacity, 65 size_t capacity) { 66 if (!webkit_initialized_) { 67 pending_cache_min_dead_capacity_ = min_dead_capacity; 68 pending_cache_max_dead_capacity_ = max_dead_capacity; 69 pending_cache_capacity_ = capacity; 70 return; 71 } 72 73 WebCache::setCapacities( 74 min_dead_capacity, max_dead_capacity, capacity); 75} 76 77void WebCacheRenderProcessObserver::OnClearCache(bool on_navigation) { 78 if (on_navigation || !webkit_initialized_) 79 clear_cache_pending_ = true; 80 else 81 WebCache::clear(); 82} 83 84} // namespace web_cache 85