diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-05 03:23:01 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-05 03:23:01 +0000 |
commit | 8937e960f8d241bf558c41ef9afb1eb80981065e (patch) | |
tree | 6e177fcca084c7d243a36b5265a5e3d45fed1bcd /android_webview/browser | |
parent | 314208b537d27c66a54d1fa3dc12dae426499e58 (diff) | |
download | chromium_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')
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; |