void FullscreenVideoController::LayerClient::platformCALayerLayoutSublayersOfLayer(PlatformCALayer* layer) { ASSERT_ARG(layer, layer == m_parent->m_rootChild); HTMLMediaElement* mediaElement = m_parent->m_mediaElement.get(); if (!mediaElement) return; PlatformCALayer* videoLayer = PlatformCALayer::platformCALayer(mediaElement->platformLayer()); if (!videoLayer || videoLayer->superlayer() != layer) return; FloatRect layerBounds = layer->bounds(); FloatSize videoSize = mediaElement->player()->naturalSize(); float scaleFactor; if (videoSize.aspectRatio() > layerBounds.size().aspectRatio()) scaleFactor = layerBounds.width() / videoSize.width(); else scaleFactor = layerBounds.height() / videoSize.height(); videoSize.scale(scaleFactor); // Calculate the centered position based on the videoBounds and layerBounds: FloatPoint videoPosition; FloatPoint videoOrigin; videoOrigin.setX((layerBounds.width() - videoSize.width()) * 0.5); videoOrigin.setY((layerBounds.height() - videoSize.height()) * 0.5); videoLayer->setFrame(FloatRect(videoOrigin, videoSize)); }
void ChromeClientAndroid::enterFullscreenForNode(Node* node) { if (!node->hasTagName(HTMLNames::videoTag)) return; HTMLMediaElement* videoElement = static_cast<HTMLMediaElement*>(node); String url = videoElement->currentSrc(); LayerAndroid* layer = videoElement->platformLayer(); if (!layer) return; FrameView* frameView = m_webFrame->page()->mainFrame()->view(); android::WebViewCore* core = android::WebViewCore::getWebViewCore(frameView); if (core) core->enterFullscreenForVideoLayer(layer->uniqueId(), url); }