Changeset 106658 in webkit
- Timestamp:
- Feb 3, 2012 6:47:50 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 1 deleted
- 25 edited
- 1 copied
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r106656 r106658 1 2012-02-03 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> 2 3 [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior. 4 https://bugs.webkit.org/show_bug.cgi?id=77632 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Replace the runtime property setting the desktop behavior on each instance 9 by a static boolean controlling the behavior used by future created WebViews. 10 11 * UIProcess/API/qt/qquickwebpage.cpp: 12 Let only setContentsSize control the size of the drawing area instead of deferring 13 it until geometryChanged is called. 14 (QQuickWebPagePrivate::QQuickWebPagePrivate): 15 * UIProcess/API/qt/qquickwebpage_p.h: 16 * UIProcess/API/qt/qquickwebpage_p_p.h: 17 (QQuickWebPagePrivate): 18 * UIProcess/API/qt/qquickwebview.cpp: 19 (createPrivateObject): 20 (QQuickWebViewPrivate::QQuickWebViewPrivate): 21 (QQuickWebViewPrivate::~QQuickWebViewPrivate): 22 (QQuickWebViewPrivate::initialize): 23 (QQuickWebViewPrivate::processDidCrash): 24 (QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate): 25 (QQuickWebViewLegacyPrivate::initialize): 26 (QQuickWebViewLegacyPrivate::updateViewportSize): 27 (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate): 28 (QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate): 29 (QQuickWebViewFlickablePrivate::initialize): 30 (QQuickWebViewFlickablePrivate::loadDidCommit): 31 (QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout): 32 (QQuickWebViewFlickablePrivate::didChangeViewportProperties): 33 (QQuickWebViewFlickablePrivate::updateViewportSize): 34 (QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale): 35 (QQuickWebViewFlickablePrivate::_q_suspend): 36 (QQuickWebViewFlickablePrivate::_q_resume): 37 (QQuickWebViewFlickablePrivate::pageDidRequestScroll): 38 (QQuickWebViewFlickablePrivate::didChangeContentsSize): 39 (QQuickWebViewFlickablePrivate::computeViewportConstraints): 40 (QQuickWebViewFlickablePrivate::PostTransitionState::apply): 41 (QQuickWebViewExperimental::setFlickableViewportEnabled): 42 The switch is now a static function that has to be called before a WebView 43 is created. The switch can have it's default defined by the deploying platform. 44 (QQuickWebViewExperimental::flickableViewportEnabled): 45 (QQuickWebView::QQuickWebView): 46 On creation of QQuickWebView, the static boolean is read to know if we want 47 a QQuickWebViewTouchPrivate or a QQuickWebViewDesktopPrivate. 48 (QQuickWebView::geometryChanged): 49 * UIProcess/API/qt/qquickwebview_p.h: 50 * UIProcess/API/qt/qquickwebview_p_p.h: 51 (QQuickWebViewPrivate): 52 (QQuickWebViewPrivate::loadDidCommit): 53 (QQuickWebViewPrivate::didFinishFirstNonEmptyLayout): 54 (QQuickWebViewPrivate::didChangeViewportProperties): 55 (QQuickWebViewPrivate::viewportInteractionEngine): 56 (QQuickWebViewPrivate::updateViewportSize): 57 (QQuickWebViewPrivate::_q_updateVisibleContentRectAndScale): 58 (QQuickWebViewPrivate::_q_suspend): 59 (QQuickWebViewPrivate::_q_resume): 60 (QQuickWebViewPrivate::pageDidRequestScroll): 61 (QQuickWebViewPrivate::didChangeContentsSize): 62 (QQuickWebViewLegacyPrivate): 63 (QQuickWebViewFlickablePrivate): 64 (QQuickWebViewFlickablePrivate::viewportInteractionEngine): 65 (PostTransitionState): 66 (QQuickWebViewFlickablePrivate::PostTransitionState::PostTransitionState): 67 * UIProcess/API/qt/qwebviewportinfo.cpp: 68 (QWebViewportInfo::currentScale): 69 (QWebViewportInfo::devicePixelRatio): 70 (QWebViewportInfo::initialScale): 71 (QWebViewportInfo::minimumScale): 72 (QWebViewportInfo::maximumScale): 73 (QWebViewportInfo::isScalable): 74 (QWebViewportInfo::layoutSize): 75 * UIProcess/API/qt/tests/publicapi/publicapi.pro: 76 * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro: Added. 77 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/DesktopWebView.qml: Removed. 78 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml: Renamed 79 from Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_itemSelector.qml. 80 Moved to DesktopBehavior instead of using a DesktopWebView to workaround the touch event limitation. 81 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml: 82 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml: 83 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml: 84 * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml: 85 * UIProcess/API/qt/tests/qmltests/WebView.pro: Copied 86 from Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro. 87 * UIProcess/API/qt/tests/qmltests/qmltests.pro: 88 Split qmltests in two executables, tst_qmltests_DesktopBehavior and tst_qmltests_WebView. 89 The former runs without setFlickableViewportEnabled and the later does. 90 * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp: 91 (main): 92 * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro: 93 * UIProcess/API/qt/tests/tests.pri: 94 * UIProcess/qt/QtWebPageEventHandler.cpp: 95 (QtWebPageEventHandler::QtWebPageEventHandler): 96 1 97 2012-02-02 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> 2 98 -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
r106656 r106658 52 52 } 53 53 54 void QQuickWebPage::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry)55 {56 QQuickItem::geometryChanged(newGeometry, oldGeometry);57 58 if (!d->useTraditionalDesktopBehaviour)59 return;60 61 if (newGeometry.size() != oldGeometry.size())62 d->setDrawingAreaSize(newGeometry.size().toSize());63 }64 65 54 QQuickWebPagePrivate::QQuickWebPagePrivate(QQuickWebPage* q, QQuickWebView* viewportItem) 66 55 : q(q) … … 71 60 , m_paintNode(0) 72 61 , contentsScale(1) 73 , useTraditionalDesktopBehaviour(false)74 62 { 75 63 } … … 221 209 } 222 210 223 bool QQuickWebPage::usesTraditionalDesktopBehaviour() const224 {225 return d->useTraditionalDesktopBehaviour;226 }227 228 void QQuickWebPage::setUsesTraditionalDesktopBehaviour(bool enable)229 {230 d->useTraditionalDesktopBehaviour = enable;231 }232 233 211 QtWebPageEventHandler* QQuickWebPage::eventHandler() const 234 212 { -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage_p.h
r106656 r106658 50 50 QTransform transformToItem() const; 51 51 52 bool usesTraditionalDesktopBehaviour() const;53 void setUsesTraditionalDesktopBehaviour(bool enable);54 55 52 QtWebPageEventHandler* eventHandler() const; 56 53 … … 59 56 60 57 protected: 61 virtual void geometryChanged(const QRectF&, const QRectF&);62 58 virtual QSGNode* updatePaintNode(QSGNode*, UpdatePaintNodeData*); 63 59 -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage_p_p.h
r106656 r106658 57 57 QSizeF contentsSize; 58 58 qreal contentsScale; 59 bool useTraditionalDesktopBehaviour;60 59 }; 61 60 -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
r106656 r106658 56 56 using namespace WebCore; 57 57 58 static bool s_flickableViewportEnabled = true; 59 60 static QQuickWebViewPrivate* createPrivateObject(QQuickWebView* publicObject) 61 { 62 if (s_flickableViewportEnabled) 63 return new QQuickWebViewFlickablePrivate(publicObject); 64 return new QQuickWebViewLegacyPrivate(publicObject); 65 } 66 58 67 QQuickWebViewPrivate::QQuickWebViewPrivate(QQuickWebView* viewport) 59 68 : q_ptr(viewport) … … 64 73 , certificateVerificationDialog(0) 65 74 , itemSelector(0) 66 , postTransitionState(adoptPtr(new PostTransitionState(this)))67 , isTransitioningToNewPage(false)68 , pageIsSuspended(false)69 75 , m_navigatorQtObjectEnabled(false) 70 76 , m_renderToOffscreenBuffer(false) … … 77 83 QQuickWebViewPrivate::~QQuickWebViewPrivate() 78 84 { 79 if (interactionEngine)80 interactionEngine->disconnect();81 85 webPageProxy->close(); 82 86 } … … 107 111 108 112 // Any page setting should preferrable be set before creating the page. 109 setUseTraditionalDesktopBehaviour(false);110 113 webPageProxy->pageGroup()->preferences()->setAcceleratedCompositingEnabled(true); 111 114 webPageProxy->pageGroup()->preferences()->setForceCompositingMode(true); … … 113 116 pageClient.initialize(q_ptr, pageViewPrivate->eventHandler.data(), &undoController); 114 117 webPageProxy->initializeWebPage(); 115 116 // Trigger setting of correct visibility flags after everything was allocated and initialized. 117 _q_onVisibleChanged(); 118 updateViewportSize(); 118 119 } 119 120 … … 130 131 q->setAcceptedMouseButtons(Qt::NoButton); 131 132 q->setAcceptHoverEvents(false); 132 }133 134 void QQuickWebViewPrivate::initializeDesktop(QQuickWebView* viewport)135 {136 if (interactionEngine) {137 QObject::disconnect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend()));138 QObject::disconnect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume()));139 QObject::disconnect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));140 QObject::disconnect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale()));141 }142 interactionEngine.reset(0);143 pageView->d->eventHandler->setViewportInteractionEngine(0);144 enableMouseEvents();145 updateDesktopViewportSize();146 }147 148 void QQuickWebViewPrivate::initializeTouch(QQuickWebView* viewport)149 {150 interactionEngine.reset(new QtViewportInteractionEngine(viewport, pageView.data()));151 pageView->d->eventHandler->setViewportInteractionEngine(interactionEngine.data());152 disableMouseEvents();153 QObject::connect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend()));154 QObject::connect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume()));155 QObject::connect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));156 QObject::connect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale()));157 updateTouchViewportSize();158 133 } 159 134 … … 172 147 } 173 148 174 void QQuickWebViewPrivate::loadDidCommit()175 {176 // Due to entering provisional load before committing, we177 // might actually be suspended here.178 179 if (pageView->usesTraditionalDesktopBehaviour())180 return;181 182 isTransitioningToNewPage = true;183 }184 185 void QQuickWebViewPrivate::didFinishFirstNonEmptyLayout()186 {187 if (pageView->usesTraditionalDesktopBehaviour())188 return;189 190 if (!pageIsSuspended) {191 isTransitioningToNewPage = false;192 postTransitionState->apply();193 }194 }195 196 149 void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL) 197 150 { … … 203 156 } 204 157 205 void QQuickWebViewPrivate::_q_suspend()206 {207 pageIsSuspended = true;208 }209 210 void QQuickWebViewPrivate::_q_resume()211 {212 pageIsSuspended = false;213 214 if (isTransitioningToNewPage) {215 isTransitioningToNewPage = false;216 postTransitionState->apply();217 }218 219 _q_updateVisibleContentRectAndScale();220 }221 222 void QQuickWebViewPrivate::didChangeContentsSize(const QSize& newSize)223 {224 Q_Q(QQuickWebView);225 if (pageView->usesTraditionalDesktopBehaviour())226 return;227 228 // FIXME: We probably want to handle suspend here as well229 if (isTransitioningToNewPage) {230 postTransitionState->contentsSize = newSize;231 return;232 }233 234 pageView->setContentsSize(newSize);235 q->m_experimental->viewportInfo()->didUpdateContentsSize();236 }237 238 void QQuickWebViewPrivate::didChangeViewportProperties(const WebCore::ViewportArguments& args)239 {240 if (pageView->usesTraditionalDesktopBehaviour())241 return;242 243 viewportArguments = args;244 245 if (isTransitioningToNewPage)246 return;247 248 interactionEngine->applyConstraints(computeViewportConstraints());249 }250 251 158 void QQuickWebViewPrivate::didChangeBackForwardList() 252 159 { … … 254 161 } 255 162 256 void QQuickWebViewPrivate::pageDidRequestScroll(const QPoint& pos)257 {258 if (pageView->usesTraditionalDesktopBehaviour())259 return;260 261 if (isTransitioningToNewPage) {262 postTransitionState->position = pos;263 return;264 }265 266 interactionEngine->pagePositionRequest(pos);267 }268 269 163 void QQuickWebViewPrivate::processDidCrash() 270 164 { 271 165 emit q_ptr->navigationStateChanged(); 272 pageView-> d->eventHandler->resetGestureRecognizers();166 pageView->eventHandler()->resetGestureRecognizers(); 273 167 WebCore::KURL url(WebCore::ParsedURLString, webPageProxy->urlAtProcessExit()); 274 168 qWarning("WARNING: The web process experienced a crash on '%s'.", qPrintable(QUrl(url).toString(QUrl::RemoveUserInfo))); … … 301 195 } 302 196 303 void QQuickWebViewPrivate::_q_ updateVisibleContentRectAndScale()197 void QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged(const QPointF& trajectoryVector) 304 198 { 305 199 DrawingAreaProxy* drawingArea = webPageProxy->drawingArea(); 306 200 if (!drawingArea) 307 201 return; 308 309 Q_Q(QQuickWebView);310 const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect());311 float scale = pageView->contentsScale();312 313 QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect();314 drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale);315 316 // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended.317 webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect);318 q->m_experimental->viewportInfo()->didUpdateCurrentScale();319 }320 321 void QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged(const QPointF& trajectoryVector)322 {323 DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();324 if (!drawingArea)325 return;326 202 drawingArea->setVisibleContentRectTrajectoryVector(trajectoryVector); 327 203 } … … 343 219 } 344 220 345 void QQuickWebViewPrivate::updateDesktopViewportSize() 221 void QQuickWebViewPrivate::runJavaScriptAlert(const QString& alertText) 222 { 223 if (!alertDialog) 224 return; 225 226 Q_Q(QQuickWebView); 227 QtDialogRunner dialogRunner; 228 if (!dialogRunner.initForAlert(alertDialog, q, alertText)) 229 return; 230 setViewInAttachedProperties(dialogRunner.dialog()); 231 232 disableMouseEvents(); 233 dialogRunner.exec(); 234 enableMouseEvents(); 235 } 236 237 bool QQuickWebViewPrivate::runJavaScriptConfirm(const QString& message) 238 { 239 if (!confirmDialog) 240 return true; 241 242 Q_Q(QQuickWebView); 243 QtDialogRunner dialogRunner; 244 if (!dialogRunner.initForConfirm(confirmDialog, q, message)) 245 return true; 246 setViewInAttachedProperties(dialogRunner.dialog()); 247 248 disableMouseEvents(); 249 dialogRunner.exec(); 250 enableMouseEvents(); 251 252 return dialogRunner.wasAccepted(); 253 } 254 255 QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok) 256 { 257 if (!promptDialog) { 258 ok = true; 259 return defaultValue; 260 } 261 262 Q_Q(QQuickWebView); 263 QtDialogRunner dialogRunner; 264 if (!dialogRunner.initForPrompt(promptDialog, q, message, defaultValue)) { 265 ok = true; 266 return defaultValue; 267 } 268 setViewInAttachedProperties(dialogRunner.dialog()); 269 270 disableMouseEvents(); 271 dialogRunner.exec(); 272 enableMouseEvents(); 273 274 ok = dialogRunner.wasAccepted(); 275 return dialogRunner.result(); 276 } 277 278 void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password) 279 { 280 if (!authenticationDialog) 281 return; 282 283 Q_Q(QQuickWebView); 284 QtDialogRunner dialogRunner; 285 if (!dialogRunner.initForAuthentication(authenticationDialog, q, hostname, realm, prefilledUsername)) 286 return; 287 288 setViewInAttachedProperties(dialogRunner.dialog()); 289 290 disableMouseEvents(); 291 dialogRunner.exec(); 292 enableMouseEvents(); 293 294 username = dialogRunner.username(); 295 password = dialogRunner.password(); 296 } 297 298 bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname) 299 { 300 if (!certificateVerificationDialog) 301 return false; 302 303 Q_Q(QQuickWebView); 304 QtDialogRunner dialogRunner; 305 if (!dialogRunner.initForCertificateVerification(certificateVerificationDialog, q, hostname)) 306 return false; 307 308 setViewInAttachedProperties(dialogRunner.dialog()); 309 310 disableMouseEvents(); 311 dialogRunner.exec(); 312 enableMouseEvents(); 313 314 return dialogRunner.wasAccepted(); 315 } 316 317 void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType type) 318 { 319 #ifndef QT_NO_FILEDIALOG 320 Q_Q(QQuickWebView); 321 openPanelResultListener = listenerRef; 322 323 // Qt does not support multiple files suggestion, so we get just the first suggestion. 324 QString selectedFileName; 325 if (!selectedFileNames.isEmpty()) 326 selectedFileName = selectedFileNames.at(0); 327 328 Q_ASSERT(!fileDialog); 329 330 QWindow* window = q->canvas(); 331 if (!window) 332 return; 333 334 fileDialog = new QFileDialog(0, QString(), selectedFileName); 335 fileDialog->window()->winId(); // Ensure that the dialog has a window 336 Q_ASSERT(fileDialog->window()->windowHandle()); 337 fileDialog->window()->windowHandle()->setTransientParent(window); 338 339 fileDialog->open(q, SLOT(_q_onOpenPanelFilesSelected())); 340 341 q->connect(fileDialog, SIGNAL(finished(int)), SLOT(_q_onOpenPanelFinished(int))); 342 #endif 343 } 344 345 void QQuickWebViewPrivate::_q_onOpenPanelFilesSelected() 346 { 347 const QStringList fileList = fileDialog->selectedFiles(); 348 Vector<RefPtr<APIObject> > wkFiles(fileList.size()); 349 350 for (unsigned i = 0; i < fileList.size(); ++i) 351 wkFiles[i] = WebURL::create(QUrl::fromLocalFile(fileList.at(i)).toString()); 352 353 WKOpenPanelResultListenerChooseFiles(openPanelResultListener, toAPI(ImmutableArray::adopt(wkFiles).leakRef())); 354 } 355 356 void QQuickWebViewPrivate::_q_onOpenPanelFinished(int result) 357 { 358 if (result == QDialog::Rejected) 359 WKOpenPanelResultListenerCancel(openPanelResultListener); 360 361 fileDialog->deleteLater(); 362 fileDialog = 0; 363 } 364 365 void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object) 366 { 367 Q_Q(QQuickWebView); 368 QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object)); 369 attached->setView(q); 370 } 371 372 void QQuickWebViewPrivate::setIcon(const QUrl& iconURL) 373 { 374 Q_Q(QQuickWebView); 375 if (m_iconURL == iconURL) 376 return; 377 378 String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment()); 379 String newPageURL = webPageProxy->mainFrame()->url(); 380 381 if (oldPageURL != newPageURL) { 382 QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); 383 if (!oldPageURL.isEmpty()) 384 iconDatabase->releaseIconForPageURL(oldPageURL); 385 386 if (!newPageURL.isEmpty()) 387 iconDatabase->retainIconForPageURL(newPageURL); 388 } 389 390 m_iconURL = iconURL; 391 emit q->iconChanged(m_iconURL); 392 } 393 394 bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const 395 { 396 return m_navigatorQtObjectEnabled; 397 } 398 399 void QQuickWebViewPrivate::setNavigatorQtObjectEnabled(bool enabled) 400 { 401 ASSERT(enabled != m_navigatorQtObjectEnabled); 402 // FIXME: Currently we have to keep this information in both processes and the setting is asynchronous. 403 m_navigatorQtObjectEnabled = enabled; 404 context->setNavigatorQtObjectEnabled(webPageProxy.get(), enabled); 405 } 406 407 WebCore::IntSize QQuickWebViewPrivate::viewSize() const 408 { 409 return WebCore::IntSize(pageView->width(), pageView->height()); 410 } 411 412 void QQuickWebViewPrivate::didReceiveMessageFromNavigatorQtObject(const String& message) 413 { 414 QVariantMap variantMap; 415 variantMap.insert(QLatin1String("data"), QString(message)); 416 variantMap.insert(QLatin1String("origin"), q_ptr->url()); 417 emit q_ptr->experimental()->messageReceived(variantMap); 418 } 419 420 QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate(QQuickWebView* viewport) 421 : QQuickWebViewPrivate(viewport) 422 { 423 } 424 425 void QQuickWebViewLegacyPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pageGroupRef) 426 { 427 QQuickWebViewPrivate::initialize(contextRef, pageGroupRef); 428 enableMouseEvents(); 429 430 // Trigger setting of correct visibility flags after everything was allocated and initialized. 431 _q_onVisibleChanged(); 432 } 433 434 void QQuickWebViewLegacyPrivate::updateViewportSize() 346 435 { 347 436 Q_Q(QQuickWebView); 348 437 QSize viewportSize = q->boundingRect().size().toSize(); 349 pageView->setWidth(viewportSize.width()); 350 pageView->setHeight(viewportSize.height()); 438 pageView->setContentsSize(viewportSize); 351 439 // The fixed layout is handled by the FrameView and the drawing area doesn't behave differently 352 // w ether its fixed or not. We still need to tell the drawing area which part of it440 // whether its fixed or not. We still need to tell the drawing area which part of it 353 441 // has to be rendered on tiles, and in desktop mode it's all of it. 354 442 webPageProxy->drawingArea()->setVisibleContentsRectAndScale(IntRect(IntPoint(), viewportSize), 1); 355 443 } 356 444 357 void QQuickWebViewPrivate::updateTouchViewportSize() 445 QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate(QQuickWebView* viewport) 446 : QQuickWebViewPrivate(viewport) 447 , interactionEngine(new QtViewportInteractionEngine(viewport, pageView.data())) 448 , postTransitionState(adoptPtr(new PostTransitionState(this))) 449 , isTransitioningToNewPage(false) 450 , pageIsSuspended(false) 451 { 452 QObject::connect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend())); 453 QObject::connect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume())); 454 QObject::connect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&))); 455 QObject::connect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale())); 456 } 457 458 QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate() 459 { 460 interactionEngine->disconnect(); 461 } 462 463 void QQuickWebViewFlickablePrivate::initialize(WKContextRef contextRef, WKPageGroupRef pageGroupRef) 464 { 465 QQuickWebViewPrivate::initialize(contextRef, pageGroupRef); 466 webPageProxy->setUseFixedLayout(true); 467 pageView->eventHandler()->setViewportInteractionEngine(interactionEngine.data()); 468 469 // Trigger setting of correct visibility flags after everything was allocated and initialized. 470 _q_onVisibleChanged(); 471 } 472 473 void QQuickWebViewFlickablePrivate::loadDidCommit() 474 { 475 // Due to entering provisional load before committing, we 476 // might actually be suspended here. 477 478 isTransitioningToNewPage = true; 479 } 480 481 void QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout() 482 { 483 if (!pageIsSuspended) { 484 isTransitioningToNewPage = false; 485 postTransitionState->apply(); 486 } 487 } 488 489 void QQuickWebViewFlickablePrivate::didChangeViewportProperties(const WebCore::ViewportArguments& args) 490 { 491 viewportArguments = args; 492 493 if (isTransitioningToNewPage) 494 return; 495 496 interactionEngine->applyConstraints(computeViewportConstraints()); 497 } 498 499 void QQuickWebViewFlickablePrivate::updateViewportSize() 358 500 { 359 501 Q_Q(QQuickWebView); … … 371 513 } 372 514 373 void QQuickWebViewPrivate::PostTransitionState::apply() 374 { 375 p->interactionEngine->reset(); 376 p->interactionEngine->applyConstraints(p->computeViewportConstraints()); 377 p->interactionEngine->pagePositionRequest(position); 378 379 if (contentsSize.isValid()) { 380 p->pageView->setContentsSize(contentsSize); 381 p->q_ptr->experimental()->viewportInfo()->didUpdateContentsSize(); 515 void QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale() 516 { 517 DrawingAreaProxy* drawingArea = webPageProxy->drawingArea(); 518 if (!drawingArea) 519 return; 520 521 Q_Q(QQuickWebView); 522 const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect()); 523 float scale = pageView->contentsScale(); 524 525 QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect(); 526 drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale); 527 528 // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended. 529 webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect); 530 q->experimental()->viewportInfo()->didUpdateCurrentScale(); 531 } 532 533 void QQuickWebViewFlickablePrivate::_q_suspend() 534 { 535 pageIsSuspended = true; 536 } 537 538 void QQuickWebViewFlickablePrivate::_q_resume() 539 { 540 pageIsSuspended = false; 541 542 if (isTransitioningToNewPage) { 543 isTransitioningToNewPage = false; 544 postTransitionState->apply(); 382 545 } 383 546 384 position = QPoint(); 385 contentsSize = QSize(); 386 } 387 388 QtViewportInteractionEngine::Constraints QQuickWebViewPrivate::computeViewportConstraints() 547 _q_updateVisibleContentRectAndScale(); 548 } 549 550 void QQuickWebViewFlickablePrivate::pageDidRequestScroll(const QPoint& pos) 551 { 552 if (isTransitioningToNewPage) { 553 postTransitionState->position = pos; 554 return; 555 } 556 557 interactionEngine->pagePositionRequest(pos); 558 } 559 560 void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize) 561 { 562 Q_Q(QQuickWebView); 563 // FIXME: We probably want to handle suspend here as well 564 if (isTransitioningToNewPage) { 565 postTransitionState->contentsSize = newSize; 566 return; 567 } 568 569 pageView->setContentsSize(newSize); 570 q->experimental()->viewportInfo()->didUpdateContentsSize(); 571 } 572 573 QtViewportInteractionEngine::Constraints QQuickWebViewFlickablePrivate::computeViewportConstraints() 389 574 { 390 575 Q_Q(QQuickWebView); … … 417 602 newConstraints.layoutSize = attr.layoutSize; 418 603 419 q-> m_experimental->viewportInfo()->didUpdateViewportConstraints();604 q->experimental()->viewportInfo()->didUpdateViewportConstraints(); 420 605 421 606 return newConstraints; 422 607 } 423 608 424 void QQuickWebViewPrivate::runJavaScriptAlert(const QString& alertText) 425 { 426 if (!alertDialog) 427 return; 428 429 Q_Q(QQuickWebView); 430 QtDialogRunner dialogRunner; 431 if (!dialogRunner.initForAlert(alertDialog, q, alertText)) 432 return; 433 setViewInAttachedProperties(dialogRunner.dialog()); 434 435 disableMouseEvents(); 436 dialogRunner.exec(); 437 enableMouseEvents(); 438 } 439 440 bool QQuickWebViewPrivate::runJavaScriptConfirm(const QString& message) 441 { 442 if (!confirmDialog) 443 return true; 444 445 Q_Q(QQuickWebView); 446 QtDialogRunner dialogRunner; 447 if (!dialogRunner.initForConfirm(confirmDialog, q, message)) 448 return true; 449 setViewInAttachedProperties(dialogRunner.dialog()); 450 451 disableMouseEvents(); 452 dialogRunner.exec(); 453 enableMouseEvents(); 454 455 return dialogRunner.wasAccepted(); 456 } 457 458 QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok) 459 { 460 if (!promptDialog) { 461 ok = true; 462 return defaultValue; 609 void QQuickWebViewFlickablePrivate::PostTransitionState::apply() 610 { 611 p->interactionEngine->reset(); 612 p->interactionEngine->applyConstraints(p->computeViewportConstraints()); 613 p->interactionEngine->pagePositionRequest(position); 614 615 if (contentsSize.isValid()) { 616 p->pageView->setContentsSize(contentsSize); 617 p->q_ptr->experimental()->viewportInfo()->didUpdateContentsSize(); 463 618 } 464 619 465 Q_Q(QQuickWebView); 466 QtDialogRunner dialogRunner; 467 if (!dialogRunner.initForPrompt(promptDialog, q, message, defaultValue)) { 468 ok = true; 469 return defaultValue; 470 } 471 setViewInAttachedProperties(dialogRunner.dialog()); 472 473 disableMouseEvents(); 474 dialogRunner.exec(); 475 enableMouseEvents(); 476 477 ok = dialogRunner.wasAccepted(); 478 return dialogRunner.result(); 479 } 480 481 void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password) 482 { 483 if (!authenticationDialog) 484 return; 485 486 Q_Q(QQuickWebView); 487 QtDialogRunner dialogRunner; 488 if (!dialogRunner.initForAuthentication(authenticationDialog, q, hostname, realm, prefilledUsername)) 489 return; 490 491 setViewInAttachedProperties(dialogRunner.dialog()); 492 493 disableMouseEvents(); 494 dialogRunner.exec(); 495 enableMouseEvents(); 496 497 username = dialogRunner.username(); 498 password = dialogRunner.password(); 499 } 500 501 bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname) 502 { 503 if (!certificateVerificationDialog) 504 return false; 505 506 Q_Q(QQuickWebView); 507 QtDialogRunner dialogRunner; 508 if (!dialogRunner.initForCertificateVerification(certificateVerificationDialog, q, hostname)) 509 return false; 510 511 setViewInAttachedProperties(dialogRunner.dialog()); 512 513 disableMouseEvents(); 514 dialogRunner.exec(); 515 enableMouseEvents(); 516 517 return dialogRunner.wasAccepted(); 518 } 519 520 void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType type) 521 { 522 #ifndef QT_NO_FILEDIALOG 523 Q_Q(QQuickWebView); 524 openPanelResultListener = listenerRef; 525 526 // Qt does not support multiple files suggestion, so we get just the first suggestion. 527 QString selectedFileName; 528 if (!selectedFileNames.isEmpty()) 529 selectedFileName = selectedFileNames.at(0); 530 531 Q_ASSERT(!fileDialog); 532 533 QWindow* window = q->canvas(); 534 if (!window) 535 return; 536 537 fileDialog = new QFileDialog(0, QString(), selectedFileName); 538 fileDialog->window()->winId(); // Ensure that the dialog has a window 539 Q_ASSERT(fileDialog->window()->windowHandle()); 540 fileDialog->window()->windowHandle()->setTransientParent(window); 541 542 fileDialog->open(q, SLOT(_q_onOpenPanelFilesSelected())); 543 544 q->connect(fileDialog, SIGNAL(finished(int)), SLOT(_q_onOpenPanelFinished(int))); 545 #endif 546 } 547 548 void QQuickWebViewPrivate::_q_onOpenPanelFilesSelected() 549 { 550 const QStringList fileList = fileDialog->selectedFiles(); 551 Vector<RefPtr<APIObject> > wkFiles(fileList.size()); 552 553 for (unsigned i = 0; i < fileList.size(); ++i) 554 wkFiles[i] = WebURL::create(QUrl::fromLocalFile(fileList.at(i)).toString()); 555 556 WKOpenPanelResultListenerChooseFiles(openPanelResultListener, toAPI(ImmutableArray::adopt(wkFiles).leakRef())); 557 } 558 559 void QQuickWebViewPrivate::_q_onOpenPanelFinished(int result) 560 { 561 if (result == QDialog::Rejected) 562 WKOpenPanelResultListenerCancel(openPanelResultListener); 563 564 fileDialog->deleteLater(); 565 fileDialog = 0; 566 } 567 568 void QQuickWebViewPrivate::setUseTraditionalDesktopBehaviour(bool enable) 569 { 570 Q_Q(QQuickWebView); 571 572 // Do not guard, testing for the same value, as we call this from the constructor. 573 574 webPageProxy->setUseFixedLayout(!enable); 575 pageView->setUsesTraditionalDesktopBehaviour(enable); 576 if (enable) 577 initializeDesktop(q); 578 else 579 initializeTouch(q); 580 } 581 582 void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object) 583 { 584 Q_Q(QQuickWebView); 585 QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object)); 586 attached->setView(q); 587 } 588 589 void QQuickWebViewPrivate::setIcon(const QUrl& iconURL) 590 { 591 Q_Q(QQuickWebView); 592 if (m_iconURL == iconURL) 593 return; 594 595 String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment()); 596 String newPageURL = webPageProxy->mainFrame()->url(); 597 598 if (oldPageURL != newPageURL) { 599 QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); 600 if (!oldPageURL.isEmpty()) 601 iconDatabase->releaseIconForPageURL(oldPageURL); 602 603 if (!newPageURL.isEmpty()) 604 iconDatabase->retainIconForPageURL(newPageURL); 605 } 606 607 m_iconURL = iconURL; 608 emit q->iconChanged(m_iconURL); 609 } 610 611 bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const 612 { 613 return m_navigatorQtObjectEnabled; 614 } 615 616 void QQuickWebViewPrivate::setNavigatorQtObjectEnabled(bool enabled) 617 { 618 ASSERT(enabled != m_navigatorQtObjectEnabled); 619 // FIXME: Currently we have to keep this information in both processes and the setting is asynchronous. 620 m_navigatorQtObjectEnabled = enabled; 621 context->setNavigatorQtObjectEnabled(webPageProxy.get(), enabled); 622 } 623 624 WebCore::IntSize QQuickWebViewPrivate::viewSize() const 625 { 626 return WebCore::IntSize(pageView->width(), pageView->height()); 627 } 628 629 void QQuickWebViewPrivate::didReceiveMessageFromNavigatorQtObject(const String& message) 630 { 631 QVariantMap variantMap; 632 variantMap.insert(QLatin1String("data"), QString(message)); 633 variantMap.insert(QLatin1String("origin"), q_ptr->url()); 634 emit q_ptr->experimental()->messageReceived(variantMap); 620 position = QPoint(); 621 contentsSize = QSize(); 635 622 } 636 623 … … 675 662 } 676 663 677 void QQuickWebViewExperimental::setUseTraditionalDesktopBehaviour(bool enable)678 {679 Q_D(QQuickWebView);680 681 if (enable == d->pageView->usesTraditionalDesktopBehaviour())682 return;683 684 d->setUseTraditionalDesktopBehaviour(enable);685 }686 687 664 void QQuickWebViewExperimental::setRenderToOffscreenBuffer(bool enable) 688 665 { … … 695 672 Q_D(const QQuickWebView); 696 673 return d->renderToOffscreenBuffer(); 674 } 675 676 void QQuickWebViewExperimental::setFlickableViewportEnabled(bool enable) 677 { 678 s_flickableViewportEnabled = enable; 679 } 680 681 bool QQuickWebViewExperimental::flickableViewportEnabled() 682 { 683 return s_flickableViewportEnabled; 697 684 } 698 685 … … 804 791 d->itemSelector = itemSelector; 805 792 emit itemSelectorChanged(); 806 }807 808 bool QQuickWebViewExperimental::useTraditionalDesktopBehaviour() const809 {810 Q_D(const QQuickWebView);811 return d->pageView->usesTraditionalDesktopBehaviour();812 793 } 813 794 … … 900 881 QQuickWebView::QQuickWebView(QQuickItem* parent) 901 882 : QQuickItem(parent) 902 , d_ptr( new QQuickWebViewPrivate(this))883 , d_ptr(createPrivateObject(this)) 903 884 , m_experimental(new QQuickWebViewExperimental(this)) 904 885 { … … 909 890 QQuickWebView::QQuickWebView(WKContextRef contextRef, WKPageGroupRef pageGroupRef, QQuickItem* parent) 910 891 : QQuickItem(parent) 911 , d_ptr( new QQuickWebViewPrivate(this))892 , d_ptr(createPrivateObject(this)) 912 893 , m_experimental(new QQuickWebViewExperimental(this)) 913 894 { … … 1085 1066 Q_D(QQuickWebView); 1086 1067 QQuickItem::geometryChanged(newGeometry, oldGeometry); 1087 if (newGeometry.size() != oldGeometry.size()) { 1088 if (d->pageView->usesTraditionalDesktopBehaviour()) 1089 d->updateDesktopViewportSize(); 1090 else 1091 d->updateTouchViewportSize(); 1092 } 1068 if (newGeometry.size() != oldGeometry.size()) 1069 d->updateViewportSize(); 1093 1070 } 1094 1071 -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
r106362 r106658 214 214 Q_PROPERTY(QDeclarativeComponent* itemSelector READ itemSelector WRITE setItemSelector NOTIFY itemSelectorChanged) 215 215 Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL) 216 Q_PROPERTY(bool useTraditionalDesktopBehaviour READ useTraditionalDesktopBehaviour WRITE setUseTraditionalDesktopBehaviour)217 216 Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL) 218 217 Q_PROPERTY(QDeclarativeListProperty<QQuickUrlSchemeDelegate> urlSchemeDelegates READ schemeDelegates) … … 239 238 QDeclarativeComponent* itemSelector() const; 240 239 void setItemSelector(QDeclarativeComponent*); 241 bool useTraditionalDesktopBehaviour() const;242 void setUseTraditionalDesktopBehaviour(bool enable);243 240 244 241 QWebViewportInfo* viewportInfo(); … … 259 256 bool renderToOffscreenBuffer() const; 260 257 void setRenderToOffscreenBuffer(bool enable); 258 static void setFlickableViewportEnabled(bool enable); 259 static bool flickableViewportEnabled(); 261 260 262 261 public Q_SLOTS: -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
r106362 r106658 62 62 static QQuickWebViewPrivate* get(QQuickWebView* q) { return q->d_ptr.data(); } 63 63 64 QQuickWebViewPrivate(QQuickWebView* viewport);65 64 virtual ~QQuickWebViewPrivate(); 66 65 67 void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0); 68 69 void initializeTouch(QQuickWebView* viewport); 70 void initializeDesktop(QQuickWebView* viewport); 66 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0); 67 71 68 void enableMouseEvents(); 72 69 void disableMouseEvents(); 73 70 74 void loadDidCommit(); 75 76 void didFinishFirstNonEmptyLayout(); 77 void didChangeViewportProperties(const WebCore::ViewportArguments& args); 71 virtual void loadDidCommit() { } 72 virtual void didFinishFirstNonEmptyLayout() { } 73 virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args) { } 78 74 void didChangeBackForwardList(); 79 75 80 76 void setNeedsDisplay(); 81 77 82 void updateDesktopViewportSize(); 78 virtual QtViewportInteractionEngine* viewportInteractionEngine() { return 0; } 79 virtual void updateViewportSize() { } 83 80 void updateTouchViewportSize(); 84 QtViewportInteractionEngine::Constraints computeViewportConstraints(); 85 86 void _q_updateVisibleContentRectAndScale(); 87 88 void _q_suspend(); 89 void _q_resume(); 81 virtual void _q_updateVisibleContentRectAndScale() { } 82 83 virtual void _q_suspend() { } 84 virtual void _q_resume() { } 90 85 void _q_viewportTrajectoryVectorChanged(const QPointF&); 91 86 void _q_onOpenPanelFilesSelected(); … … 103 98 bool handleCertificateVerificationRequest(const QString& hostname); 104 99 105 void setUseTraditionalDesktopBehaviour(bool enable);106 100 void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; } 107 101 void setViewInAttachedProperties(QObject*); … … 115 109 WebCore::IntSize viewSize() const; 116 110 void didReceiveMessageFromNavigatorQtObject(const String& message); 117 v oid pageDidRequestScroll(const QPoint& pos);118 v oid didChangeContentsSize(const QSize& newSize);111 virtual void pageDidRequestScroll(const QPoint& pos) { } 112 virtual void didChangeContentsSize(const QSize& newSize) { } 119 113 void processDidCrash(); 120 114 void didRelaunchProcess(); 121 115 PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy(); 122 116 void handleDownloadRequest(DownloadProxy*); 117 118 protected: 119 QQuickWebViewPrivate(QQuickWebView* viewport); 120 RefPtr<QtWebContext> context; 121 RefPtr<WebKit::WebPageProxy> webPageProxy; 122 123 QtPageClient pageClient; 124 QtWebUndoController undoController; 125 OwnPtr<QWebNavigationHistory> navigationHistory; 126 OwnPtr<QWebPreferences> preferences; 127 128 QScopedPointer<QtWebPageLoadClient> pageLoadClient; 129 QScopedPointer<QtWebPagePolicyClient> pagePolicyClient; 130 QScopedPointer<QtWebPageUIClient> pageUIClient; 131 132 QScopedPointer<QQuickWebPage> pageView; 133 QQuickWebView* q_ptr; 134 135 QDeclarativeComponent* alertDialog; 136 QDeclarativeComponent* confirmDialog; 137 QDeclarativeComponent* promptDialog; 138 QDeclarativeComponent* authenticationDialog; 139 QDeclarativeComponent* certificateVerificationDialog; 140 QDeclarativeComponent* itemSelector; 141 142 WebCore::ViewportArguments viewportArguments; 143 QFileDialog* fileDialog; 144 WKOpenPanelResultListenerRef openPanelResultListener; 145 146 bool m_navigatorQtObjectEnabled; 147 bool m_renderToOffscreenBuffer; 148 QUrl m_iconURL; 149 }; 150 151 class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate { 152 Q_DECLARE_PUBLIC(QQuickWebView) 153 public: 154 QQuickWebViewLegacyPrivate(QQuickWebView* viewport); 155 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0); 156 157 virtual void updateViewportSize(); 158 }; 159 160 class QQuickWebViewFlickablePrivate : public QQuickWebViewPrivate { 161 Q_DECLARE_PUBLIC(QQuickWebView) 162 public: 163 QQuickWebViewFlickablePrivate(QQuickWebView* viewport); 164 virtual ~QQuickWebViewFlickablePrivate(); 165 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0); 166 167 virtual void loadDidCommit(); 168 virtual void didFinishFirstNonEmptyLayout(); 169 virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args); 170 virtual QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); } 171 virtual void updateViewportSize(); 172 virtual void _q_updateVisibleContentRectAndScale(); 173 virtual void _q_suspend(); 174 virtual void _q_resume(); 175 176 virtual void pageDidRequestScroll(const QPoint& pos); 177 virtual void didChangeContentsSize(const QSize& newSize); 178 179 QtViewportInteractionEngine::Constraints computeViewportConstraints(); 123 180 124 181 private: … … 128 185 class PostTransitionState { 129 186 public: 130 PostTransitionState(QQuickWebView Private* parent)187 PostTransitionState(QQuickWebViewFlickablePrivate* parent) 131 188 : p(parent) 132 189 { } … … 134 191 void apply(); 135 192 136 QQuickWebView Private* p;193 QQuickWebViewFlickablePrivate* p; 137 194 QSize contentsSize; 138 195 QPoint position; 139 196 }; 140 197 141 RefPtr<QtWebContext> context;142 RefPtr<WebKit::WebPageProxy> webPageProxy;143 144 QtPageClient pageClient;145 QtWebUndoController undoController;146 OwnPtr<QWebNavigationHistory> navigationHistory;147 OwnPtr<QWebPreferences> preferences;148 149 QScopedPointer<QtWebPageLoadClient> pageLoadClient;150 QScopedPointer<QtWebPagePolicyClient> pagePolicyClient;151 QScopedPointer<QtWebPageUIClient> pageUIClient;152 153 QScopedPointer<QQuickWebPage> pageView;154 198 QScopedPointer<QtViewportInteractionEngine> interactionEngine; 155 156 QQuickWebView* q_ptr;157 158 QDeclarativeComponent* alertDialog;159 QDeclarativeComponent* confirmDialog;160 QDeclarativeComponent* promptDialog;161 QDeclarativeComponent* authenticationDialog;162 QDeclarativeComponent* certificateVerificationDialog;163 QDeclarativeComponent* itemSelector;164 165 WebCore::ViewportArguments viewportArguments;166 199 OwnPtr<PostTransitionState> postTransitionState; 167 QFileDialog* fileDialog;168 WKOpenPanelResultListenerRef openPanelResultListener;169 170 200 bool isTransitioningToNewPage; 171 201 bool pageIsSuspended; 172 bool m_navigatorQtObjectEnabled;173 bool m_renderToOffscreenBuffer;174 QUrl m_iconURL;175 202 }; 176 203 -
trunk/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp
r106656 r106658 44 44 QVariant QWebViewportInfo::currentScale() const 45 45 { 46 if ( !m_webViewPrivate->interactionEngine)47 return QVariant();46 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 47 return interactionEngine->currentCSSScale(); 48 48 49 return m_webViewPrivate->interactionEngine->currentCSSScale();49 return QVariant(); 50 50 } 51 51 52 52 QVariant QWebViewportInfo::devicePixelRatio() const 53 53 { 54 if ( !m_webViewPrivate->interactionEngine)55 return QVariant();54 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 55 return interactionEngine->constraints().devicePixelRatio; 56 56 57 return m_webViewPrivate->interactionEngine->constraints().devicePixelRatio;57 return QVariant(); 58 58 } 59 59 60 60 QVariant QWebViewportInfo::initialScale() const 61 61 { 62 if ( !m_webViewPrivate->interactionEngine)63 return QVariant();62 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 63 return interactionEngine->constraints().initialScale; 64 64 65 return m_webViewPrivate->interactionEngine->constraints().initialScale;65 return QVariant(); 66 66 } 67 67 68 68 QVariant QWebViewportInfo::minimumScale() const 69 69 { 70 if ( !m_webViewPrivate->interactionEngine)71 return QVariant();70 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 71 return interactionEngine->constraints().minimumScale; 72 72 73 return m_webViewPrivate->interactionEngine->constraints().minimumScale;73 return QVariant(); 74 74 } 75 75 76 76 QVariant QWebViewportInfo::maximumScale() const 77 77 { 78 if ( !m_webViewPrivate->interactionEngine)79 return QVariant();78 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 79 return interactionEngine->constraints().maximumScale; 80 80 81 return m_webViewPrivate->interactionEngine->constraints().maximumScale;81 return QVariant(); 82 82 } 83 83 84 84 QVariant QWebViewportInfo::isScalable() const 85 85 { 86 if ( !m_webViewPrivate->interactionEngine)87 return QVariant();86 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 87 return interactionEngine->constraints().isUserScalable; 88 88 89 return m_webViewPrivate->interactionEngine->constraints().isUserScalable;89 return QVariant(); 90 90 } 91 91 92 92 QVariant QWebViewportInfo::layoutSize() const 93 93 { 94 if ( !m_webViewPrivate->interactionEngine)95 return QVariant();94 if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) 95 return interactionEngine->constraints().layoutSize; 96 96 97 return m_webViewPrivate->interactionEngine->constraints().layoutSize;97 return QVariant(); 98 98 } 99 99 -
trunk/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro
r105498 r106658 1 1 include(../tests.pri) 2 SOURCES += $${TARGET}.cpp 2 3 CONFIG += qtwebkit-private -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml
r106656 r106658 4 4 import QtWebKit.experimental 3.0 5 5 6 // FIXME: used because we want to have mouseClick() to open the <select> tag. We can remove this6 // FIXME: Moved to Desktop tests because we want to have mouseClick() to open the <select> tag. We can move it back 7 7 // when TestCase starts supporting touch events, see https://bugreports.qt.nokia.com/browse/QTBUG-23083. 8 import "../DesktopBehavior" 9 10 DesktopWebView { 8 WebView { 11 9 id: webView 12 10 -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml
r101162 r106658 3 3 import QtWebKit 3.0 4 4 5 DesktopWebView {5 WebView { 6 6 id: webView 7 7 width: 200 -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml
r101162 r106658 3 3 import QtWebKit 3.0 4 4 5 DesktopWebView {5 WebView { 6 6 id: webView 7 7 width: 200 -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml
r102948 r106658 5 5 6 6 Item { 7 DesktopWebView {7 WebView { 8 8 id: webView 9 9 property variant lastMessage … … 14 14 } 15 15 16 DesktopWebView {16 WebView { 17 17 id: otherWebView 18 18 property variant lastMessage … … 23 23 } 24 24 25 DesktopWebView {25 WebView { 26 26 id: disabledWebView 27 27 property bool receivedMessage -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml
r103330 r106658 12 12 property url endUrl: Qt.resolvedUrl("../common/test1.html") 13 13 14 DesktopWebView {14 WebView { 15 15 id: webView 16 16 width: 200 … … 52 52 } 53 53 54 DesktopWebView {54 WebView { 55 55 id: otherWebView 56 56 } -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro
r106656 r106658 1 1 include(../tests.pri) 2 SOURCES += tst_qmltests.cpp 3 TARGET = tst_qmltests_WebView 4 OBJECTS_DIR = obj_WebView/$$activeBuildConfig() 2 5 3 6 CONFIG += qtwebkit-private … … 7 10 QT += qmltest 8 11 9 # QML files tested are the ones in WebKitsource repository.10 DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD \\\"\"12 # Test the QML files under WebView in the source repository. 13 DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD$${QMAKE_DIR_SEP}WebView\\\"\" 11 14 DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" 12 15 13 16 OTHER_FILES += \ 14 DesktopBehavior/DesktopWebView.qml \15 DesktopBehavior/tst_linkHovered.qml \16 DesktopBehavior/tst_loadHtml.qml \17 DesktopBehavior/tst_messaging.qml \18 DesktopBehavior/tst_navigationRequested.qml \19 17 WebView/tst_favIconLoad.qml \ 20 18 WebView/tst_download.qml \ -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro
r104287 r106658 1 include(../tests.pri) 1 TEMPLATE = subdirs 2 2 3 CONFIG += qtwebkit-private 4 CONFIG += warn_on testcase 5 6 QT -= testlib 7 QT += qmltest 8 9 # QML files tested are the ones in WebKit source repository. 10 DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\" 11 DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" 12 13 OTHER_FILES += \ 14 DesktopBehavior/DesktopWebView.qml \ 15 DesktopBehavior/tst_linkHovered.qml \ 16 DesktopBehavior/tst_loadHtml.qml \ 17 DesktopBehavior/tst_messaging.qml \ 18 DesktopBehavior/tst_navigationRequested.qml \ 19 WebView/tst_favIconLoad.qml \ 20 WebView/tst_download.qml \ 21 WebView/tst_geopermission.qml \ 22 WebView/tst_itemSelector.qml \ 23 WebView/tst_javaScriptDialogs.qml \ 24 WebView/tst_loadFail.qml \ 25 WebView/tst_loadIgnore.qml \ 26 WebView/tst_loadHtml.qml \ 27 WebView/tst_loadProgress.qml \ 28 WebView/tst_loadProgressSignal.qml \ 29 WebView/tst_preferences.qml \ 30 WebView/tst_properties.qml \ 31 WebView/tst_titleChanged.qml \ 32 WebView/tst_applicationScheme.qml 3 SUBDIRS += DesktopBehavior.pro WebView.pro -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp
r105991 r106658 21 21 #include "../util.h" 22 22 23 #include "qquickwebview_p.h" 23 24 #include <QVarLengthArray> 24 25 #include <QtQuickTest/quicktest.h> … … 44 45 QApplication app(argc, argv); 45 46 qmlRegisterType<ByteArrayTestData>("Test", 1, 0, "ByteArrayTestData"); 47 48 #ifdef DISABLE_FLICKABLE_VIEWPORT 49 QQuickWebViewExperimental::setFlickableViewportEnabled(false); 50 #endif 46 51 return quick_test_main(argc, argv, "qmltests", 0, QUICK_TEST_SOURCE_DIR); 47 52 } -
trunk/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro
r100602 r106658 1 1 include(../tests.pri) 2 SOURCES += $${TARGET}.cpp 2 3 CONFIG += qtwebkit-private -
trunk/Source/WebKit2/UIProcess/API/qt/tests/tests.pri
r105991 r106658 6 6 HEADERS += ../bytearraytestdata.h 7 7 8 SOURCES += $${TARGET}.cpp \ 9 ../util.cpp \ 8 SOURCES += ../util.cpp \ 10 9 ../bytearraytestdata.cpp 11 10 INCLUDEPATH += $$PWD -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp
r105893 r106658 88 88 QtWebPageEventHandler::QtWebPageEventHandler(WKPageRef pageRef, QQuickWebPage* qmlWebPage, QQuickWebView* qmlWebView) 89 89 : m_webPageProxy(toImpl(pageRef)) 90 , m_interactionEngine(0) 90 91 , m_panGestureRecognizer(this) 91 92 , m_pinchGestureRecognizer(this) -
trunk/Tools/ChangeLog
r106650 r106658 1 2012-02-03 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> 2 3 [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior. 4 https://bugs.webkit.org/show_bug.cgi?id=77632 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 * MiniBrowser/qt/BrowserWindow.cpp: 9 (BrowserWindow::BrowserWindow): 10 * MiniBrowser/qt/MiniBrowserApplication.cpp: 11 (MiniBrowserApplication::sendTouchEvent): 12 (MiniBrowserApplication::handleUserOptions): 13 * MiniBrowser/qt/MiniBrowserApplication.h: 14 (WindowOptions): 15 (WindowOptions::WindowOptions): 16 * WebKitTestRunner/qt/PlatformWebViewQt.cpp: 17 (WTR::PlatformWebView::PlatformWebView): 18 * WebKitTestRunner/qt/main.cpp: 19 (main): 20 * qmake/mkspecs/features/default_post.prf: 21 1 22 2012-02-03 Simon Hausmann <simon.hausmann@nokia.com> 2 23 -
trunk/Tools/MiniBrowser/qt/BrowserWindow.cpp
r106231 r106658 55 55 connect(rootObject(), SIGNAL(pageTitleChanged(QString)), this, SLOT(setWindowTitle(QString))); 56 56 connect(rootObject(), SIGNAL(newWindow(QString)), this, SLOT(newWindow(QString))); 57 if (options->useTraditionalDesktopBehavior())58 webView()->experimental()->setUseTraditionalDesktopBehaviour(true);59 57 if (options->startFullScreen()) 60 58 showFullScreen(); -
trunk/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp
r106356 r106658 30 30 31 31 #include "BrowserWindow.h" 32 #include "qquickwebview_p.h" 32 33 #include "utils.h" 33 34 #include <QRegExp> … … 183 184 184 185 bool holdingControl = QApplication::keyboardModifiers().testFlag(Qt::ControlModifier); 185 if ( !m_windowOptions.useTraditionalDesktopBehavior())186 if (QQuickWebViewExperimental::flickableViewportEnabled()) 186 187 browserWindow->updateVisualMockTouchPoints(holdingControl ? m_touchPoints.values() : QList<QWindowSystemInterface::TouchPoint>()); 187 188 … … 221 222 222 223 const bool useDesktopBehavior = takeOptionFlag(&args, "--desktop"); 224 QQuickWebViewExperimental::setFlickableViewportEnabled(!useDesktopBehavior); 223 225 if (!useDesktopBehavior) 224 226 qputenv("QT_WEBKIT_USE_MOBILE_THEME", QByteArray("1")); 225 m_windowOptions.setUseTraditionalDesktopBehavior(useDesktopBehavior);226 227 m_windowOptions.setPrintLoadedUrls(takeOptionFlag(&args, "-v")); 227 228 m_windowOptions.setStartMaximized(takeOptionFlag(&args, "--maximize")); -
trunk/Tools/MiniBrowser/qt/MiniBrowserApplication.h
r104556 r106658 44 44 Q_OBJECT 45 45 Q_PROPERTY(bool printLoadedUrls READ printLoadedUrls) 46 Q_PROPERTY(bool useTraditionalDesktopBehavior READ useTraditionalDesktopBehavior)47 46 Q_PROPERTY(bool startMaximized READ startMaximized) 48 47 Q_PROPERTY(bool touchMockingEnabled READ touchMockingEnabled WRITE setTouchMockingEnabled NOTIFY touchMockingEnabledChanged) … … 52 51 : QObject(parent) 53 52 , m_printLoadedUrls(false) 54 , m_useTraditionalDesktopBehavior(false)55 53 , m_startMaximized(false) 56 54 , m_touchMockingEnabled(true) … … 61 59 void setPrintLoadedUrls(bool enabled) { m_printLoadedUrls = enabled; } 62 60 bool printLoadedUrls() const { return m_printLoadedUrls; } 63 void setUseTraditionalDesktopBehavior(bool enabled) { m_useTraditionalDesktopBehavior = enabled; }64 bool useTraditionalDesktopBehavior() const { return m_useTraditionalDesktopBehavior; }65 61 void setStartMaximized(bool enabled) { m_startMaximized = enabled; } 66 62 bool startMaximized() const { return m_startMaximized; } … … 83 79 private: 84 80 bool m_printLoadedUrls; 85 bool m_useTraditionalDesktopBehavior;86 81 bool m_startMaximized; 87 82 bool m_startFullScreen; -
trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp
r106250 r106658 76 76 { 77 77 QQuickWebViewExperimental experimental(m_view); 78 experimental.setUseTraditionalDesktopBehaviour(true);79 78 experimental.setRenderToOffscreenBuffer(true); 80 79 } -
trunk/Tools/WebKitTestRunner/qt/main.cpp
r100610 r106658 28 28 29 29 #include "TestController.h" 30 #include "qquickwebview_p.h" 30 31 31 32 #include <stdio.h> … … 92 93 } 93 94 95 QQuickWebViewExperimental::setFlickableViewportEnabled(false); 94 96 QApplication app(argc, argv); 95 97 Launcher launcher(argc, argv); -
trunk/Tools/qmake/mkspecs/features/default_post.prf
r105398 r106658 77 77 MOC_DIR = moc 78 78 RCC_DIR = rcc 79 OBJECTS_DIR = obj/$$activeBuildConfig()79 isEmpty(OBJECTS_DIR): OBJECTS_DIR = obj/$$activeBuildConfig() 80 80 81 81 # General default build tweaks
Note: See TracChangeset
for help on using the changeset viewer.