diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 01:44:46 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 01:44:46 +0000 |
commit | 86b74e06db75748b22131bef171975f8785c8552 (patch) | |
tree | eb6f0f1e327248a66cc9eb2591f9be6882a03a61 /android_webview | |
parent | ab0a9651b308bce418735aaa87a906f118467ff3 (diff) | |
download | chromium_src-86b74e06db75748b22131bef171975f8785c8552.zip chromium_src-86b74e06db75748b22131bef171975f8785c8552.tar.gz chromium_src-86b74e06db75748b22131bef171975f8785c8552.tar.bz2 |
Implement part of Android WebView.clearCache
For velocity, not refactoring BrowsingDataRemover code into content/.
This method is similar to BrowsingDataRemover::REMOVE_CACHE mask. Still need to implement clearing http disk cache.
BUG=
Review URL: https://chromiumcodereview.appspot.com/11051003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159827 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
10 files changed, 120 insertions, 1 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp index 461365b..32292ad 100644 --- a/android_webview/android_webview.gyp +++ b/android_webview/android_webview.gyp @@ -53,6 +53,8 @@ 'lib/main/aw_main_delegate.h', 'lib/main/webview_entry_point.cc', 'lib/main/webview_stubs.cc', + 'renderer/aw_render_process_observer.cc', + 'renderer/aw_render_process_observer.h', 'renderer/aw_render_view_ext.cc', 'renderer/aw_render_view_ext.h', ], diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h index 52bea1b..96978b1 100644 --- a/android_webview/common/render_view_messages.h +++ b/android_webview/common/render_view_messages.h @@ -26,6 +26,9 @@ namespace IPC { // RenderView messages // These are messages sent from the browser to the renderer process. +// Tells the renderer to drop all WebCore memory cache. +IPC_MESSAGE_CONTROL0(AwViewMsg_ClearCache); + // Request for the renderer to determine if the document contains any image // elements. The id should be passed in the response message so the response // can be associated with the request. diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 635d16b..f5f426e 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -150,6 +150,17 @@ public class AwContents { // WebView[Provider] method implementations (where not provided by ContentViewCore) //-------------------------------------------------------------------------------------------- + /** + * Clears the resource cache. Note that the cache is per-application, so this will clear the + * cache for all WebViews used. + * + * @param includeDiskFiles if false, only the RAM cache is cleared + * TODO(boliu): Clear disk cache part not implemented yet. + */ + public void clearCache(boolean includeDiskFiles) { + nativeClearCache(mNativeAwContents, includeDiskFiles); + } + public void documentHasImages(Message message) { nativeDocumentHasImages(mNativeAwContents, message); } @@ -317,4 +328,5 @@ public class AwContents { private native void nativeFindAllAsync(int nativeAwContents, String searchString); private native void nativeFindNext(int nativeAwContents, boolean forward); private native void nativeClearMatches(int nativeAwContents); + private native void nativeClearCache(int nativeAwContents, boolean includeDiskFiles); } diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java index f7545f9..e2364d7 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java @@ -12,6 +12,7 @@ import android.test.suitebuilder.annotation.SmallTest; import org.chromium.android_webview.AwContents; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.UrlUtils; import org.chromium.content.browser.test.util.CallbackHelper; import java.util.concurrent.Semaphore; @@ -78,4 +79,21 @@ public class AwContentsTest extends AndroidWebViewTestBase { result = callDocumentHasImagesSync(awContents); assertEquals(1, result); } + + public void testClearCache() throws Throwable { + // TODO(boliu): Implement actual test. + final AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient); + final AwContents awContents = testView.getAwContents(); + loadUrlSync( + awContents.getContentViewCore(), + mContentsClient.getOnPageFinishedHelper(), + UrlUtils.getTestFileUrl("webview/hello_world.html")); + + runTestOnUiThread(new Runnable() { + @Override + public void run() { + awContents.clearCache(false); + } + }); + } } diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc index 0d24080..11299d5 100644 --- a/android_webview/lib/main/aw_main_delegate.cc +++ b/android_webview/lib/main/aw_main_delegate.cc @@ -7,10 +7,13 @@ #include "android_webview/common/url_constants.h" #include "android_webview/lib/aw_browser_dependency_factory_impl.h" #include "android_webview/lib/aw_content_browser_client.h" +#include "android_webview/renderer/aw_render_process_observer.h" #include "android_webview/renderer/aw_render_view_ext.h" #include "base/lazy_instance.h" #include "base/logging.h" +#include "base/memory/scoped_ptr.h" #include "base/utf_string_conversions.h" +#include "content/public/renderer/render_thread.h" #include "chrome/common/chrome_paths.h" #include "chrome/renderer/chrome_content_renderer_client.h" #include "content/public/browser/browser_main_runner.h" @@ -35,7 +38,14 @@ class AwContentRendererClient : public chrome::ChromeContentRendererClient { WebKit::WebString content_scheme( ASCIIToUTF16(android_webview::kContentScheme)); WebKit::WebSecurityPolicy::registerURLSchemeAsLocal(content_scheme); + + aw_render_process_observer_.reset(new AwRenderProcessObserver); + content::RenderThread::Get()->AddObserver( + aw_render_process_observer_.get()); } + + private: + scoped_ptr<AwRenderProcessObserver> aw_render_process_observer_; }; } diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index f1c6322..f3005a3 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -5,6 +5,7 @@ #include "android_webview/native/aw_contents.h" #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" +#include "android_webview/common/render_view_messages.h" #include "android_webview/native/aw_browser_dependency_factory.h" #include "android_webview/native/aw_contents_container.h" #include "android_webview/native/aw_web_contents_delegate.h" @@ -243,6 +244,14 @@ void AwContents::ClearMatches(JNIEnv* env, jobject obj) { GetFindHelper()->ClearMatches(); } +void AwContents::ClearCache( + JNIEnv* env, + jobject obj, + jboolean include_disk_files) { + render_view_host_ext_->Send(new AwViewMsg_ClearCache); + // TODO(boliu): Implement clear network disk cache. +} + FindHelper* AwContents::GetFindHelper() { if (!find_helper_.get()) { WebContents* web_contents = contents_container_->GetWebContents(); diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h index 556f5054..d03cf69 100644 --- a/android_webview/native/aw_contents.h +++ b/android_webview/native/aw_contents.h @@ -71,6 +71,7 @@ class AwContents : public FindHelper::Listener { void FindAllAsync(JNIEnv* env, jobject obj, jstring search_string); void FindNext(JNIEnv* env, jobject obj, jboolean forward); void ClearMatches(JNIEnv* env, jobject obj); + void ClearCache(JNIEnv* env, jobject obj, jboolean include_disk_files); FindHelper* GetFindHelper(); diff --git a/android_webview/renderer/aw_render_process_observer.cc b/android_webview/renderer/aw_render_process_observer.cc new file mode 100644 index 0000000..3754b7e --- /dev/null +++ b/android_webview/renderer/aw_render_process_observer.cc @@ -0,0 +1,33 @@ +// 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/renderer/aw_render_process_observer.h" + +#include "android_webview/common/render_view_messages.h" +#include "ipc/ipc_message_macros.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" + +namespace android_webview { + +AwRenderProcessObserver::AwRenderProcessObserver() { +} + +AwRenderProcessObserver::~AwRenderProcessObserver() { +} + +bool AwRenderProcessObserver::OnControlMessageReceived( + const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(AwRenderProcessObserver, message) + IPC_MESSAGE_HANDLER(AwViewMsg_ClearCache, OnClearCache) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void AwRenderProcessObserver::OnClearCache() { + WebKit::WebCache::clear(); +} + +} // nanemspace android_webview diff --git a/android_webview/renderer/aw_render_process_observer.h b/android_webview/renderer/aw_render_process_observer.h new file mode 100644 index 0000000..41e3d94 --- /dev/null +++ b/android_webview/renderer/aw_render_process_observer.h @@ -0,0 +1,31 @@ +// 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_RENDERER_AW_RENDER_PROCESS_OBSERVER_H_ +#define ANDROID_WEBVIEW_RENDERER_AW_RENDER_PROCESS_OBSERVER_H_ + +#include "content/public/renderer/render_process_observer.h" + +#include "base/compiler_specific.h" + +namespace android_webview { + +// A RenderProcessObserver implementation used for handling android_webview +// specific render-process wide IPC messages. +class AwRenderProcessObserver : public content::RenderProcessObserver { + public: + AwRenderProcessObserver(); + virtual ~AwRenderProcessObserver(); + + // content::RenderProcessObserver implementation. + virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE; + + private: + void OnClearCache(); +}; + +} // namespace android_webview + +#endif // ANDROID_WEBVIEW_RENDERER_AW_RENDER_PROCESS_OBSERVER_H_ + diff --git a/android_webview/renderer/aw_render_view_ext.h b/android_webview/renderer/aw_render_view_ext.h index fadb457..79a1a74 100644 --- a/android_webview/renderer/aw_render_view_ext.h +++ b/android_webview/renderer/aw_render_view_ext.h @@ -38,7 +38,7 @@ class AwRenderViewExt : public content::RenderViewObserver, // WebKit::WebPermissionClient implementation. virtual bool allowImage(WebKit::WebFrame* frame, bool enabledPerSettings, - const WebKit::WebURL& imageURL); + const WebKit::WebURL& imageURL) OVERRIDE; DISALLOW_COPY_AND_ASSIGN(AwRenderViewExt); }; |