Commit ca510901 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Merge NavigatorContacts and ContactsManager

Change-Id: I37961a93296714a9f378b6b963105673deb97dfc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2528166
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Nate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826517}
parent 631b1652
......@@ -10,8 +10,6 @@ blink_modules_sources("contacts_picker") {
"contact_address.h",
"contacts_manager.cc",
"contacts_manager.h",
"navigator_contacts.cc",
"navigator_contacts.h",
]
deps = [ "//third_party/blink/renderer/modules/payments" ]
}
......@@ -13,6 +13,7 @@
#include "third_party/blink/renderer/core/fileapi/blob.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/modules/contacts_picker/contact_address.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
......@@ -100,8 +101,22 @@ constexpr char kIcon[] = "icon";
} // namespace
ContactsManager::ContactsManager(ExecutionContext* execution_context)
: contacts_manager_(execution_context) {}
// static
const char ContactsManager::kSupplementName[] = "ContactsManager";
// static
ContactsManager* ContactsManager::contacts(Navigator& navigator) {
auto* supplement = Supplement<Navigator>::From<ContactsManager>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<ContactsManager>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
ContactsManager::ContactsManager(Navigator& navigator)
: Supplement<Navigator>(navigator),
contacts_manager_(navigator.DomWindow()) {}
ContactsManager::~ContactsManager() = default;
......@@ -249,6 +264,7 @@ ScriptPromise ContactsManager::getProperties(ScriptState* script_state) {
void ContactsManager::Trace(Visitor* visitor) const {
visitor->Trace(contacts_manager_);
Supplement<Navigator>::Trace(visitor);
ScriptWrappable::Trace(visitor);
}
......
......@@ -14,20 +14,27 @@
#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/supplementable.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
class ExceptionState;
class Navigator;
class ScriptPromiseResolver;
class ScriptState;
// Represents an the ContactManager, providing access to Contacts.
class ContactsManager final : public ScriptWrappable {
class ContactsManager final : public ScriptWrappable,
public Supplement<Navigator> {
DEFINE_WRAPPERTYPEINFO();
public:
explicit ContactsManager(ExecutionContext* execution_context);
static const char kSupplementName[];
// Web Exposed as navigator.contacts
static ContactsManager* contacts(Navigator& navigator);
explicit ContactsManager(Navigator& navigator);
~ContactsManager() override;
// Web-exposed function defined in the IDL file.
......
// Copyright 2018 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 "third_party/blink/renderer/modules/contacts_picker/navigator_contacts.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/visitor.h"
namespace blink {
// static
const char NavigatorContacts::kSupplementName[] = "NavigatorContacts";
// static
NavigatorContacts& NavigatorContacts::From(Navigator& navigator) {
NavigatorContacts* supplement =
Supplement<Navigator>::From<NavigatorContacts>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorContacts>(navigator);
ProvideTo(navigator, supplement);
}
return *supplement;
}
// static
ContactsManager* NavigatorContacts::contacts(Navigator& navigator) {
// TODO(finnur): Return null when navigator is detached?
return NavigatorContacts::From(navigator).contacts();
}
ContactsManager* NavigatorContacts::contacts() {
if (!contacts_manager_) {
contacts_manager_ = MakeGarbageCollected<ContactsManager>(
GetSupplementable()->GetExecutionContext());
}
return contacts_manager_;
}
void NavigatorContacts::Trace(Visitor* visitor) const {
visitor->Trace(contacts_manager_);
Supplement<Navigator>::Trace(visitor);
}
NavigatorContacts::NavigatorContacts(Navigator& navigator)
: Supplement<Navigator>(navigator) {}
} // namespace blink
// Copyright 2018 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 THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_NAVIGATOR_CONTACTS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_NAVIGATOR_CONTACTS_H_
#include "third_party/blink/renderer/modules/contacts_picker/contacts_manager.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class Navigator;
// Represents a supplement to Navigator, implementing the Contacts Selector.
class NavigatorContacts final : public GarbageCollected<NavigatorContacts>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static NavigatorContacts& From(Navigator& navigator);
// Web Exposed attribute defined in the IDL file.
static ContactsManager* contacts(Navigator& navigator);
ContactsManager* contacts();
explicit NavigatorContacts(Navigator& navigator);
void Trace(Visitor* visitor) const override;
private:
Member<ContactsManager> contacts_manager_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_CONTACTS_PICKER_NAVIGATOR_CONTACTS_H_
......@@ -6,7 +6,7 @@
[
Exposed=Window,
ImplementedAs=NavigatorContacts
ImplementedAs=ContactsManager
] partial interface Navigator {
[SecureContext, SameObject, RuntimeEnabled=ContactsManager] readonly attribute ContactsManager contacts;
};
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