Commit e5c176e5 authored by Dave Tapuska's avatar Dave Tapuska Committed by Commit Bot

Convert AwViewMsg_ClearCache to a mojom message.

There are a series of messages that are sent to the RenderThreadObserver
of the webview. This maps ClearCache onto one of those messages.
Other targeted messages will be converted in followup CLs.

BUG=993189

Change-Id: I93d84f08bfcc74211ac175463754bf6b9d3d7ce8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515043
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824874}
parent ec33cc63
......@@ -182,6 +182,7 @@ source_set("browser") {
"//android_webview/browser/metrics",
"//android_webview/browser/variations",
"//android_webview/common",
"//android_webview/common:mojom",
"//android_webview/proto:aw_variations_seed_proto",
"//base",
"//components/autofill/android/provider",
......
......@@ -752,7 +752,11 @@ void AwContents::ClearCache(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean include_disk_files) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
render_view_host_ext_->ClearCache();
AwRenderProcess* aw_render_process =
AwRenderProcess::GetInstanceForRenderProcessHost(
web_contents_->GetMainFrame()->GetProcess());
aw_render_process->ClearCache();
if (include_disk_files) {
content::BrowsingDataRemover* remover =
......
......@@ -56,11 +56,24 @@ AwRenderProcess::~AwRenderProcess() {
java_obj_.Reset();
}
void AwRenderProcess::ClearCache() {
// If the renderer is in between the Init and the Ready phase (ie. hasn't
// started child process yet), clearing the cache will not do anything so it
// is fine to drop it here if there isn't a |renderer_remote_|.
if (renderer_remote_) {
renderer_remote_->ClearCache();
}
}
void AwRenderProcess::Ready() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
Java_AwRenderProcess_setNative(AttachCurrentThread(), java_obj_,
reinterpret_cast<jlong>(this));
renderer_remote_.reset();
render_process_host_->GetChannel()->GetRemoteAssociatedInterface(
&renderer_remote_);
}
void AwRenderProcess::Cleanup() {
......
......@@ -5,11 +5,12 @@
#ifndef ANDROID_WEBVIEW_BROWSER_AW_RENDER_PROCESS_H_
#define ANDROID_WEBVIEW_BROWSER_AW_RENDER_PROCESS_H_
#include "android_webview/common/mojom/renderer.mojom.h"
#include "base/android/scoped_java_ref.h"
#include "base/memory/weak_ptr.h"
#include "base/supports_user_data.h"
#include "content/public/browser/render_process_host_observer.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
namespace android_webview {
......@@ -31,6 +32,8 @@ class AwRenderProcess : public content::RenderProcessHostObserver,
explicit AwRenderProcess(content::RenderProcessHost* render_process_host);
~AwRenderProcess() override;
void ClearCache();
private:
void Ready();
void Cleanup();
......@@ -46,6 +49,8 @@ class AwRenderProcess : public content::RenderProcessHostObserver,
content::RenderProcessHost* render_process_host_;
mojo::AssociatedRemote<mojom::Renderer> renderer_remote_;
base::WeakPtrFactory<AwRenderProcess> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(AwRenderProcess);
};
......
......@@ -53,11 +53,6 @@ void AwRenderViewHostExt::DocumentHasImages(DocumentHasImagesResult result) {
}
}
void AwRenderViewHostExt::ClearCache() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
web_contents()->GetRenderViewHost()->Send(new AwViewMsg_ClearCache);
}
void AwRenderViewHostExt::KillRenderProcess() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
web_contents()->GetRenderViewHost()->Send(new AwViewMsg_KillProcess);
......
......@@ -44,9 +44,6 @@ class AwRenderViewHostExt : public content::WebContentsObserver {
using DocumentHasImagesResult = base::OnceCallback<void(bool)>;
void DocumentHasImages(DocumentHasImagesResult result);
// Clear all WebCore memory cache (not only for this view).
void ClearCache();
// Tells render process to kill itself (only for testing).
void KillRenderProcess();
......
......@@ -59,3 +59,12 @@ source_set("common") {
"//url",
]
}
mojom("mojom") {
# We don't want Blink variants of bindings to be generated.
disable_variants = true
sources = [ "mojom/renderer.mojom" ]
public_deps = [ "//mojo/public/mojom/base" ]
}
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
// Copyright 2020 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.
module android_webview.mojom;
// Similar to content.mojom.Renderer. This interface adds additional
// things that webview needs from the renderer process.
interface Renderer {
// Clear the memory cache. The cache is process wide so this will influence
// other webview instances as well.
ClearCache();
};
......@@ -40,9 +40,6 @@ IPC_STRUCT_TRAITS_END()
// 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)
// Tells render process to kill itself (only for testing).
IPC_MESSAGE_CONTROL0(AwViewMsg_KillProcess)
......
......@@ -32,6 +32,7 @@ source_set("renderer") {
"//android_webview:generate_aw_resources",
"//android_webview:generate_aw_strings",
"//android_webview/common",
"//android_webview/common:mojom",
"//base",
"//components/android_system_error_page",
"//components/autofill/content/renderer",
......
......@@ -6,6 +6,7 @@
#include "android_webview/common/render_view_messages.h"
#include "ipc/ipc_message_macros.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
#include "third_party/blink/public/platform/web_cache.h"
#include "third_party/blink/public/platform/web_network_state_notifier.h"
......@@ -21,7 +22,6 @@ bool AwRenderThreadObserver::OnControlMessageReceived(
const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AwRenderThreadObserver, message)
IPC_MESSAGE_HANDLER(AwViewMsg_ClearCache, OnClearCache)
IPC_MESSAGE_HANDLER(AwViewMsg_KillProcess, OnKillProcess)
IPC_MESSAGE_HANDLER(AwViewMsg_SetJsOnlineProperty, OnSetJsOnlineProperty)
IPC_MESSAGE_UNHANDLED(handled = false)
......@@ -29,7 +29,27 @@ bool AwRenderThreadObserver::OnControlMessageReceived(
return handled;
}
void AwRenderThreadObserver::OnClearCache() {
void AwRenderThreadObserver::RegisterMojoInterfaces(
blink::AssociatedInterfaceRegistry* associated_interfaces) {
// base::Unretained can be used here because the associated_interfaces
// is owned by the RenderThread and will live for the duration of the
// RenderThread.
associated_interfaces->AddInterface(
base::BindRepeating(&AwRenderThreadObserver::OnRendererAssociatedRequest,
base::Unretained(this)));
}
void AwRenderThreadObserver::UnregisterMojoInterfaces(
blink::AssociatedInterfaceRegistry* associated_interfaces) {
associated_interfaces->RemoveInterface(mojom::Renderer::Name_);
}
void AwRenderThreadObserver::OnRendererAssociatedRequest(
mojo::PendingAssociatedReceiver<mojom::Renderer> receiver) {
receiver_.Bind(std::move(receiver));
}
void AwRenderThreadObserver::ClearCache() {
blink::WebCache::Clear();
}
......
......@@ -5,29 +5,40 @@
#ifndef ANDROID_WEBVIEW_RENDERER_AW_RENDER_THREAD_OBSERVER_H_
#define ANDROID_WEBVIEW_RENDERER_AW_RENDER_THREAD_OBSERVER_H_
#include "content/public/renderer/render_thread_observer.h"
#include "android_webview/common/mojom/renderer.mojom.h"
#include "base/compiler_specific.h"
#include "content/public/renderer/render_thread_observer.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
namespace android_webview {
// A RenderThreadObserver implementation used for handling android_webview
// specific render-process wide IPC messages.
class AwRenderThreadObserver : public content::RenderThreadObserver {
class AwRenderThreadObserver : public content::RenderThreadObserver,
public mojom::Renderer {
public:
AwRenderThreadObserver();
~AwRenderThreadObserver() override;
// content::RenderThreadObserver implementation.
bool OnControlMessageReceived(const IPC::Message& message) override;
void RegisterMojoInterfaces(
blink::AssociatedInterfaceRegistry* associated_interfaces) override;
void UnregisterMojoInterfaces(
blink::AssociatedInterfaceRegistry* associated_interfaces) override;
private:
void OnClearCache();
// mojom::Renderer overrides:
void ClearCache() override;
void OnRendererAssociatedRequest(
mojo::PendingAssociatedReceiver<mojom::Renderer> receiver);
void OnKillProcess();
void OnSetJsOnlineProperty(bool network_up);
mojo::AssociatedReceiver<mojom::Renderer> receiver_{this};
};
} // namespace android_webview
#endif // ANDROID_WEBVIEW_RENDERER_AW_RENDER_THREAD_OBSERVER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment