Commit 57c570f0 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate ClipboardPromise to use GC mojo wrappers.

No behavior change. This CL reduces potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: Ic32ad2f916e83423158bf77e846bd0e21cfafe5e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2136571Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756597}
parent 5cb122f3
......@@ -105,6 +105,7 @@ ClipboardPromise::ClipboardPromise(ExecutionContext* context,
script_state_(script_state),
script_promise_resolver_(
MakeGarbageCollected<ScriptPromiseResolver>(script_state)),
permission_service_(context),
clipboard_representation_index_(0) {}
ClipboardPromise::~ClipboardPromise() = default;
......@@ -318,9 +319,10 @@ PermissionService* ClipboardPromise::GetPermissionService() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
ExecutionContext* context = GetExecutionContext();
DCHECK(context);
if (!permission_service_) {
if (!permission_service_.is_bound()) {
ConnectToPermissionService(
context, permission_service_.BindNewPipeAndPassReceiver());
context,
permission_service_.BindNewPipeAndPassReceiver(GetTaskRunner()));
}
return permission_service_.get();
}
......@@ -400,6 +402,7 @@ void ClipboardPromise::Trace(Visitor* visitor) {
visitor->Trace(script_state_);
visitor->Trace(script_promise_resolver_);
visitor->Trace(clipboard_writer_);
visitor->Trace(permission_service_);
visitor->Trace(clipboard_item_data_);
ExecutionContextClient::Trace(visitor);
}
......
......@@ -9,13 +9,14 @@
#include "base/macros.h"
#include "base/sequence_checker.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/fileapi/blob.h"
#include "third_party/blink/renderer/modules/clipboard/clipboard_item.h"
#include "third_party/blink/renderer/modules/clipboard/clipboard_writer.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
namespace blink {
......@@ -79,7 +80,9 @@ class ClipboardPromise final : public GarbageCollected<ClipboardPromise>,
Member<ClipboardWriter> clipboard_writer_;
// Checks for Read and Write permission.
mojo::Remote<mojom::blink::PermissionService> permission_service_;
HeapMojoRemote<mojom::blink::PermissionService,
HeapMojoWrapperMode::kWithoutContextObserver>
permission_service_;
// Only for use in writeText().
String plain_text_;
......
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