Source code

Revision control

Copy as Markdown

Other Tools

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {ContactsManager, ContactsManagerReceiver} from '/gen/third_party/blink/public/mojom/contacts/contacts_manager.mojom.m.js';
self.WebContactsTest = (() => {
class MockContacts {
constructor() {
this.receiver_ = new ContactsManagerReceiver(this);
this.interceptor_ =
new MojoInterfaceInterceptor(ContactsManager.$interfaceName);
this.interceptor_.oninterfacerequest =
e => this.receiver_.$.bindHandle(e.handle);
this.interceptor_.start();
this.selectedContacts_ = [];
}
formatAddress_(address) {
// These are all required fields in the mojo definition.
return {
country: address.country || '',
addressLine: address.addressLine || [],
region: address.region || '',
city: address.city || '',
dependentLocality: address.dependentLocality || '',
postalCode: address.postCode || '',
sortingCode: address.sortingCode || '',
organization: address.organization || '',
recipient: address.recipient || '',
phone: address.phone || '',
};
}
async select(multiple, includeNames, includeEmails, includeTel, includeAddresses, includeIcons) {
if (this.selectedContacts_ === null)
return {contacts: null};
const contactInfos = await Promise.all(this.selectedContacts_.map(async contact => {
const contactInfo = {};
if (includeNames)
contactInfo.name = contact.name || [];
if (includeEmails)
contactInfo.email = contact.email || [];
if (includeTel)
contactInfo.tel = contact.tel || [];
if (includeAddresses) {
contactInfo.address = (contact.address || []).map(address => this.formatAddress_(address));
}
if (includeIcons) {
contactInfo.icon = await Promise.all(
(contact.icon || []).map(async blob => ({
mimeType: blob.type,
data: (await blob.text()).split('').map(s => s.charCodeAt(0)),
})));
}
return contactInfo;
}));
if (!contactInfos.length) return {contacts: []};
if (!multiple) return {contacts: [contactInfos[0]]};
return {contacts: contactInfos};
}
setSelectedContacts(contacts) {
this.selectedContacts_ = contacts;
}
reset() {
this.receiver_.$.close();
this.interceptor_.stop();
}
}
const mockContacts = new MockContacts();
class ContactsTestChromium {
constructor() {
Object.freeze(this); // Make it immutable.
}
setSelectedContacts(contacts) {
mockContacts.setSelectedContacts(contacts);
}
}
return ContactsTestChromium;
})();