Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('chrome.vrShellUi', function() { | 5 cr.define('chrome.vrShellUi', function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 var scene = new ui.Scene(); | 8 var scene = new ui.Scene(); |
| 9 var state; | 9 var state; |
| 10 | 10 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 | 54 |
| 55 onMouseEnter() { | 55 onMouseEnter() { |
| 56 this.configure(1, 1, 0.015); | 56 this.configure(1, 1, 0.015); |
| 57 } | 57 } |
| 58 | 58 |
| 59 onMouseLeave() { | 59 onMouseLeave() { |
| 60 this.configure(0.8, 0, 0); | 60 this.configure(0.8, 0, 0); |
| 61 } | 61 } |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 class UiState { | 64 class UiState { |
|
mthiesse
2016/10/19 20:11:56
No preference for where or when you do this, but w
cjgrant
2016/10/21 17:40:48
Done.
| |
| 65 constructor() { | 65 constructor() { |
| 66 this.mode = -1; | 66 this.mode = -1; |
| 67 this.secureOrigin = true; | |
| 68 | |
| 69 // Permanent WebVR security warning. | |
| 70 this.webVrSecureWarning = new DomUiElement('#webvr-not-secure-permanent'); | |
| 71 var distance = 0.7; | |
| 72 var angleUp = 16.3 * Math.PI / 180.0; | |
|
bshe
2016/10/20 18:01:53
Should the above two variables be a const? Similar
cjgrant
2016/10/21 17:40:48
Done (with additional refactoring).
| |
| 73 var update = new api.UiElementUpdate(); | |
| 74 update.setScale(distance, distance, 1); | |
| 75 update.setTranslation(0, Math.sin(angleUp), | |
| 76 -distance * Math.cos(angleUp)); | |
| 77 update.setRotation(1.0, 0.0, 0.0, angleUp); | |
| 78 update.setPassive(true); | |
| 79 update.setVisible(false); | |
| 80 update.setLockToFieldOfView(true); | |
| 81 scene.updateElement(this.webVrSecureWarning.uiElementId, update); | |
| 82 | |
| 83 // Temporary WebVR security warning. | |
| 84 this.webVrTransientSecureWarning = new DomUiElement( | |
| 85 '#webvr-not-secure-transient'); | |
| 86 update = new api.UiElementUpdate(); | |
| 87 update.setScale(distance, distance, 1); | |
| 88 update.setTranslation(0, 0, -distance); | |
| 89 update.setPassive(true); | |
| 90 update.setVisible(false); | |
| 91 update.setLockToFieldOfView(true); | |
| 92 scene.updateElement(this.webVrTransientSecureWarning.uiElementId, update); | |
| 93 | |
| 67 this.createMenuButtons(); | 94 this.createMenuButtons(); |
| 68 scene.flush(); | 95 scene.flush(); |
| 69 } | 96 } |
| 70 | 97 |
| 71 createMenuButtons() { | 98 createMenuButtons() { |
| 72 this.menuButtons = []; | 99 this.menuButtons = []; |
| 73 var buttons = [ | 100 var buttons = [ |
| 74 ['#back', function() { | 101 ['#back', function() { |
| 75 api.doAction(api.Action.HISTORY_BACK); | 102 api.doAction(api.Action.HISTORY_BACK); |
| 76 }], | 103 }], |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 111 showMenuButtons(visible) { | 138 showMenuButtons(visible) { |
| 112 for (var i = 0; i < this.menuButtons.length; i++) { | 139 for (var i = 0; i < this.menuButtons.length; i++) { |
| 113 var update = new api.UiElementUpdate(); | 140 var update = new api.UiElementUpdate(); |
| 114 update.setVisible(visible); | 141 update.setVisible(visible); |
| 115 scene.updateElement(this.menuButtons[i].uiElementId, update); | 142 scene.updateElement(this.menuButtons[i].uiElementId, update); |
| 116 } | 143 } |
| 117 scene.flush(); | 144 scene.flush(); |
| 118 } | 145 } |
| 119 | 146 |
| 120 setMode(mode) { | 147 setMode(mode) { |
| 148 this.mode = mode; | |
|
bshe
2016/10/20 18:01:53
This got me wonder which will be called first from
cjgrant
2016/10/21 17:40:48
In 2D mode, we don't get a call to VrShell to set
bshe
2016/10/21 18:10:47
This can be in a separate CL if it make sense. But
| |
| 121 this.showMenuButtons(mode == api.Mode.STANDARD); | 149 this.showMenuButtons(mode == api.Mode.STANDARD); |
| 150 this.updateSecureOriginWarnings(); | |
| 151 } | |
| 152 | |
| 153 setSecureOrigin(secure) { | |
| 154 if (!secure) { | |
| 155 this.secureOriginTimer = setTimeout( | |
|
bshe
2016/10/20 18:01:53
Do you need to clear the previous timer if not fir
cjgrant
2016/10/21 17:40:49
Done. Good catch.
| |
| 156 this.onSecureOriginTimer.bind(this), 30000); | |
| 157 } else { | |
| 158 if (this.secureOriginTimer) { | |
| 159 clearInterval(this.secureOriginTimer); | |
| 160 this.secureOriginTimer = null; | |
| 161 } | |
| 162 } | |
| 163 this.secureOrigin = secure; | |
|
mthiesse
2016/10/19 20:11:56
nit: isSecureOrigin
cjgrant
2016/10/21 17:40:49
Done.
| |
| 164 this.updateSecureOriginWarnings(); | |
| 165 } | |
| 166 | |
| 167 onSecureOriginTimer() { | |
| 168 this.secureOriginTimer = null; | |
| 169 this.updateSecureOriginWarnings(); | |
| 170 } | |
| 171 | |
| 172 updateSecureOriginWarnings() { | |
| 173 var visible = (this.mode == 1 && !this.secureOrigin); | |
|
bshe
2016/10/20 18:01:53
nit: prefer to use an enum instead of 1.
cjgrant
2016/10/21 17:40:48
Done.
| |
| 174 var transientVisible = (visible && this.secureOriginTimer); | |
| 175 | |
| 176 var update = new api.UiElementUpdate(); | |
| 177 update.setVisible(visible); | |
| 178 scene.updateElement(this.webVrSecureWarning.uiElementId, update); | |
| 179 update = new api.UiElementUpdate(); | |
| 180 update.setVisible(transientVisible); | |
| 181 scene.updateElement(this.webVrTransientSecureWarning.uiElementId, update); | |
| 182 scene.flush(); | |
| 122 } | 183 } |
| 123 }; | 184 }; |
| 124 | 185 |
| 125 function initialize() { | 186 function initialize() { |
| 126 | 187 |
| 127 // Change the body background so that the transparency applies. | 188 // Change the body background so that the transparency applies. |
| 128 window.setTimeout(function() { | 189 window.setTimeout(function() { |
| 129 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)'; | 190 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)'; |
| 130 }, 100); | 191 }, 100); |
| 131 | 192 |
| 132 state = new UiState(); | 193 state = new UiState(); |
| 133 | 194 |
| 134 api.domLoaded(); | 195 api.domLoaded(); |
| 135 } | 196 } |
| 136 | 197 |
| 137 function command(dict) { | 198 function command(dict) { |
| 138 if ('mode' in dict) { | 199 if ('mode' in dict) { |
| 139 state.setMode(dict['mode']); | 200 state.setMode(dict['mode']); |
| 140 } | 201 } |
| 202 if ('secureOrigin' in dict) { | |
| 203 state.setSecureOrigin(dict['secureOrigin']); | |
| 204 } | |
| 141 } | 205 } |
| 142 | 206 |
| 143 return { | 207 return { |
| 144 initialize: initialize, | 208 initialize: initialize, |
| 145 command: command, | 209 command: command, |
| 146 }; | 210 }; |
| 147 }); | 211 }); |
| 148 | 212 |
| 149 document.addEventListener('DOMContentLoaded', chrome.vrShellUi.initialize); | 213 document.addEventListener('DOMContentLoaded', chrome.vrShellUi.initialize); |
| OLD | NEW |