diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
| commit | 2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch) | |
| tree | 988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebKit2/UIProcess/WebPageProxy.cpp | |
| parent | dd91e772430dc294e3bf478c119ef8d43c0a3358 (diff) | |
| download | qtwebkit-2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47.tar.gz | |
Imported WebKit commit 7e538425aa020340619e927792f3d895061fb54b (http://svn.webkit.org/repository/webkit/trunk@116286)
Diffstat (limited to 'Source/WebKit2/UIProcess/WebPageProxy.cpp')
| -rw-r--r-- | Source/WebKit2/UIProcess/WebPageProxy.cpp | 172 |
1 files changed, 126 insertions, 46 deletions
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp index 40973449a..043cdb690 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.cpp +++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp @@ -204,6 +204,9 @@ WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> p , m_renderTreeSize(0) , m_shouldSendEventsSynchronously(false) , m_mediaVolume(1) +#if ENABLE(PAGE_VISIBILITY_API) + , m_visibilityState(PageVisibilityStateVisible) +#endif { #ifndef NDEBUG webPageProxyCounter.increment(); @@ -294,10 +297,12 @@ void WebPageProxy::initializeFindClient(const WKPageFindClient* client) m_findClient.initialize(client); } +#if ENABLE(CONTEXT_MENUS) void WebPageProxy::initializeContextMenuClient(const WKPageContextMenuClient* client) { m_contextMenuClient.initialize(client); } +#endif void WebPageProxy::reattachToWebProcess() { @@ -339,7 +344,16 @@ void WebPageProxy::initializeWebPage() m_drawingArea = m_pageClient->createDrawingAreaProxy(); ASSERT(m_drawingArea); +#if ENABLE(INSPECTOR_SERVER) + if (m_pageGroup->preferences()->developerExtrasEnabled()) + inspector()->enableRemoteInspection(); +#endif + process()->send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0); + +#if ENABLE(PAGE_VISIBILITY_API) + process()->send(Messages::WebPage::SetVisibilityState(m_visibilityState, /* isInitialState */ true), m_pageID); +#endif } void WebPageProxy::close() @@ -396,6 +410,9 @@ void WebPageProxy::close() m_loadDependentStringCallbackIDs.clear(); invalidateCallbackMap(m_scriptValueCallbacks); invalidateCallbackMap(m_computedPagesCallbacks); +#if PLATFORM(GTK) + invalidateCallbackMap(m_printFinishedCallbacks); +#endif Vector<WebEditCommandProxy*> editCommandVector; copyToVector(m_editCommandSet, editCommandVector); @@ -504,6 +521,15 @@ void WebPageProxy::loadPlainTextString(const String& string) process()->responsivenessTimer()->start(); } +void WebPageProxy::loadWebArchiveData(const WebData* webArchiveData) +{ + if (!isValid()) + reattachToWebProcess(); + + process()->send(Messages::WebPage::LoadWebArchiveData(webArchiveData->dataReference()), m_pageID); + process()->responsivenessTimer()->start(); +} + void WebPageProxy::stopLoading() { if (!isValid()) @@ -618,10 +644,15 @@ void WebPageProxy::shouldGoToBackForwardListItem(uint64_t itemID, bool& shouldGo shouldGoToBackForwardItem = item && m_loaderClient.shouldGoToBackForwardListItem(this, item); } -void WebPageProxy::willGoToBackForwardListItem(uint64_t itemID) +void WebPageProxy::willGoToBackForwardListItem(uint64_t itemID, CoreIPC::ArgumentDecoder* arguments) { + RefPtr<APIObject> userData; + WebContextUserMessageDecoder messageDecoder(userData, m_process->context()); + if (!arguments->decode(messageDecoder)) + return; + if (WebBackForwardListItem* item = process()->webBackForwardItem(itemID)) - m_loaderClient.willGoToBackForwardListItem(this, item); + m_loaderClient.willGoToBackForwardListItem(this, item, userData.get()); } String WebPageProxy::activeURL() const @@ -633,7 +664,8 @@ String WebPageProxy::activeURL() const if (!m_pendingAPIRequestURL.isNull()) return m_pendingAPIRequestURL; - // FIXME: What do we do in the case of the unreachable URL? + if (!m_mainFrame->unreachableURL().isEmpty()) + return m_mainFrame->unreachableURL(); switch (m_mainFrame->loadState()) { case WebFrameProxy::LoadStateProvisional: @@ -765,13 +797,27 @@ void WebPageProxy::viewStateDidChange(ViewStateFlags flags) process()->send(Messages::WebPage::SetIsInWindow(isInWindow), m_pageID); } - LayerHostingMode layerHostingMode = m_pageClient->viewLayerHostingMode(); - if (m_layerHostingMode != layerHostingMode) { - m_layerHostingMode = layerHostingMode; - m_drawingArea->layerHostingModeDidChange(); + if (isInWindow) { + LayerHostingMode layerHostingMode = m_pageClient->viewLayerHostingMode(); + if (m_layerHostingMode != layerHostingMode) { + m_layerHostingMode = layerHostingMode; + m_drawingArea->layerHostingModeDidChange(); + } } } +#if ENABLE(PAGE_VISIBILITY_API) + PageVisibilityState visibilityState = PageVisibilityStateHidden; + + if (m_pageClient->isViewVisible()) + visibilityState = PageVisibilityStateVisible; + + if (visibilityState != m_visibilityState) { + m_visibilityState = visibilityState; + process()->send(Messages::WebPage::SetVisibilityState(visibilityState, false), m_pageID); + } +#endif + updateBackingStoreDiscardableState(); } @@ -831,14 +877,6 @@ void WebPageProxy::executeEditCommand(const String& commandName) } #if USE(TILED_BACKING_STORE) -void WebPageProxy::setFixedVisibleContentRect(const IntRect& rect) -{ - if (!isValid()) - return; - - process()->send(Messages::WebPage::SetFixedVisibleContentRect(rect), m_pageID); -} - void WebPageProxy::setViewportSize(const IntSize& size) { if (!isValid()) @@ -851,27 +889,30 @@ void WebPageProxy::setViewportSize(const IntSize& size) void WebPageProxy::dragEntered(DragData* dragData, const String& dragStorageName) { SandboxExtension::Handle sandboxExtensionHandle; - performDragControllerAction(DragControllerActionEntered, dragData, dragStorageName, sandboxExtensionHandle); + SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; + performDragControllerAction(DragControllerActionEntered, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); } void WebPageProxy::dragUpdated(DragData* dragData, const String& dragStorageName) { SandboxExtension::Handle sandboxExtensionHandle; - performDragControllerAction(DragControllerActionUpdated, dragData, dragStorageName, sandboxExtensionHandle); + SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; + performDragControllerAction(DragControllerActionUpdated, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); } void WebPageProxy::dragExited(DragData* dragData, const String& dragStorageName) { SandboxExtension::Handle sandboxExtensionHandle; - performDragControllerAction(DragControllerActionExited, dragData, dragStorageName, sandboxExtensionHandle); + SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; + performDragControllerAction(DragControllerActionExited, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); } -void WebPageProxy::performDrag(DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle) +void WebPageProxy::performDrag(DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsForUpload) { - performDragControllerAction(DragControllerActionPerformDrag, dragData, dragStorageName, sandboxExtensionHandle); + performDragControllerAction(DragControllerActionPerformDrag, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionsForUpload); } -void WebPageProxy::performDragControllerAction(DragControllerAction action, DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle) +void WebPageProxy::performDragControllerAction(DragControllerAction action, DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsForUpload) { if (!isValid()) return; @@ -882,7 +923,7 @@ void WebPageProxy::performDragControllerAction(DragControllerAction action, Drag #elif PLATFORM(QT) || PLATFORM(GTK) process()->send(Messages::WebPage::PerformDragControllerAction(action, *dragData), m_pageID); #else - process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(), dragData->draggingSourceOperationMask(), dragStorageName, dragData->flags(), sandboxExtensionHandle), m_pageID); + process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(), dragData->draggingSourceOperationMask(), dragStorageName, dragData->flags(), sandboxExtensionHandle, sandboxExtensionsForUpload), m_pageID); #endif } @@ -999,9 +1040,9 @@ void WebPageProxy::handleGestureEvent(const WebGestureEvent& event) #if ENABLE(TOUCH_EVENTS) #if PLATFORM(QT) -void WebPageProxy::handlePotentialActivation(const IntPoint& layoutPoint) +void WebPageProxy::handlePotentialActivation(const IntPoint& touchPoint, const IntSize& touchArea) { - process()->send(Messages::WebPage::HighlightPotentialActivation(layoutPoint), m_pageID); + process()->send(Messages::WebPage::HighlightPotentialActivation(touchPoint, touchArea), m_pageID); } #endif @@ -1276,14 +1317,13 @@ void WebPageProxy::scalePage(double scale, const IntPoint& origin) void WebPageProxy::setIntrinsicDeviceScaleFactor(float scaleFactor) { - if (!isValid()) - return; - if (m_intrinsicDeviceScaleFactor == scaleFactor) return; m_intrinsicDeviceScaleFactor = scaleFactor; - m_drawingArea->deviceScaleFactorDidChange(); + + if (m_drawingArea) + m_drawingArea->deviceScaleFactorDidChange(); } void WebPageProxy::windowScreenDidChange(PlatformDisplayID displayID) @@ -1561,6 +1601,11 @@ void WebPageProxy::preferencesDidChange() if (!isValid()) return; +#if ENABLE(INSPECTOR_SERVER) + if (m_pageGroup->preferences()->developerExtrasEnabled()) + inspector()->enableRemoteInspection(); +#endif + // FIXME: It probably makes more sense to send individual preference changes. // However, WebKitTestRunner depends on getting a preference change notification // even if nothing changed in UI process, so that overrides get removed. @@ -1802,7 +1847,7 @@ void WebPageProxy::didCommitLoadForFrame(uint64_t frameID, const String& mimeTyp m_pageClient->resetTextInputState(); #if !defined(BUILDING_ON_SNOW_LEOPARD) // FIXME: Should this be moved inside resetTextInputState()? - dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored); + dismissCorrectionPanel(ReasonForDismissingAlternativeTextIgnored); m_pageClient->dismissDictionaryLookupPanel(); #endif #endif @@ -1813,6 +1858,13 @@ void WebPageProxy::didCommitLoadForFrame(uint64_t frameID, const String& mimeTyp if (frame->isMainFrame()) { m_mainFrameHasCustomRepresentation = frameHasCustomRepresentation; + + if (m_mainFrameHasCustomRepresentation) { + // Always assume that the main frame is pinned here, since the custom representation view will handle + // any wheel events and dispatch them to the WKView when necessary. + m_mainFrameIsPinnedToLeftSide = true; + m_mainFrameIsPinnedToRightSide = true; + } m_pageClient->didCommitLoadForMainFrame(frameHasCustomRepresentation); } @@ -2343,16 +2395,16 @@ void WebPageProxy::pageDidRequestScroll(const IntPoint& point) } #endif -void WebPageProxy::didChangeViewportProperties(const ViewportArguments& args) +void WebPageProxy::didChangeViewportProperties(const ViewportAttributes& attr) { - m_pageClient->didChangeViewportProperties(args); + m_pageClient->didChangeViewportProperties(attr); } void WebPageProxy::pageDidScroll() { m_uiClient.pageDidScroll(this); #if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) - dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored); + dismissCorrectionPanel(ReasonForDismissingAlternativeTextIgnored); #endif } @@ -2386,6 +2438,7 @@ void WebPageProxy::printFrame(uint64_t frameID) m_uiClient.printFrame(this, frame); + endPrinting(); // Send a message synchronously while m_isPerformingDOMPrintOperation is still true. m_isPerformingDOMPrintOperation = false; } @@ -2418,12 +2471,12 @@ void WebPageProxy::didFindZoomableArea(const IntPoint& target, const IntRect& ar m_pageClient->didFindZoomableArea(target, area); } -void WebPageProxy::findZoomableAreaForPoint(const IntPoint& point) +void WebPageProxy::findZoomableAreaForPoint(const IntPoint& point, const IntSize& area) { if (!isValid()) return; - process()->send(Messages::WebPage::FindZoomableAreaForPoint(point), m_pageID); + process()->send(Messages::WebPage::FindZoomableAreaForPoint(point, area), m_pageID); } void WebPageProxy::didReceiveMessageFromNavigatorQtObject(const String& contents) @@ -2638,6 +2691,7 @@ void WebPageProxy::hidePopupMenu() m_activePopupMenu = 0; } +#if ENABLE(CONTEXT_MENUS) void WebPageProxy::showContextMenu(const IntPoint& menuLocation, const WebHitTestResult::Data& hitTestResultData, const Vector<WebContextMenuItemData>& proposedItems, CoreIPC::ArgumentDecoder* arguments) { internalShowContextMenu(menuLocation, hitTestResultData, proposedItems, arguments); @@ -2747,6 +2801,7 @@ void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item) process()->send(Messages::WebPage::DidSelectItemFromActiveContextMenu(item), m_pageID); } +#endif // ENABLE(CONTEXT_MENUS) void WebPageProxy::didChooseFilesForOpenPanel(const Vector<String>& fileURLs) { @@ -3174,6 +3229,20 @@ void WebPageProxy::validateCommandCallback(const String& commandName, bool isEna callback->performCallbackWithReturnValue(commandName.impl(), isEnabled, state); } +#if PLATFORM(GTK) +void WebPageProxy::printFinishedCallback(const ResourceError& printError, uint64_t callbackID) +{ + RefPtr<PrintFinishedCallback> callback = m_printFinishedCallbacks.take(callbackID); + if (!callback) { + // FIXME: Log error or assert. + return; + } + + RefPtr<WebError> error = WebError::create(printError); + callback->performCallbackWithReturnValue(error.get()); +} +#endif + void WebPageProxy::focusedFrameChanged(uint64_t frameID) { if (!frameID) { @@ -3210,6 +3279,14 @@ void WebPageProxy::processDidBecomeUnresponsive() m_loaderClient.processDidBecomeUnresponsive(this); } +void WebPageProxy::interactionOccurredWhileProcessUnresponsive() +{ + if (!isValid()) + return; + + m_loaderClient.interactionOccurredWhileProcessUnresponsive(this); +} + void WebPageProxy::processDidBecomeResponsive() { if (!isValid()) @@ -3277,6 +3354,9 @@ void WebPageProxy::processDidCrash() invalidateCallbackMap(m_scriptValueCallbacks); invalidateCallbackMap(m_computedPagesCallbacks); invalidateCallbackMap(m_validateCommandCallbacks); +#if PLATFORM(GTK) + invalidateCallbackMap(m_printFinishedCallbacks); +#endif Vector<WebEditCommandProxy*> editCommandVector; copyToVector(m_editCommandSet, editCommandVector); @@ -3319,7 +3399,7 @@ void WebPageProxy::processDidCrash() #endif #if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) - dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored); + dismissCorrectionPanel(ReasonForDismissingAlternativeTextIgnored); m_pageClient->dismissDictionaryLookupPanel(); #endif } @@ -3440,9 +3520,9 @@ void WebPageProxy::requestNotificationPermission(uint64_t requestID, const Strin request->deny(); } -void WebPageProxy::showNotification(const String& title, const String& body, const String& iconURL, const String& replaceID, const String& originString, uint64_t notificationID) +void WebPageProxy::showNotification(const String& title, const String& body, const String& iconURL, const String& tag, const String& originString, uint64_t notificationID) { - m_process->context()->notificationManagerProxy()->show(this, title, body, iconURL, replaceID, originString, notificationID); + m_process->context()->notificationManagerProxy()->show(this, title, body, iconURL, tag, originString, notificationID); } float WebPageProxy::headerHeight(WebFrameProxy* frame) @@ -3591,16 +3671,16 @@ void WebPageProxy::drawPagesToPDF(WebFrameProxy* frame, const PrintInfo& printIn process()->send(Messages::WebPage::DrawPagesToPDF(frame->frameID(), printInfo, first, count, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0); } #elif PLATFORM(GTK) -void WebPageProxy::drawPagesForPrinting(WebFrameProxy* frame, const PrintInfo& printInfo, PassRefPtr<VoidCallback> didPrintCallback) +void WebPageProxy::drawPagesForPrinting(WebFrameProxy* frame, const PrintInfo& printInfo, PassRefPtr<PrintFinishedCallback> didPrintCallback) { - RefPtr<VoidCallback> callback = didPrintCallback; + RefPtr<PrintFinishedCallback> callback = didPrintCallback; if (!isValid()) { callback->invalidate(); return; } uint64_t callbackID = callback->callbackID(); - m_voidCallbacks.set(callbackID, callback.get()); + m_printFinishedCallbacks.set(callbackID, callback.get()); m_isInPrintingMode = true; process()->send(Messages::WebPage::DrawPagesForPrinting(frame->frameID(), printInfo, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0); } @@ -3655,30 +3735,30 @@ void WebPageProxy::substitutionsPanelIsShowing(bool& isShowing) #if !defined(BUILDING_ON_SNOW_LEOPARD) void WebPageProxy::showCorrectionPanel(int32_t panelType, const FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) { - m_pageClient->showCorrectionPanel((CorrectionPanelInfo::PanelType)panelType, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings); + m_pageClient->showCorrectionPanel((AlternativeTextType)panelType, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings); } void WebPageProxy::dismissCorrectionPanel(int32_t reason) { - m_pageClient->dismissCorrectionPanel((ReasonForDismissingCorrectionPanel)reason); + m_pageClient->dismissCorrectionPanel((ReasonForDismissingAlternativeText)reason); } void WebPageProxy::dismissCorrectionPanelSoon(int32_t reason, String& result) { - result = m_pageClient->dismissCorrectionPanelSoon((ReasonForDismissingCorrectionPanel)reason); + result = m_pageClient->dismissCorrectionPanelSoon((ReasonForDismissingAlternativeText)reason); } void WebPageProxy::recordAutocorrectionResponse(int32_t responseType, const String& replacedString, const String& replacementString) { - m_pageClient->recordAutocorrectionResponse((EditorClient::AutocorrectionResponseType)responseType, replacedString, replacementString); + m_pageClient->recordAutocorrectionResponse((AutocorrectionResponseType)responseType, replacedString, replacementString); } #endif // !defined(BUILDING_ON_SNOW_LEOPARD) -void WebPageProxy::handleCorrectionPanelResult(const String& result) +void WebPageProxy::handleAlternativeTextUIResult(const String& result) { #if !defined(BUILDING_ON_SNOW_LEOPARD) if (!isClosed()) - process()->send(Messages::WebPage::HandleCorrectionPanelResult(result), m_pageID, 0); + process()->send(Messages::WebPage::HandleAlternativeTextUIResult(result), m_pageID, 0); #endif } #endif // PLATFORM(MAC) |
