OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "web/FullscreenController.h" | 32 #include "web/FullscreenController.h" |
33 | 33 |
34 #include "core/dom/Document.h" | 34 #include "core/dom/Document.h" |
35 #include "core/dom/FullscreenElementStack.h" | 35 #include "core/dom/FullscreenElementStack.h" |
36 #include "core/frame/LocalFrame.h" | 36 #include "core/frame/LocalFrame.h" |
37 #include "core/html/HTMLMediaElement.h" | 37 #include "core/html/HTMLMediaElement.h" |
38 #include "platform/LayoutTestSupport.h" | 38 #include "platform/LayoutTestSupport.h" |
39 #include "platform/RuntimeEnabledFeatures.h" | 39 #include "platform/RuntimeEnabledFeatures.h" |
40 #include "public/web/WebFrame.h" | 40 #include "public/web/WebFrame.h" |
41 #include "public/web/WebViewClient.h" | 41 #include "public/web/WebViewClient.h" |
| 42 #include "web/WebSettingsImpl.h" |
42 #include "web/WebViewImpl.h" | 43 #include "web/WebViewImpl.h" |
43 | 44 |
44 using namespace WebCore; | 45 using namespace WebCore; |
45 | 46 |
46 namespace blink { | 47 namespace blink { |
47 | 48 |
48 PassOwnPtr<FullscreenController> FullscreenController::create(WebViewImpl* webVi
ewImpl) | 49 PassOwnPtr<FullscreenController> FullscreenController::create(WebViewImpl* webVi
ewImpl) |
49 { | 50 { |
50 return adoptPtr(new FullscreenController(webViewImpl)); | 51 return adoptPtr(new FullscreenController(webViewImpl)); |
51 } | 52 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 m_exitFullscreenPinchViewportOffset = m_webViewImpl->pinchViewpo
rtOffset(); | 85 m_exitFullscreenPinchViewportOffset = m_webViewImpl->pinchViewpo
rtOffset(); |
85 m_webViewImpl->setPageScaleFactor(1.0f); | 86 m_webViewImpl->setPageScaleFactor(1.0f); |
86 m_webViewImpl->setMainFrameScrollOffset(IntPoint()); | 87 m_webViewImpl->setMainFrameScrollOffset(IntPoint()); |
87 m_webViewImpl->setPinchViewportOffset(FloatPoint()); | 88 m_webViewImpl->setPinchViewportOffset(FloatPoint()); |
88 } | 89 } |
89 | 90 |
90 FullscreenElementStack::from(*doc).webkitDidEnterFullScreenForElemen
t(0); | 91 FullscreenElementStack::from(*doc).webkitDidEnterFullScreenForElemen
t(0); |
91 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled()) { | 92 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled()) { |
92 Element* element = FullscreenElementStack::currentFullScreenElem
entFrom(*doc); | 93 Element* element = FullscreenElementStack::currentFullScreenElem
entFrom(*doc); |
93 ASSERT(element); | 94 ASSERT(element); |
94 if (isHTMLMediaElement(*element) && m_webViewImpl->layerTreeView
()) | 95 if (isHTMLMediaElement(*element)) { |
95 m_webViewImpl->layerTreeView()->setHasTransparentBackground(
true); | 96 HTMLMediaElement* mediaElement = toHTMLMediaElement(element)
; |
| 97 if (mediaElement->webMediaPlayer() && mediaElement->webMedia
Player()->canEnterFullscreen() |
| 98 // FIXME: There is no embedder-side handling in layout t
est mode. |
| 99 && !isRunningLayoutTest()) { |
| 100 mediaElement->webMediaPlayer()->enterFullscreen(); |
| 101 } |
| 102 if (m_webViewImpl->layerTreeView()) |
| 103 m_webViewImpl->layerTreeView()->setHasTransparentBackgro
und(true); |
| 104 } |
96 } | 105 } |
97 } | 106 } |
98 } | 107 } |
99 } | 108 } |
100 | 109 |
101 void FullscreenController::willExitFullScreen() | 110 void FullscreenController::willExitFullScreen() |
102 { | 111 { |
103 if (!m_fullScreenFrame) | 112 if (!m_fullScreenFrame) |
104 return; | 113 return; |
105 | 114 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 fullscreen->webkitDidExitFullScreenForElement(0); | 148 fullscreen->webkitDidExitFullScreenForElement(0); |
140 } | 149 } |
141 } | 150 } |
142 } | 151 } |
143 | 152 |
144 m_fullScreenFrame.clear(); | 153 m_fullScreenFrame.clear(); |
145 } | 154 } |
146 | 155 |
147 void FullscreenController::enterFullScreenForElement(WebCore::Element* element) | 156 void FullscreenController::enterFullScreenForElement(WebCore::Element* element) |
148 { | 157 { |
| 158 if (m_webViewImpl->settingsImpl()->disallowFullscreenForNonMediaElements() &
& !isHTMLMediaElement(element)) |
| 159 return; |
| 160 |
149 // We are already transitioning to fullscreen for a different element. | 161 // We are already transitioning to fullscreen for a different element. |
150 if (m_provisionalFullScreenElement) { | 162 if (m_provisionalFullScreenElement) { |
151 m_provisionalFullScreenElement = element; | 163 m_provisionalFullScreenElement = element; |
152 return; | 164 return; |
153 } | 165 } |
154 | 166 |
155 // We are already in fullscreen mode. | 167 // We are already in fullscreen mode. |
156 if (m_fullScreenFrame) { | 168 if (m_fullScreenFrame) { |
157 m_provisionalFullScreenElement = element; | 169 m_provisionalFullScreenElement = element; |
158 willEnterFullScreen(); | 170 willEnterFullScreen(); |
159 didEnterFullScreen(); | 171 didEnterFullScreen(); |
160 return; | 172 return; |
161 } | 173 } |
162 | 174 |
163 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() | |
164 && isHTMLMediaElement(element) | |
165 // FIXME: There is no embedder-side handling in layout test mode. | |
166 && !isRunningLayoutTest()) { | |
167 HTMLMediaElement* mediaElement = toHTMLMediaElement(element); | |
168 if (mediaElement->webMediaPlayer() && mediaElement->webMediaPlayer()->ca
nEnterFullscreen()) { | |
169 mediaElement->webMediaPlayer()->enterFullscreen(); | |
170 m_provisionalFullScreenElement = element; | |
171 return; | |
172 } | |
173 } | |
174 | |
175 // We need to transition to fullscreen mode. | 175 // We need to transition to fullscreen mode. |
176 if (WebViewClient* client = m_webViewImpl->client()) { | 176 if (WebViewClient* client = m_webViewImpl->client()) { |
177 if (client->enterFullScreen()) | 177 if (client->enterFullScreen()) |
178 m_provisionalFullScreenElement = element; | 178 m_provisionalFullScreenElement = element; |
179 } | 179 } |
180 } | 180 } |
181 | 181 |
182 void FullscreenController::exitFullScreenForElement(WebCore::Element* element) | 182 void FullscreenController::exitFullScreenForElement(WebCore::Element* element) |
183 { | 183 { |
184 // The client is exiting full screen, so don't send a notification. | 184 // The client is exiting full screen, so don't send a notification. |
185 if (m_isCancelingFullScreen) | 185 if (m_isCancelingFullScreen) |
186 return; | 186 return; |
187 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() | |
188 && isHTMLMediaElement(element) | |
189 // FIXME: There is no embedder-side handling in layout test mode. | |
190 && !isRunningLayoutTest()) { | |
191 HTMLMediaElement* mediaElement = toHTMLMediaElement(element); | |
192 if (mediaElement->webMediaPlayer()) | |
193 mediaElement->webMediaPlayer()->exitFullscreen(); | |
194 return; | |
195 } | |
196 if (WebViewClient* client = m_webViewImpl->client()) | 187 if (WebViewClient* client = m_webViewImpl->client()) |
197 client->exitFullScreen(); | 188 client->exitFullScreen(); |
198 } | 189 } |
199 | 190 |
200 } | 191 } |
201 | 192 |
OLD | NEW |