From 465ee9f91592c360874755d05c149cd69b9c8f0c Mon Sep 17 00:00:00 2001 From: Boris Smus Date: Thu, 8 Dec 2016 16:34:03 -0800 Subject: [PATCH] Moved device motion handling to polyfill --- src/api/iframe-message-sender.js | 12 ------------ src/embed/iframe-message-receiver.js | 28 ++++++---------------------- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/src/api/iframe-message-sender.js b/src/api/iframe-message-sender.js index 762abee7..d11491ac 100644 --- a/src/api/iframe-message-sender.js +++ b/src/api/iframe-message-sender.js @@ -77,16 +77,4 @@ IFrameMessageSender.prototype.isIOS_ = function() { return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; }; -// From http://stackoverflow.com/questions/12381334/foolproof-way-to-detect-if-iframe-is-cross-domain. -IFrameMessageSender.prototype.isCrossDomainIframe_ = function(iframe) { - var html = null; - try { - var doc = iframe.contentDocument || iframe.contentWindow.document; - html = doc.body.innerHTML; - } catch (err) { - } - - return (html === null); -}; - module.exports = IFrameMessageSender; diff --git a/src/embed/iframe-message-receiver.js b/src/embed/iframe-message-receiver.js index 148d187c..50526d74 100644 --- a/src/embed/iframe-message-receiver.js +++ b/src/embed/iframe-message-receiver.js @@ -25,8 +25,12 @@ var Util = require('../util'); * Adding hotspots. * Sending messages back to the containing iframe when hotspot is clicked * Sending analytics events to containing iframe. - * Receiving DeviceMotion events and resynthesizing them in this iframe - * (workaround for https://bugs.webkit.org/show_bug.cgi?id=150072). + * + * Note: this script used to also respond to synthetic devicemotion events, but + * no longer does so. This is because as of iOS 9.2, Safari disallows listening + * for devicemotion events within cross-device iframes. To work around this, the + * webvr-polyfill responds to the postMessage event containing devicemotion + * information (sent by the iframe-message-sender in the VR View API). */ function IFrameMessageReceiver() { window.addEventListener('message', this.onMessage_.bind(this), false); @@ -43,16 +47,11 @@ IFrameMessageReceiver.prototype.onMessage_ = function(event) { var data = message.data; switch (type) { - case Message.DEVICE_MOTION: - // Synthesize a DeviceMotion event. - this.synthesizeDeviceMotionEvent_(message.deviceMotionEvent); - break; case Message.SET_CONTENT: case Message.SET_VOLUME: case Message.ADD_HOTSPOT: case Message.PLAY: case Message.PAUSE: - // TODO(smus): Emit the event this.emit(type, data); break; default: @@ -62,19 +61,4 @@ IFrameMessageReceiver.prototype.onMessage_ = function(event) { } }; -IFrameMessageReceiver.prototype.synthesizeDeviceMotionEvent_ = function(eventData) { - var type = 'devicemotion-iframe'; - var canBubble = false; - var cancelable = false; - - var dme = document.createEvent('DeviceMotionEvent'); - dme.initDeviceMotionEvent(type, canBubble, cancelable, - eventData.acceleration, - eventData.accelerationIncludingGravity, - eventData.rotationRate, - eventData.interval); - - window.dispatchEvent(dme); -}; - module.exports = IFrameMessageReceiver;