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