Commit 68ba639c authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate ContactsManager to use GC mojo wrappers.

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

Bug: 1049056
Change-Id: Ie721f00888b7874cb563d84f7216ebe5a984b559
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2136983Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756598}
parent 57c570f0
...@@ -100,18 +100,20 @@ constexpr char kIcon[] = "icon"; ...@@ -100,18 +100,20 @@ constexpr char kIcon[] = "icon";
} // namespace } // namespace
ContactsManager::ContactsManager() = default; ContactsManager::ContactsManager() : contacts_manager_(nullptr) {}
ContactsManager::~ContactsManager() = default; ContactsManager::~ContactsManager() = default;
mojo::Remote<mojom::blink::ContactsManager>& mojom::blink::ContactsManager* ContactsManager::GetContactsManager(
ContactsManager::GetContactsManager(ScriptState* script_state) { ScriptState* script_state) {
if (!contacts_manager_) { if (!contacts_manager_.is_bound()) {
ExecutionContext::From(script_state) ExecutionContext::From(script_state)
->GetBrowserInterfaceBroker() ->GetBrowserInterfaceBroker()
.GetInterface(contacts_manager_.BindNewPipeAndPassReceiver()); .GetInterface(contacts_manager_.BindNewPipeAndPassReceiver(
ExecutionContext::From(script_state)
->GetTaskRunner(TaskType::kMiscPlatformAPI)));
} }
return contacts_manager_; return contacts_manager_.get();
} }
const Vector<String>& ContactsManager::GetProperties( const Vector<String>& ContactsManager::GetProperties(
...@@ -231,4 +233,9 @@ ScriptPromise ContactsManager::getProperties(ScriptState* script_state) { ...@@ -231,4 +233,9 @@ ScriptPromise ContactsManager::getProperties(ScriptState* script_state) {
ToV8(GetProperties(script_state), script_state)); ToV8(GetProperties(script_state), script_state));
} }
void ContactsManager::Trace(Visitor* visitor) {
visitor->Trace(contacts_manager_);
ScriptWrappable::Trace(visitor);
}
} // namespace blink } // namespace blink
...@@ -5,12 +5,13 @@ ...@@ -5,12 +5,13 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_CONTACTS_MANAGER_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_CONTACTS_MANAGER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_CONTACTS_MANAGER_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_CONTACTS_MANAGER_H_
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/contacts/contacts_manager.mojom-blink.h" #include "third_party/blink/public/mojom/contacts/contacts_manager.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_contacts_select_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_contacts_select_options.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/thread_state.h" #include "third_party/blink/renderer/platform/heap/thread_state.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink { namespace blink {
...@@ -34,9 +35,10 @@ class ContactsManager final : public ScriptWrappable { ...@@ -34,9 +35,10 @@ class ContactsManager final : public ScriptWrappable {
ExceptionState& exception_state); ExceptionState& exception_state);
ScriptPromise getProperties(ScriptState* script_state); ScriptPromise getProperties(ScriptState* script_state);
void Trace(Visitor*) override;
private: private:
mojo::Remote<mojom::blink::ContactsManager>& GetContactsManager( mojom::blink::ContactsManager* GetContactsManager(ScriptState* script_state);
ScriptState* script_state);
void OnContactsSelected( void OnContactsSelected(
ScriptPromiseResolver* resolver, ScriptPromiseResolver* resolver,
...@@ -45,7 +47,9 @@ class ContactsManager final : public ScriptWrappable { ...@@ -45,7 +47,9 @@ class ContactsManager final : public ScriptWrappable {
const Vector<String>& GetProperties(ScriptState* script_state); const Vector<String>& GetProperties(ScriptState* script_state);
// Created lazily. // Created lazily.
mojo::Remote<mojom::blink::ContactsManager> contacts_manager_; HeapMojoRemote<mojom::blink::ContactsManager,
HeapMojoWrapperMode::kWithoutContextObserver>
contacts_manager_;
bool contact_picker_in_use_ = false; bool contact_picker_in_use_ = false;
Vector<String> properties_; Vector<String> properties_;
}; };
......
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