summaryrefslogtreecommitdiff
path: root/chromium/components/web_cache/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/web_cache/renderer')
-rw-r--r--chromium/components/web_cache/renderer/BUILD.gn17
-rw-r--r--chromium/components/web_cache/renderer/DEPS4
-rw-r--r--chromium/components/web_cache/renderer/web_cache_render_process_observer.cc84
-rw-r--r--chromium/components/web_cache/renderer/web_cache_render_process_observer.h51
4 files changed, 156 insertions, 0 deletions
diff --git a/chromium/components/web_cache/renderer/BUILD.gn b/chromium/components/web_cache/renderer/BUILD.gn
new file mode 100644
index 00000000000..cdd703a8145
--- /dev/null
+++ b/chromium/components/web_cache/renderer/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+static_library("renderer") {
+ output_name = "web_cache_renderer"
+ sources = [
+ "web_cache_render_process_observer.cc",
+ "web_cache_render_process_observer.h",
+ ]
+
+ deps = [
+ "//components/web_cache/common",
+ "//content/public/renderer",
+ "//third_party/WebKit/public:blink",
+ ]
+}
diff --git a/chromium/components/web_cache/renderer/DEPS b/chromium/components/web_cache/renderer/DEPS
new file mode 100644
index 00000000000..100b3d3a109
--- /dev/null
+++ b/chromium/components/web_cache/renderer/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+ "+content/public/renderer",
+ "+third_party/WebKit/public/web",
+]
diff --git a/chromium/components/web_cache/renderer/web_cache_render_process_observer.cc b/chromium/components/web_cache/renderer/web_cache_render_process_observer.cc
new file mode 100644
index 00000000000..a273817a2c0
--- /dev/null
+++ b/chromium/components/web_cache/renderer/web_cache_render_process_observer.cc
@@ -0,0 +1,84 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/web_cache/renderer/web_cache_render_process_observer.h"
+
+#include <limits>
+
+#include "components/web_cache/common/web_cache_messages.h"
+#include "third_party/WebKit/public/web/WebCache.h"
+
+using blink::WebCache;
+
+namespace web_cache {
+
+namespace {
+const size_t kUnitializedCacheCapacity = UINT_MAX;
+}
+
+WebCacheRenderProcessObserver::WebCacheRenderProcessObserver()
+ : clear_cache_pending_(false),
+ webkit_initialized_(false),
+ pending_cache_min_dead_capacity_(0),
+ pending_cache_max_dead_capacity_(0),
+ pending_cache_capacity_(kUnitializedCacheCapacity) {
+}
+
+WebCacheRenderProcessObserver::~WebCacheRenderProcessObserver() {
+}
+
+void WebCacheRenderProcessObserver::ExecutePendingClearCache() {
+ if (clear_cache_pending_ && webkit_initialized_) {
+ clear_cache_pending_ = false;
+ WebCache::clear();
+ }
+}
+
+bool WebCacheRenderProcessObserver::OnControlMessageReceived(
+ const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(WebCacheRenderProcessObserver, message)
+ IPC_MESSAGE_HANDLER(WebCacheMsg_SetCacheCapacities, OnSetCacheCapacities)
+ IPC_MESSAGE_HANDLER(WebCacheMsg_ClearCache, OnClearCache)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void WebCacheRenderProcessObserver::WebKitInitialized() {
+ webkit_initialized_ = true;
+ if (pending_cache_capacity_ != kUnitializedCacheCapacity) {
+ WebCache::setCapacities(pending_cache_min_dead_capacity_,
+ pending_cache_max_dead_capacity_,
+ pending_cache_capacity_);
+ }
+}
+
+void WebCacheRenderProcessObserver::OnRenderProcessShutdown() {
+ webkit_initialized_ = false;
+}
+
+void WebCacheRenderProcessObserver::OnSetCacheCapacities(
+ size_t min_dead_capacity,
+ size_t max_dead_capacity,
+ size_t capacity) {
+ if (!webkit_initialized_) {
+ pending_cache_min_dead_capacity_ = min_dead_capacity;
+ pending_cache_max_dead_capacity_ = max_dead_capacity;
+ pending_cache_capacity_ = capacity;
+ return;
+ }
+
+ WebCache::setCapacities(
+ min_dead_capacity, max_dead_capacity, capacity);
+}
+
+void WebCacheRenderProcessObserver::OnClearCache(bool on_navigation) {
+ if (on_navigation || !webkit_initialized_)
+ clear_cache_pending_ = true;
+ else
+ WebCache::clear();
+}
+
+} // namespace web_cache
diff --git a/chromium/components/web_cache/renderer/web_cache_render_process_observer.h b/chromium/components/web_cache/renderer/web_cache_render_process_observer.h
new file mode 100644
index 00000000000..06ffc53319c
--- /dev/null
+++ b/chromium/components/web_cache/renderer/web_cache_render_process_observer.h
@@ -0,0 +1,51 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_WEB_CACHE_RENDERER_WEB_CACHE_RENDER_PROCESS_OBSERVER_H_
+#define COMPONENTS_WEB_CACHE_RENDERER_WEB_CACHE_RENDER_PROCESS_OBSERVER_H_
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "content/public/renderer/render_process_observer.h"
+
+namespace web_cache {
+
+// This class filters the incoming cache related control messages.
+class WebCacheRenderProcessObserver : public content::RenderProcessObserver {
+ public:
+ WebCacheRenderProcessObserver();
+ ~WebCacheRenderProcessObserver() override;
+
+ // Needs to be called by RenderViews in case of navigations to execute
+ // any 'clear cache' commands that were delayed until the next navigation.
+ void ExecutePendingClearCache();
+
+ private:
+ // RenderProcessObserver implementation.
+ bool OnControlMessageReceived(const IPC::Message& message) override;
+ void WebKitInitialized() override;
+ void OnRenderProcessShutdown() override;
+
+ // Message handlers.
+ void OnSetCacheCapacities(size_t min_dead_capacity,
+ size_t max_dead_capacity,
+ size_t capacity);
+ // If |on_navigation| is true, the clearing is delayed until the next
+ // navigation event.
+ void OnClearCache(bool on_navigation);
+
+ // If true, the web cache shall be cleared before the next navigation event.
+ bool clear_cache_pending_;
+ bool webkit_initialized_;
+ size_t pending_cache_min_dead_capacity_;
+ size_t pending_cache_max_dead_capacity_;
+ size_t pending_cache_capacity_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebCacheRenderProcessObserver);
+};
+
+} // namespace web_cache
+
+#endif // COMPONENTS_WEB_CACHE_RENDERER_WEB_CACHE_RENDER_PROCESS_OBSERVER_H_
+