Commit 7c09e600 authored by Finnur Thorarinsson's avatar Finnur Thorarinsson Committed by Commit Bot

Contacts Picker: Restrict contacts.select() API to main frame.

Bug: 926845, 860467
Change-Id: I0acc16a3acdc0dffec5521a4fa58a01851b4ca02
Reviewed-on: https://chromium-review.googlesource.com/c/1446352
Commit-Queue: Finnur Thorarinsson <finnur@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#628306}
parent 86a31c72
......@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "build/build_config.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#if defined(OS_ANDROID)
......@@ -22,6 +23,8 @@ namespace {
std::unique_ptr<ContactsProvider> CreateProvider(
RenderFrameHostImpl* render_frame_host) {
if (render_frame_host->GetParent())
return nullptr; // This API is only supported on the main frame.
#if defined(OS_ANDROID)
return std::make_unique<ContactsProviderAndroid>(render_frame_host);
#else
......
'use strict';
// Creates a "user gesture" using Blink's test-only eventSender.
function triggerUserGesture() {
if (!window.eventSender)
throw new Error('The `eventSender` must be available for this test');
eventSender.mouseDown();
eventSender.mouseUp();
}
<script>
'use strict';
window.onload = function() {
navigator.contacts.select({
multiple: "true",
properties: ['name', 'email']
}).then(results => {
parent.postMessage({ errorMsg: '' }, '*');
}).catch(exception => {
parent.postMessage({ errorMsg: exception.toString() }, '*');
});
}
</script>
......@@ -5,19 +5,11 @@
<script src="/gen/third_party/blink/public/mojom/contacts/contacts_manager.mojom.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/helpers.js"></script>
<script src="resources/mock_contacts_manager.js"></script>
<script>
'use strict';
// Creates a "user gesture" using Blink's test-only eventSender.
function triggerUserGesture() {
if (!window.eventSender)
throw new Error('The `eventSender` must be available for this test');
eventSender.mouseDown();
eventSender.mouseUp();
}
// Verifies that |func|, when invoked, throws a TypeError exception.
async function expectTypeError(func) {
try {
......
<!doctype html>
<meta charset="utf-8">
<title>Contact API: select() restricted to main frame</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/helpers.js"></script>
<iframe></iframe>
<script>
'use strict';
promise_test(async () => {
triggerUserGesture();
var iframe = document.getElementsByTagName('iframe')[0];
iframe.src = "resources/non-main-frame-select.html";
return new Promise(function(resolve, reject) {
window.addEventListener('message', event => resolve(event.data));
}).then(data => {
assert_equals(data.errorMsg,
'TypeError: Unable to open a contact selector');
});
}, 'Test contacts.select() on a sub-frame')
</script>
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