summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/WebPageProxy.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
commit2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch)
tree988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebKit2/UIProcess/WebPageProxy.cpp
parentdd91e772430dc294e3bf478c119ef8d43c0a3358 (diff)
downloadqtwebkit-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.cpp172
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)