11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/web_cache/renderer/web_cache_render_process_observer.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <limits> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/web_cache/common/web_cache_messages.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebCache.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing blink::WebCache; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace web_cache { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst size_t kUnitializedCacheCapacity = UINT_MAX; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWebCacheRenderProcessObserver::WebCacheRenderProcessObserver() 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : clear_cache_pending_(false), 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webkit_initialized_(false), 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_min_dead_capacity_(0), 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_max_dead_capacity_(0), 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_capacity_(kUnitializedCacheCapacity) { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWebCacheRenderProcessObserver::~WebCacheRenderProcessObserver() { 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebCacheRenderProcessObserver::ExecutePendingClearCache() { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (clear_cache_pending_ && webkit_initialized_) { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci clear_cache_pending_ = false; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::clear(); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WebCacheRenderProcessObserver::OnControlMessageReceived( 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const IPC::Message& message) { 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool handled = true; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_BEGIN_MESSAGE_MAP(WebCacheRenderProcessObserver, message) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(WebCacheMsg_SetCacheCapacities, OnSetCacheCapacities) 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(WebCacheMsg_ClearCache, OnClearCache) 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_UNHANDLED(handled = false) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_END_MESSAGE_MAP() 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return handled; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebCacheRenderProcessObserver::WebKitInitialized() { 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webkit_initialized_ = true; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (pending_cache_capacity_ != kUnitializedCacheCapacity) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::setCapacities(pending_cache_min_dead_capacity_, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_max_dead_capacity_, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_capacity_); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebCacheRenderProcessObserver::OnRenderProcessShutdown() { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webkit_initialized_ = false; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebCacheRenderProcessObserver::OnSetCacheCapacities( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t min_dead_capacity, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t max_dead_capacity, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t capacity) { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!webkit_initialized_) { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_min_dead_capacity_ = min_dead_capacity; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_max_dead_capacity_ = max_dead_capacity; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_cache_capacity_ = capacity; 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::setCapacities( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci min_dead_capacity, max_dead_capacity, capacity); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebCacheRenderProcessObserver::OnClearCache(bool on_navigation) { 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (on_navigation || !webkit_initialized_) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci clear_cache_pending_ = true; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::clear(); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace web_cache 85