summaryrefslogtreecommitdiffstats
path: root/android_webview/browser
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-05 03:23:01 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-05 03:23:01 +0000
commit8937e960f8d241bf558c41ef9afb1eb80981065e (patch)
tree6e177fcca084c7d243a36b5265a5e3d45fed1bcd /android_webview/browser
parent314208b537d27c66a54d1fa3dc12dae426499e58 (diff)
downloadchromium_src-8937e960f8d241bf558c41ef9afb1eb80981065e.zip
chromium_src-8937e960f8d241bf558c41ef9afb1eb80981065e.tar.gz
chromium_src-8937e960f8d241bf558c41ef9afb1eb80981065e.tar.bz2
Implement Android WebView clearCache clear disk cache
Second part to implementing clearCache which clears the http disk cache. Code is similar to BrowsingDataRemover::DoClearCache but simpler. BUG= Review URL: https://chromiumcodereview.appspot.com/11047009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@160314 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/browser')
-rw-r--r--android_webview/browser/net_disk_cache_remover.cc76
-rw-r--r--android_webview/browser/net_disk_cache_remover.h23
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.cc4
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.h3
4 files changed, 106 insertions, 0 deletions
diff --git a/android_webview/browser/net_disk_cache_remover.cc b/android_webview/browser/net_disk_cache_remover.cc
new file mode 100644
index 0000000..27b5f1d
--- /dev/null
+++ b/android_webview/browser/net_disk_cache_remover.cc
@@ -0,0 +1,76 @@
+// Copyright (c) 2012 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 "android_webview/browser/net_disk_cache_remover.h"
+
+#include "base/bind_helpers.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/web_contents.h"
+#include "net/disk_cache/disk_cache.h"
+#include "net/http/http_cache.h"
+#include "net/http/http_transaction_factory.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "net/url_request/url_request_context.h"
+#include "net/base/completion_callback.h"
+
+using content::BrowserThread;
+using disk_cache::Backend;
+using net::CompletionCallback;
+using net::URLRequestContextGetter;
+
+namespace {
+// Everything is called and accessed on the IO thread.
+
+void Noop(int rv) {
+ DCHECK(rv == net::OK);
+}
+
+void CallDoomAllEntries(Backend** backend, int rv) {
+ DCHECK(rv == net::OK);
+ (*backend)->DoomAllEntries(base::Bind(&Noop));
+}
+
+void ClearHttpDiskCacheOfContext(URLRequestContextGetter* context_getter) {
+ typedef Backend* BackendPtr; // Make line below easier to understand.
+ BackendPtr* backend_ptr = new BackendPtr(NULL);
+ CompletionCallback callback(base::Bind(&CallDoomAllEntries,
+ base::Owned(backend_ptr)));
+
+ int rv = context_getter->GetURLRequestContext()->
+ http_transaction_factory()->GetCache()->GetBackend(backend_ptr, callback);
+
+ // If not net::ERR_IO_PENDING, then backend pointer is updated but callback
+ // is not called, so call it explicitly.
+ if (rv != net::ERR_IO_PENDING)
+ callback.Run(net::OK);
+}
+
+void ClearHttpDiskCacheOnIoThread(
+ URLRequestContextGetter* main_context_getter,
+ URLRequestContextGetter* media_context_getter) {
+ ClearHttpDiskCacheOfContext(main_context_getter);
+ ClearHttpDiskCacheOfContext(media_context_getter);
+}
+
+} // namespace
+
+namespace android_webview {
+
+void RemoveHttpDiskCache(content::BrowserContext* browser_context,
+ int renderer_child_id) {
+ URLRequestContextGetter* main_context_getter =
+ browser_context->GetRequestContextForRenderProcess(renderer_child_id);
+ URLRequestContextGetter* media_context_getter =
+ browser_context->GetMediaRequestContextForRenderProcess(
+ renderer_child_id);
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&ClearHttpDiskCacheOnIoThread,
+ base::Unretained(main_context_getter),
+ base::Unretained(media_context_getter)));
+}
+
+} // namespace android_webview
diff --git a/android_webview/browser/net_disk_cache_remover.h b/android_webview/browser/net_disk_cache_remover.h
new file mode 100644
index 0000000..fd2c84e
--- /dev/null
+++ b/android_webview/browser/net_disk_cache_remover.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 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 ANDROID_WEBVIEW_BROWSER_NET_DISK_CACHE_REMOVER_H_
+#define ANDROID_WEBVIEW_BROWSER_NET_DISK_CACHE_REMOVER_H_
+
+namespace content {
+
+class BrowserContext;
+
+} // namespace content
+
+namespace android_webview {
+
+// Clear all http disk cache for this renderer. This method is asynchronous and
+// will noop if a previous call has not finished.
+void RemoveHttpDiskCache(content::BrowserContext* browser_context,
+ int renderer_child_id);
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_BROWSER_NET_DISK_CACHE_REMOVER_H_
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
index 63ac993..66e7134 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
@@ -32,6 +32,10 @@ void AwRenderViewHostExt::DocumentHasImages(DocumentHasImagesResult result) {
this_id));
}
+void AwRenderViewHostExt::ClearCache() {
+ Send(new AwViewMsg_ClearCache);
+}
+
void AwRenderViewHostExt::RenderViewGone(base::TerminationStatus status) {
DCHECK(CalledOnValidThread());
for (std::map<int, DocumentHasImagesResult>::iterator pending_req =
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.h b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
index f5bade2..fcde789 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.h
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
@@ -25,6 +25,9 @@ class AwRenderViewHostExt : public content::WebContentsObserver,
typedef base::Callback<void(bool)> DocumentHasImagesResult;
void DocumentHasImages(DocumentHasImagesResult result);
+ // Clear all WebCore memory cache (not only for this view).
+ void ClearCache();
+
private:
// content::WebContentsObserver implementation.
virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE;