summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 01:44:46 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 01:44:46 +0000
commit86b74e06db75748b22131bef171975f8785c8552 (patch)
treeeb6f0f1e327248a66cc9eb2591f9be6882a03a61 /android_webview
parentab0a9651b308bce418735aaa87a906f118467ff3 (diff)
downloadchromium_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')
-rw-r--r--android_webview/android_webview.gyp2
-rw-r--r--android_webview/common/render_view_messages.h3
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java12
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java18
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc10
-rw-r--r--android_webview/native/aw_contents.cc9
-rw-r--r--android_webview/native/aw_contents.h1
-rw-r--r--android_webview/renderer/aw_render_process_observer.cc33
-rw-r--r--android_webview/renderer/aw_render_process_observer.h31
-rw-r--r--android_webview/renderer/aw_render_view_ext.h2
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);
};