void ChromeClientImpl::runOpenPanel(LocalFrame* frame, PassRefPtr<FileChooser> fileChooser) { WebViewClient* client = m_webView->client(); if (!client) return; WebFileChooserParams params; params.multiSelect = fileChooser->settings().allowsMultipleFiles; params.directory = fileChooser->settings().allowsDirectoryUpload; params.acceptTypes = fileChooser->settings().acceptTypes(); params.selectedFiles = fileChooser->settings().selectedFiles; if (params.selectedFiles.size() > 0) params.initialValue = params.selectedFiles[0]; #if ENABLE(MEDIA_CAPTURE) params.useMediaCapture = fileChooser->settings().useMediaCapture; #endif WebFileChooserCompletionImpl* chooserCompletion = new WebFileChooserCompletionImpl(fileChooser); if (client->runFileChooser(params, chooserCompletion)) return; // Choosing failed, so do callback with an empty list. chooserCompletion->didChooseFile(WebVector<WebString>()); }
void ChromeClientImpl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> fileChooser) { WebViewClient* client = m_webView->client(); if (!client) return; WebFileChooserParams params; params.multiSelect = fileChooser->settings().allowsMultipleFiles; #if ENABLE(DIRECTORY_UPLOAD) params.directory = fileChooser->settings().allowsDirectoryUpload; #else params.directory = false; #endif params.acceptMIMETypes = fileChooser->settings().acceptMIMETypes; // FIXME: Remove WebFileChooserParams::acceptTypes. StringBuilder builder; const Vector<String>& acceptTypeList = fileChooser->settings().acceptMIMETypes; for (unsigned i = 0; i < acceptTypeList.size(); ++i) { if (i > 0) builder.append(','); builder.append(acceptTypeList[i]); } params.acceptTypes = builder.toString(); params.selectedFiles = fileChooser->settings().selectedFiles; if (params.selectedFiles.size() > 0) params.initialValue = params.selectedFiles[0]; WebFileChooserCompletionImpl* chooserCompletion = new WebFileChooserCompletionImpl(fileChooser); if (client->runFileChooser(params, chooserCompletion)) return; // Choosing failed, so do callback with an empty list. chooserCompletion->didChooseFile(WebVector<WebString>()); }
PassOwnPtr<WebColorChooser> ChromeClientImpl::createWebColorChooser(WebColorChooserClient* chooserClient, const WebColor& initialColor) { WebViewClient* client = m_webView->client(); if (!client) return nullptr; return adoptPtr(client->createColorChooser(chooserClient, initialColor)); }
void ChromeClientImpl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> fileChooser) { WebViewClient* client = m_webView->client(); if (!client) return; WebFileChooserParams params; params.multiSelect = fileChooser->allowsMultipleFiles(); #if ENABLE(DIRECTORY_UPLOAD) params.directory = fileChooser->allowsDirectoryUpload(); #else params.directory = false; #endif params.acceptTypes = fileChooser->acceptTypes(); params.selectedFiles = fileChooser->filenames(); if (params.selectedFiles.size() > 0) params.initialValue = params.selectedFiles[0]; WebFileChooserCompletionImpl* chooserCompletion = new WebFileChooserCompletionImpl(fileChooser); if (client->runFileChooser(params, chooserCompletion)) return; // Choosing failed, so do callback with an empty list. chooserCompletion->didChooseFile(WebVector<WebString>()); }
PassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(ColorChooserClient* chooserClient, const Color& initialColor) { WebViewClient* client = m_webView->client(); if (!client) return nullptr; WebColorChooserClientImpl* chooserClientProxy = new WebColorChooserClientImpl(chooserClient); WebColor webColor = static_cast<WebColor>(initialColor.rgb()); WebColorChooser* chooser = client->createColorChooser(chooserClientProxy, webColor); if (!chooser) return nullptr; return adoptPtr(new ColorChooserProxy(adoptPtr(chooser))); }
void ChromeClientImpl::enumerateChosenDirectory(FileChooser* fileChooser) { WebViewClient* client = m_webView->client(); if (!client) return; WebFileChooserCompletionImpl* chooserCompletion = new WebFileChooserCompletionImpl(fileChooser); ASSERT(fileChooser && fileChooser->settings().selectedFiles.size()); // If the enumeration can't happen, call the callback with an empty list. if (!client->enumerateChosenDirectory(fileChooser->settings().selectedFiles[0], chooserCompletion)) chooserCompletion->didChooseFile(WebVector<WebString>()); }
void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const { #if ENABLE(VIEWPORT) if (!m_webView->settings()->viewportEnabled() || !m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page()) return; ViewportArguments args; if (arguments == args) { // Default viewport arguments passed in. This is a signal to reset the viewport. args.width = ViewportArguments::ValueDesktopWidth; } else args = arguments; FrameView* frameView = m_webView->mainFrameImpl()->frameView(); int dpi = screenHorizontalDPI(frameView); ASSERT(dpi > 0); WebViewClient* client = m_webView->client(); WebRect deviceRect = client->windowRect(); // If the window size has not been set yet don't attempt to set the viewport if (!deviceRect.width || !deviceRect.height) return; Settings* settings = m_webView->page()->settings(); float devicePixelRatio = dpi / ViewportArguments::deprecatedTargetDPI; // Call the common viewport computing logic in ViewportArguments.cpp. ViewportAttributes computed = computeViewportAttributes( args, settings->layoutFallbackWidth(), deviceRect.width, deviceRect.height, devicePixelRatio, IntSize(deviceRect.width, deviceRect.height)); restrictScaleFactorToInitialScaleIfNotUserScalable(computed); if (m_webView->ignoreViewportTagMaximumScale()) { computed.maximumScale = max(computed.maximumScale, m_webView->maxPageScaleFactor); computed.userScalable = true; } int layoutWidth = computed.layoutSize.width(); int layoutHeight = computed.layoutSize.height(); m_webView->setFixedLayoutSize(IntSize(layoutWidth, layoutHeight)); bool needInitializePageScale = !m_webView->isPageScaleFactorSet(); m_webView->setDeviceScaleFactor(devicePixelRatio); m_webView->setPageScaleFactorLimits(computed.minimumScale, computed.maximumScale); if (needInitializePageScale) m_webView->setPageScaleFactorPreservingScrollOffset(computed.initialScale * devicePixelRatio); #endif }
void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const { #if ENABLE(VIEWPORT) if (!m_webView->settings()->viewportEnabled() || !m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page()) return; bool useDefaultDeviceScaleFactor = false; ViewportArguments args; if (arguments == args) { // Default viewport arguments passed in. This is a signal to reset the viewport. args.width = ViewportArguments::ValueDesktopWidth; useDefaultDeviceScaleFactor = true; } else args = arguments; FrameView* frameView = m_webView->mainFrameImpl()->frameView(); int dpi = screenHorizontalDPI(frameView); ASSERT(dpi > 0); WebViewClient* client = m_webView->client(); WebRect deviceRect = client->windowRect(); // If the window size has not been set yet don't attempt to set the viewport if (!deviceRect.width || !deviceRect.height) return; Settings* settings = m_webView->page()->settings(); // Call the common viewport computing logic in ViewportArguments.cpp. ViewportAttributes computed = computeViewportAttributes( args, settings->layoutFallbackWidth(), deviceRect.width, deviceRect.height, dpi, IntSize(deviceRect.width, deviceRect.height)); int layoutWidth = computed.layoutSize.width(); int layoutHeight = computed.layoutSize.height(); m_webView->setFixedLayoutSize(IntSize(layoutWidth, layoutHeight)); // FIXME: Investigate the impact this has on layout/rendering if any. // This exposes the correct device scale to javascript and media queries. if (useDefaultDeviceScaleFactor && settings->defaultDeviceScaleFactor()) m_webView->setDeviceScaleFactor(settings->defaultDeviceScaleFactor()); else m_webView->setDeviceScaleFactor(computed.devicePixelRatio); m_webView->setPageScaleFactorLimits(computed.minimumScale, computed.maximumScale); m_webView->setPageScaleFactorPreservingScrollOffset(computed.initialScale * computed.devicePixelRatio); #endif }
void ChromeClientImpl::openFileChooser(LocalFrame* frame, PassRefPtr<FileChooser> fileChooser) { notifyPopupOpeningObservers(); WebViewClient* client = m_webView->client(); if (!client) return; WebFileChooserParams params; params.multiSelect = fileChooser->settings().allowsMultipleFiles; params.directory = fileChooser->settings().allowsDirectoryUpload; params.acceptTypes = fileChooser->settings().acceptTypes(); params.selectedFiles = fileChooser->settings().selectedFiles; if (params.selectedFiles.size() > 0) params.initialValue = params.selectedFiles[0]; params.useMediaCapture = fileChooser->settings().useMediaCapture; params.needLocalPath = fileChooser->settings().allowsDirectoryUpload; params.requestor = frame->document()->url(); WebFileChooserCompletionImpl* chooserCompletion = new WebFileChooserCompletionImpl(fileChooser); if (client->runFileChooser(params, chooserCompletion)) return; // Choosing failed, so do callback with an empty list. chooserCompletion->didChooseFile(WebVector<WebString>()); }
void ChromeClientImpl::annotatedRegionsChanged() { WebViewClient* client = m_webView->client(); if (client) client->draggableRegionsChanged(); }