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 #include "modules/vr/VRDisplay.h" | 5 #include "modules/vr/VRDisplay.h" |
| 6 | 6 |
| 7 #include "core/css/StylePropertySet.h" | 7 #include "core/css/StylePropertySet.h" |
| 8 #include "core/dom/DOMException.h" | 8 #include "core/dom/DOMException.h" |
| 9 #include "core/dom/DocumentUserGestureToken.h" | 9 #include "core/dom/DocumentUserGestureToken.h" |
| 10 #include "core/dom/FrameRequestCallback.h" | 10 #include "core/dom/FrameRequestCallback.h" |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 244 if (!doc || !Fullscreen::fullscreenEnabled(*doc)) { | 244 if (!doc || !Fullscreen::fullscreenEnabled(*doc)) { |
| 245 DOMException* exception = | 245 DOMException* exception = |
| 246 DOMException::create(InvalidStateError, "Fullscreen is not enabled."); | 246 DOMException::create(InvalidStateError, "Fullscreen is not enabled."); |
| 247 resolver->reject(exception); | 247 resolver->reject(exception); |
| 248 ReportPresentationResult(PresentationResult::FullscreenNotEnabled); | 248 ReportPresentationResult(PresentationResult::FullscreenNotEnabled); |
| 249 return promise; | 249 return promise; |
| 250 } | 250 } |
| 251 | 251 |
| 252 // A valid number of layers must be provided in order to present. | 252 // A valid number of layers must be provided in order to present. |
| 253 if (layers.size() == 0 || layers.size() > m_capabilities->maxLayers()) { | 253 if (layers.size() == 0 || layers.size() > m_capabilities->maxLayers()) { |
| 254 forceExitPresent(); | 254 if (m_isPresenting) { |
|
mthiesse
2017/02/13 15:33:34
You should fix VRDisplay::forceExitPresent(), rath
shaobo.yan
2017/02/14 06:12:35
Done.
| |
| 255 if (m_display) { | |
| 256 m_display->ExitPresent(); | |
| 257 } else { | |
| 258 forceExitPresent(); | |
| 259 } | |
| 260 } | |
| 255 DOMException* exception = | 261 DOMException* exception = |
| 256 DOMException::create(InvalidStateError, "Invalid number of layers."); | 262 DOMException::create(InvalidStateError, "Invalid number of layers."); |
| 257 resolver->reject(exception); | 263 resolver->reject(exception); |
| 258 ReportPresentationResult(PresentationResult::InvalidNumberOfLayers); | 264 ReportPresentationResult(PresentationResult::InvalidNumberOfLayers); |
| 259 return promise; | 265 return promise; |
| 260 } | 266 } |
| 261 | 267 |
| 262 // If what we were given has an invalid source, need to exit fullscreen with | 268 // If what we were given has an invalid source, need to exit fullscreen with |
| 263 // previous, valid source, so delay m_layer reassignment | 269 // previous, valid source, so delay m_layer reassignment |
| 264 if (!layers[0].source()) { | 270 if (!layers[0].source()) { |
| 265 forceExitPresent(); | 271 if (m_isPresenting) { |
| 272 if (m_display) { | |
| 273 m_display->ExitPresent(); | |
| 274 } else { | |
| 275 forceExitPresent(); | |
| 276 } | |
| 277 } | |
| 266 DOMException* exception = | 278 DOMException* exception = |
| 267 DOMException::create(InvalidStateError, "Invalid layer source."); | 279 DOMException::create(InvalidStateError, "Invalid layer source."); |
| 268 resolver->reject(exception); | 280 resolver->reject(exception); |
| 269 ReportPresentationResult(PresentationResult::InvalidLayerSource); | 281 ReportPresentationResult(PresentationResult::InvalidLayerSource); |
| 270 return promise; | 282 return promise; |
| 271 } | 283 } |
| 272 m_layer = layers[0]; | 284 m_layer = layers[0]; |
| 273 | 285 |
| 274 CanvasRenderingContext* renderingContext = | 286 CanvasRenderingContext* renderingContext = |
| 275 m_layer.source()->renderingContext(); | 287 m_layer.source()->renderingContext(); |
| 276 | 288 |
| 277 if (!renderingContext || !renderingContext->is3d()) { | 289 if (!renderingContext || !renderingContext->is3d()) { |
| 278 forceExitPresent(); | 290 if (m_isPresenting) { |
| 291 if (m_display) { | |
| 292 m_display->ExitPresent(); | |
| 293 } else { | |
| 294 forceExitPresent(); | |
| 295 } | |
| 296 } | |
| 279 DOMException* exception = DOMException::create( | 297 DOMException* exception = DOMException::create( |
| 280 InvalidStateError, "Layer source must have a WebGLRenderingContext"); | 298 InvalidStateError, "Layer source must have a WebGLRenderingContext"); |
| 281 resolver->reject(exception); | 299 resolver->reject(exception); |
| 282 ReportPresentationResult( | 300 ReportPresentationResult( |
| 283 PresentationResult::LayerSourceMissingWebGLContext); | 301 PresentationResult::LayerSourceMissingWebGLContext); |
| 284 return promise; | 302 return promise; |
| 285 } | 303 } |
| 286 | 304 |
| 287 // Save the WebGL script and underlying GL contexts for use by submitFrame(). | 305 // Save the WebGL script and underlying GL contexts for use by submitFrame(). |
| 288 m_renderingContext = toWebGLRenderingContextBase(renderingContext); | 306 m_renderingContext = toWebGLRenderingContextBase(renderingContext); |
| 289 m_contextGL = m_renderingContext->contextGL(); | 307 m_contextGL = m_renderingContext->contextGL(); |
| 290 | 308 |
| 291 if ((m_layer.leftBounds().size() != 0 && m_layer.leftBounds().size() != 4) || | 309 if ((m_layer.leftBounds().size() != 0 && m_layer.leftBounds().size() != 4) || |
| 292 (m_layer.rightBounds().size() != 0 && | 310 (m_layer.rightBounds().size() != 0 && |
| 293 m_layer.rightBounds().size() != 4)) { | 311 m_layer.rightBounds().size() != 4)) { |
| 294 forceExitPresent(); | 312 if (m_isPresenting) { |
| 313 if (m_display) { | |
| 314 m_display->ExitPresent(); | |
| 315 } else { | |
| 316 forceExitPresent(); | |
| 317 } | |
| 318 } | |
| 295 DOMException* exception = DOMException::create( | 319 DOMException* exception = DOMException::create( |
| 296 InvalidStateError, | 320 InvalidStateError, |
| 297 "Layer bounds must either be an empty array or have 4 values"); | 321 "Layer bounds must either be an empty array or have 4 values"); |
| 298 resolver->reject(exception); | 322 resolver->reject(exception); |
| 299 ReportPresentationResult(PresentationResult::InvalidLayerBounds); | 323 ReportPresentationResult(PresentationResult::InvalidLayerBounds); |
| 300 return promise; | 324 return promise; |
| 301 } | 325 } |
| 302 | 326 |
| 303 if (!m_pendingPresentResolvers.isEmpty()) { | 327 if (!m_pendingPresentResolvers.isEmpty()) { |
| 304 // If we are waiting on the results of a previous requestPresent call don't | 328 // If we are waiting on the results of a previous requestPresent call don't |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 765 visitor->trace(m_stageParameters); | 789 visitor->trace(m_stageParameters); |
| 766 visitor->trace(m_eyeParametersLeft); | 790 visitor->trace(m_eyeParametersLeft); |
| 767 visitor->trace(m_eyeParametersRight); | 791 visitor->trace(m_eyeParametersRight); |
| 768 visitor->trace(m_layer); | 792 visitor->trace(m_layer); |
| 769 visitor->trace(m_renderingContext); | 793 visitor->trace(m_renderingContext); |
| 770 visitor->trace(m_scriptedAnimationController); | 794 visitor->trace(m_scriptedAnimationController); |
| 771 visitor->trace(m_pendingPresentResolvers); | 795 visitor->trace(m_pendingPresentResolvers); |
| 772 } | 796 } |
| 773 | 797 |
| 774 } // namespace blink | 798 } // namespace blink |
| OLD | NEW |