Changeset 225093 in webkit


Ignore:
Timestamp:
Nov 21, 2017 11:26:16 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Implement VisualViewport API attributes
https://bugs.webkit.org/show_bug.cgi?id=179385

Patch by Ali Juma <ajuma@chromium.org> on 2017-11-21
Reviewed by Frédéric Wang.

LayoutTests/imported/w3c:

Update expectations for viewport WPTs. The new expectations are all passing,
except as mentioned below.

  • web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc-expected.txt:
  • web-platform-tests/viewport/viewport-read-size-causes-layout-expected.txt:
  • web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout-expected.txt:
  • web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page-expected.txt: Fails since events are not implemented yet (wkbug.com/b/179386).
  • web-platform-tests/viewport/viewport-scrollbars-cause-resize-expected.txt:
  • web-platform-tests/viewport/viewport-type-expected.txt:
  • web-platform-tests/viewport/viewport-unscaled-scale-expected.txt:
  • web-platform-tests/viewport/viewport-unscaled-scale-iframe-expected.txt:
  • web-platform-tests/viewport/viewport-unscaled-scroll-expected.txt:
  • web-platform-tests/viewport/viewport-unscaled-scroll-iframe-expected.txt: Passing expectation for non-iOS, but fails on iOS because iframes aren't scrollable (wkbug.com/b/179794).
  • web-platform-tests/viewport/viewport-unscaled-size-expected.txt:
  • web-platform-tests/viewport/viewport-unscaled-size-iframe-expected.txt: Passing expectation for non-iOS, but fails on iOS because iframes aren't scrollable (wkbug.com/b/179794).

Source/WebCore:

Add a visualViewport attribute to Window, and implement the VisualViewport
interface (https://wicg.github.io/visual-viewport/#the-visualviewport-interface).

This is behind a newly-added VisualViewportAPI experimental feature flag.

Tests: fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html

fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html
fast/visual-viewport/viewport-dimensions-iframe.html
fast/visual-viewport/viewport-dimensions-under-page-zoom.html
fast/visual-viewport/viewport-dimensions.html

  • CMakeLists.txt:
  • DerivedSources.cpp:
  • DerivedSources.make:
  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/WebCoreBuiltinNames.h:
  • dom/EventTargetFactory.in:
  • page/DOMWindow.cpp:

(WebCore::DOMWindow::~DOMWindow):
(WebCore::DOMWindow::resetDOMWindowProperties):
(WebCore::DOMWindow::visualViewport const):

  • page/DOMWindow.h:
  • page/DOMWindow.idl:
  • page/Settings.yaml:
  • page/VisualViewport.cpp: Added.

(WebCore::VisualViewport::VisualViewport):
(WebCore::VisualViewport::eventTargetInterface const):
(WebCore::VisualViewport::scriptExecutionContext const):
(WebCore::getFrameViewAndLayoutIfNonNull):
(WebCore::VisualViewport::offsetLeft const):
(WebCore::VisualViewport::offsetTop const):
(WebCore::VisualViewport::pageLeft const):
(WebCore::VisualViewport::pageTop const):
(WebCore::VisualViewport::width const):
(WebCore::VisualViewport::height const):
(WebCore::VisualViewport::scale const):

  • page/VisualViewport.h: Added.
  • page/VisualViewport.idl: Added.

Source/WebKit:

Add a VisualViewportAPI experimental feature.

  • Shared/WebPreferences.yaml:

Source/WebKitLegacy/mac:

Add a VisualViewportAPI preference.

  • WebView/WebPreferenceKeysPrivate.h:
  • WebView/WebPreferences.mm:

(+[WebPreferences initialize]):
(-[WebPreferences visualViewportAPIEnabled]):
(-[WebPreferences setVisualViewportAPIEnabled:]):

  • WebView/WebPreferencesPrivate.h:
  • WebView/WebView.mm:

(-[WebView _preferencesChanged:]):

Source/WebKitLegacy/win:

Add a VisualViewportAPI preference.

  • Interfaces/IWebPreferencesPrivate.idl:
  • WebPreferenceKeysPrivate.h:
  • WebPreferences.cpp:

(WebPreferences::initializeDefaultSettings):
(WebPreferences::visualViewportAPIEnabled):
(WebPreferences::setVisualViewportAPIEnabled):

  • WebPreferences.h:
  • WebView.cpp:

(WebView::notifyPreferencesChanged):

Tools:

Enable the VisualViewportAPI in layout tests.

  • DumpRenderTree/mac/DumpRenderTree.mm:

(enableExperimentalFeatures):

  • DumpRenderTree/win/DumpRenderTree.cpp:

(enableExperimentalFeatures):

LayoutTests:

Add tests for the Visual Viewport API, based on Blink's layout tests but modified
to use UIScriptController.

  • fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars-expected.txt: Added.
  • fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html: Added.
  • fast/visual-viewport/viewport-dimensions-exclude-scrollbars-expected.txt: Added.
  • fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html: Added.
  • fast/visual-viewport/viewport-dimensions-expected.txt: Added.
  • fast/visual-viewport/viewport-dimensions-iframe-expected.txt: Added.
  • fast/visual-viewport/viewport-dimensions-iframe.html: Added.
  • fast/visual-viewport/viewport-dimensions-under-page-zoom-expected.txt: Added.
  • fast/visual-viewport/viewport-dimensions-under-page-zoom.html: Added.
  • fast/visual-viewport/viewport-dimensions.html: Added.
  • platform/gtk/TestExpectations: Skipped tests that use UIScriptController::zoomToScale, since this isn't implemented on GTK (webkit.org/b/168050).
  • platform/ios/fast/visual-viewport/viewport-dimensions-iframe-expected.txt: Added. Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
  • platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scroll-iframe-expected.txt: Added. Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
  • platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-expected.txt: Added. Platform-specific expectation because of the window size being different on iOS.
  • platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-iframe-expected.txt: Added. Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
  • platform/mac-wk1/TestExpectations: Skipped a test that applies webkit-scrollbar to main frame scrollbars, since this is unsupported in WK1.
Location:
trunk
Files:
18 added
44 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r225092 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Add tests for the Visual Viewport API, based on Blink's layout tests but modified
     9        to use UIScriptController.
     10
     11        * fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars-expected.txt: Added.
     12        * fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html: Added.
     13        * fast/visual-viewport/viewport-dimensions-exclude-scrollbars-expected.txt: Added.
     14        * fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html: Added.
     15        * fast/visual-viewport/viewport-dimensions-expected.txt: Added.
     16        * fast/visual-viewport/viewport-dimensions-iframe-expected.txt: Added.
     17        * fast/visual-viewport/viewport-dimensions-iframe.html: Added.
     18        * fast/visual-viewport/viewport-dimensions-under-page-zoom-expected.txt: Added.
     19        * fast/visual-viewport/viewport-dimensions-under-page-zoom.html: Added.
     20        * fast/visual-viewport/viewport-dimensions.html: Added.
     21        * platform/gtk/TestExpectations:
     22          Skipped tests that use UIScriptController::zoomToScale, since this isn't implemented on GTK (webkit.org/b/168050).
     23        * platform/ios/fast/visual-viewport/viewport-dimensions-iframe-expected.txt: Added.
     24          Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
     25        * platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scroll-iframe-expected.txt: Added.
     26          Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
     27        * platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-expected.txt: Added.
     28          Platform-specific expectation because of the window size being different on iOS.
     29        * platform/ios/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-iframe-expected.txt: Added.
     30          Fails because iframes aren't scrollable on iOS (webkit.org/b/179794).
     31        * platform/mac-wk1/TestExpectations:
     32          Skipped a test that applies webkit-scrollbar to main frame scrollbars, since this is unsupported in WK1.
     33
    1342017-11-21  Frederic Wang  <fwang@igalia.com>
    235
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r225085 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Update expectations for viewport WPTs. The new expectations are all passing,
     9        except as mentioned below.
     10
     11        * web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc-expected.txt:
     12        * web-platform-tests/viewport/viewport-read-size-causes-layout-expected.txt:
     13        * web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout-expected.txt:
     14        * web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page-expected.txt:
     15          Fails since events are not implemented yet (wkbug.com/b/179386).
     16        * web-platform-tests/viewport/viewport-scrollbars-cause-resize-expected.txt:
     17        * web-platform-tests/viewport/viewport-type-expected.txt:
     18        * web-platform-tests/viewport/viewport-unscaled-scale-expected.txt:
     19        * web-platform-tests/viewport/viewport-unscaled-scale-iframe-expected.txt:
     20        * web-platform-tests/viewport/viewport-unscaled-scroll-expected.txt:
     21        * web-platform-tests/viewport/viewport-unscaled-scroll-iframe-expected.txt:
     22          Passing expectation for non-iOS, but fails on iOS because iframes aren't scrollable (wkbug.com/b/179794).
     23        * web-platform-tests/viewport/viewport-unscaled-size-expected.txt:
     24        * web-platform-tests/viewport/viewport-unscaled-size-iframe-expected.txt:
     25          Passing expectation for non-iOS, but fails on iOS because iframes aren't scrollable (wkbug.com/b/179794).
     26
    1272017-11-21  Ms2ger  <Ms2ger@igalia.com>
    228
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 31: TypeError: undefined is not an object (evaluating 'window.visualViewport.addEventListener')
    21No Resize Event Fired on Overflow Recalc
    32
     
    54
    65
    7 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'window.visualViewport.addEventListener')
     6PASS Resize event not fired at window.visualViewport when content is added
    87
    9 NOTRUN Resize event not fired at window.visualViewport when content is added
    10 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-read-size-causes-layout-expected.txt

    r222307 r225093  
    22
    33
    4 FAIL Untitled undefined is not an object (evaluating 'window.visualViewport.width')
     4PASS Untitled
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout-expected.txt

    r222307 r225093  
    33
    44
    5 FAIL Untitled undefined is not an object (evaluating 'frames[0].window.visualViewport.width')
     5PASS Untitled
    66
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 24: TypeError: undefined is not an object (evaluating 'window.visualViewport.addEventListener')
    21Viewport: Resize Event On Load Overflowing Page
    32
     
    54
    65
    7 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'window.visualViewport.addEventListener')
     6FAIL Resize event fired exactly once against window.visualViewport if scrollbars affect layout. assert_equals: expected 1 but got 0
    87
    9 NOTRUN Resize event fired exactly once against window.visualViewport if scrollbars affect layout.
    10 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-scrollbars-cause-resize-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 22: ReferenceError: Can't find variable: visualViewport
    21Viewport: Scrollbars Cause Resize
    32
     
    54
    65
    7 FAIL Viewport: Scrollbars Cause Resize ReferenceError: Can't find variable: visualViewport
     6PASS view size initially matches window size
    87
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-type-expected.txt

    r222307 r225093  
    33Test Description: This test checks that window.visualViewport is an object of type VisualViewport.
    44
    5 window.visualViewport is of type: undefined.
     5window.visualViewport is of type: object.
    66
    77
    8 FAIL window.visualViewport is an object assert_equals: expected "object" but got "undefined"
    9 FAIL window.visualViewport has type `VisualViewport` undefined is not an object (evaluating 'window.visualViewport.toString')
     8PASS window.visualViewport is an object
     9PASS window.visualViewport has type `VisualViewport`
    1010
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scale-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 24: TypeError: undefined is not an object (evaluating 'window.visualViewport.scale')
    21Viewport: Unscaled scale
    32
    43Test Description: This test checks that the default value for scale is 1.
    54
    6 window.visualViewport.scale is .
     5window.visualViewport.scale is 1.
    76
    87
    9 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'window.visualViewport.scale')
     8PASS visualViewport.scale default value.
    109
    11 FAIL visualViewport.scale default value. undefined is not an object (evaluating 'window.visualViewport.scale')
    12 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scale-iframe-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 31: TypeError: undefined is not an object (evaluating 'frames[0].window.visualViewport.scale')
    21Viewport: Unscaled scale iframe
    32
     
    54
    65
    7 iframe's window.visualViewport.scale is .
     6iframe's window.visualViewport.scale is 1.
    87
    98
    10 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'frames[0].window.visualViewport.scale')
     9PASS iframe's visualViewport.scale default value.
    1110
    12 FAIL iframe's visualViewport.scale default value. undefined is not an object (evaluating 'frames[0].window.visualViewport.scale')
    13 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scroll-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 40: TypeError: undefined is not an object (evaluating 'window.visualViewport.offsetLeft')
    21Viewport: Scroll - no page scale
    32
    43Test Description: This test checks that window.visualViewport returns correct offset and scroll values without any pinch-zoom page scale applied.
    54
    6 window.visualViewport's offsetLeft and offsetTop is ().
     5window.visualViewport's offsetLeft and offsetTop is (0, 0).
    76
    8 window.visualViewport's pageLeft and pageTop is ().
     7window.visualViewport's pageLeft and pageTop is (1000, 1200).
    98
    109
    11 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'window.visualViewport.offsetLeft')
     10PASS offsetLeft must be 0.
     11PASS offsetTop must be 0.
     12PASS pageLeft must reflect location of viewport in document.
     13PASS pageTop must reflect location of viewport in document.
    1214
    13 FAIL offsetLeft must be 0. undefined is not an object (evaluating 'window.visualViewport.offsetLeft')
    14 FAIL offsetTop must be 0. undefined is not an object (evaluating 'window.visualViewport.offsetTop')
    15 FAIL pageLeft must reflect location of viewport in document. undefined is not an object (evaluating 'window.visualViewport.pageLeft')
    16 FAIL pageTop must reflect location of viewport in document. undefined is not an object (evaluating 'window.visualViewport.pageTop')
    17 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-scroll-iframe-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 51: TypeError: undefined is not an object (evaluating 'iframe.visualViewport.offsetLeft')
    21Viewport: Scroll in iframe - no page scale
    32
     
    54
    65
    7 frames[0].window.visualViewport's offsetLeft and offsetTop is ().
     6frames[0].window.visualViewport's offsetLeft and offsetTop is (0, 0).
    87
    9 frames[0].window.visualViewport's pageLeft and pageTop is ().
     8frames[0].window.visualViewport's pageLeft and pageTop is (1000, 1200).
    109
    1110
    12 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'iframe.visualViewport.offsetLeft')
     11PASS offsetLeft must be 0.
     12PASS offsetTop must be 0.
     13PASS pageLeft must reflect location of viewport in document.
     14PASS pageTop must reflect location of viewport in document.
    1315
    14 FAIL offsetLeft must be 0. undefined is not an object (evaluating 'iframe.visualViewport.offsetLeft')
    15 FAIL offsetTop must be 0. undefined is not an object (evaluating 'iframe.visualViewport.offsetTop')
    16 FAIL pageLeft must reflect location of viewport in document. undefined is not an object (evaluating 'iframe.visualViewport.pageLeft')
    17 FAIL pageTop must reflect location of viewport in document. undefined is not an object (evaluating 'iframe.visualViewport.pageTop')
    18 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 36: TypeError: undefined is not an object (evaluating 'window.visualViewport.width')
    21Viewport: Size unscaled
    32
    43Test Description: This test checks that window.visualViewport returns correct sizes without any pinch-zoom page scale applied.
    54
    6 window.visualViewport width and height is ().
     5window.visualViewport width and height is (800, 600).
    76
    8 window.visualViewport width and height when scrollbars are present is ().
     7window.visualViewport width and height when scrollbars are present is (785, 585).
    98
    109
    11 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'window.visualViewport.width')
     10PASS visualViewport.width should match documentElement.clientWidth when unzoomed.
     11PASS visualViewport.height should match documentElement.clientHeight when unzoomed.
     12PASS visualViewport.width should exclude scrollbar.
     13PASS visualViewport.height should exclude scrollbar.
    1214
    13 FAIL visualViewport.width should match documentElement.clientWidth when unzoomed. undefined is not an object (evaluating 'window.visualViewport.width')
    14 FAIL visualViewport.height should match documentElement.clientHeight when unzoomed. undefined is not an object (evaluating 'window.visualViewport.height')
    15 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/viewport/viewport-unscaled-size-iframe-expected.txt

    r222307 r225093  
    1 CONSOLE MESSAGE: line 38: TypeError: undefined is not an object (evaluating 'frames[0].window.visualViewport.width')
    21Viewport: Size in iframe - no page scale
    32
     
    54
    65
    7 frames[0].window.visualViewport width and height is ().
     6frames[0].window.visualViewport width and height is (200, 300).
    87
    9 frames[0].window.visualViewport width and height when scrollbars are present is ().
     8frames[0].window.visualViewport width and height when scrollbars are present is (185, 285).
    109
    1110
    12 Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'frames[0].window.visualViewport.width')
     11PASS window.visualViewport.width of iframe viewport should match iframe width.
     12PASS window.visualViewport.height of iframe viewport should match iframe height.
     13PASS window.visualViewport.width of iframe viewport should not include scrollbar.
     14PASS window.visualViewport.height of iframe viewport should not include scrollbar.
    1315
    14 FAIL window.visualViewport.width of iframe viewport should match iframe width. undefined is not an object (evaluating 'frames[0].window.visualViewport.width')
    15 FAIL window.visualViewport.height of iframe viewport should match iframe height. undefined is not an object (evaluating 'frames[0].window.visualViewport.height')
    16 
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r225085 r225093  
    979979# Skip tests requiring UIScriptController::zoomToScale
    980980webkit.org/b/168050 fast/visual-viewport/rtl-zoomed-rects.html [ Skip ]
     981webkit.org/b/168050 fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html [ Skip ]
     982webkit.org/b/168050 fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html [ Skip ]
     983webkit.org/b/168050 fast/visual-viewport/viewport-dimensions-iframe.html [ Skip ]
     984webkit.org/b/168050 fast/visual-viewport/viewport-dimensions-under-page-zoom.html [ Skip ]
     985webkit.org/b/168050 fast/visual-viewport/viewport-dimensions.html [ Skip ]
    981986webkit.org/b/168050 fast/visual-viewport/zoomed-fixed-header-and-footer.html [ Skip ]
    982987webkit.org/b/168050 fast/visual-viewport/zoomed-fixed-scroll-down-then-up.html [ Skip ]
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r224883 r225093  
    245245fast/scrolling/scroll-animator-overlay-scrollbars-clicked.html [ Skip ]
    246246fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html [ Skip ]
     247
     248# WK1 main frame scrollbars are native widgets whose size is unaffected by webkit-scrollbar.
     249fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html [ Skip ]
    247250
    248251# This hit-test test doesn't work on DRT
  • trunk/Source/WebCore/CMakeLists.txt

    r225050 r225093  
    786786    page/Screen.idl
    787787    page/ScrollToOptions.idl
     788    page/VisualViewport.idl
    788789    page/WebKitPoint.idl
    789790    page/WindowEventHandlers.idl
  • trunk/Source/WebCore/ChangeLog

    r225092 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Add a visualViewport attribute to Window, and implement the VisualViewport
     9        interface (https://wicg.github.io/visual-viewport/#the-visualviewport-interface).
     10
     11        This is behind a newly-added VisualViewportAPI experimental feature flag.
     12
     13        Tests: fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html
     14               fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html
     15               fast/visual-viewport/viewport-dimensions-iframe.html
     16               fast/visual-viewport/viewport-dimensions-under-page-zoom.html
     17               fast/visual-viewport/viewport-dimensions.html
     18
     19        * CMakeLists.txt:
     20        * DerivedSources.cpp:
     21        * DerivedSources.make:
     22        * Sources.txt:
     23        * WebCore.xcodeproj/project.pbxproj:
     24        * bindings/js/WebCoreBuiltinNames.h:
     25        * dom/EventTargetFactory.in:
     26        * page/DOMWindow.cpp:
     27        (WebCore::DOMWindow::~DOMWindow):
     28        (WebCore::DOMWindow::resetDOMWindowProperties):
     29        (WebCore::DOMWindow::visualViewport const):
     30        * page/DOMWindow.h:
     31        * page/DOMWindow.idl:
     32        * page/Settings.yaml:
     33        * page/VisualViewport.cpp: Added.
     34        (WebCore::VisualViewport::VisualViewport):
     35        (WebCore::VisualViewport::eventTargetInterface const):
     36        (WebCore::VisualViewport::scriptExecutionContext const):
     37        (WebCore::getFrameViewAndLayoutIfNonNull):
     38        (WebCore::VisualViewport::offsetLeft const):
     39        (WebCore::VisualViewport::offsetTop const):
     40        (WebCore::VisualViewport::pageLeft const):
     41        (WebCore::VisualViewport::pageTop const):
     42        (WebCore::VisualViewport::width const):
     43        (WebCore::VisualViewport::height const):
     44        (WebCore::VisualViewport::scale const):
     45        * page/VisualViewport.h: Added.
     46        * page/VisualViewport.idl: Added.
     47
    1482017-11-21  Frederic Wang  <fwang@igalia.com>
    249
  • trunk/Source/WebCore/DerivedSources.cpp

    r224871 r225093  
    614614#include "JSValidityState.cpp"
    615615#include "JSVideoPlaybackQuality.cpp"
     616#include "JSVisualViewport.cpp"
    616617#include "JSVoidCallback.cpp"
    617618#include "JSWaveShaperNode.cpp"
  • trunk/Source/WebCore/DerivedSources.make

    r225027 r225093  
    756756    $(WebCore)/page/UserMessageHandler.idl \
    757757    $(WebCore)/page/UserMessageHandlersNamespace.idl \
     758    $(WebCore)/page/VisualViewport.idl \
    758759    $(WebCore)/page/WebKitNamespace.idl \
    759760    $(WebCore)/page/WebKitPoint.idl \
  • trunk/Source/WebCore/Sources.txt

    r225009 r225093  
    13371337page/UserContentURLPattern.cpp
    13381338page/VisitedLinkStore.cpp
     1339page/VisualViewport.cpp
    13391340page/WheelEventDeltaFilter.cpp
    13401341page/WheelEventTestTrigger.cpp
     
    29422943JSVideoPlaybackQuality.cpp
    29432944JSVisibilityState.cpp
     2945JSVisualViewport.cpp
    29442946JSVoidCallback.cpp
    29452947JSWaveShaperNode.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r225087 r225093  
    18901890                7728694F14F8882500F484DC /* EXTTextureFilterAnisotropic.h in Headers */ = {isa = PBXBuildFile; fileRef = 7728694C14F8882500F484DC /* EXTTextureFilterAnisotropic.h */; };
    18911891                7728698414FD9ADA00F484DC /* JSEXTTextureFilterAnisotropic.h in Headers */ = {isa = PBXBuildFile; fileRef = 7728698214FD9ADA00F484DC /* JSEXTTextureFilterAnisotropic.h */; };
     1892                7779BD951F312D0100C21417 /* VisualViewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7779BD941F3117B700C21417 /* VisualViewport.cpp */; };
     1893                7779BD961F32246A00C21417 /* JSVisualViewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 7779BD921F2FDBF700C21417 /* JSVisualViewport.h */; };
     1894                7779BD971F32246D00C21417 /* JSVisualViewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7779BD911F2FDBCE00C21417 /* JSVisualViewport.cpp */; };
    18921895                77A17A7112F28182004E02F6 /* OESVertexArrayObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 77A17A6E12F28182004E02F6 /* OESVertexArrayObject.cpp */; };
    18931896                77A17A7212F28182004E02F6 /* OESVertexArrayObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A17A6F12F28182004E02F6 /* OESVertexArrayObject.h */; };
     
    88168819                77534FF31ED4C99F00A9646E /* JSPasswordCredentialData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPasswordCredentialData.cpp; sourceTree = "<group>"; };
    88178820                77534FF41ED4C99F00A9646E /* JSPasswordCredentialData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPasswordCredentialData.h; sourceTree = "<group>"; };
     8821                7779BD911F2FDBCE00C21417 /* JSVisualViewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSVisualViewport.cpp; sourceTree = "<group>"; };
     8822                7779BD921F2FDBF700C21417 /* JSVisualViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSVisualViewport.h; sourceTree = "<group>"; };
     8823                7779BD931F2FDFCB00C21417 /* VisualViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisualViewport.h; sourceTree = "<group>"; };
     8824                7779BD941F3117B700C21417 /* VisualViewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisualViewport.cpp; sourceTree = "<group>"; };
    88188825                77A17A6E12F28182004E02F6 /* OESVertexArrayObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OESVertexArrayObject.cpp; sourceTree = "<group>"; };
    88198826                77A17A6F12F28182004E02F6 /* OESVertexArrayObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OESVertexArrayObject.h; sourceTree = "<group>"; };
     
    88328839                77AAD6831ECFB66200BFA2D1 /* CredentialCreationOptions.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CredentialCreationOptions.idl; sourceTree = "<group>"; };
    88338840                77AAD6851ECFBD3900BFA2D1 /* CredentialCreationOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CredentialCreationOptions.h; sourceTree = "<group>"; };
     8841                77CAAAEF1F2FC35000CB5C8D /* VisualViewport.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VisualViewport.idl; sourceTree = "<group>"; };
    88348842                77CD167D1ED3BDB8009E9536 /* FederatedCredentialInit.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FederatedCredentialInit.idl; sourceTree = "<group>"; };
    88358843                77CD167E1ED3BE11009E9536 /* FederatedCredentialInit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FederatedCredentialInit.h; sourceTree = "<group>"; };
     
    1859518603                                1AF4CEEB18BC3C1B00BC2D34 /* VisitedLinkStore.cpp */,
    1859618604                                1ABA7FFF1897341200DCE9D6 /* VisitedLinkStore.h */,
     18605                                7779BD941F3117B700C21417 /* VisualViewport.cpp */,
     18606                                7779BD931F2FDFCB00C21417 /* VisualViewport.h */,
     18607                                77CAAAEF1F2FC35000CB5C8D /* VisualViewport.idl */,
    1859718608                                BE983D95052A2E0A00892D85 /* WebCoreKeyboardUIMode.h */,
    1859818609                                7C48A6CE191C9D6500026674 /* WebKitNamespace.cpp */,
     
    2156221573                                46E791451F97E01700199739 /* JSVisibilityState.cpp */,
    2156321574                                46E791461F97E01700199739 /* JSVisibilityState.h */,
     21575                                7779BD911F2FDBCE00C21417 /* JSVisualViewport.cpp */,
     21576                                7779BD921F2FDBF700C21417 /* JSVisualViewport.h */,
    2156421577                                83F570AE1C53268E007FD6CB /* JSXMLDocument.cpp */,
    2156521578                                83F570AD1C53268E007FD6CB /* JSXMLDocument.h */,
     
    2796327976                                BE8EF04D171C9014009B48C3 /* JSVideoTrackList.h in Headers */,
    2796427977                                46E791491F97E01A00199739 /* JSVisibilityState.h in Headers */,
     27978                                7779BD961F32246A00C21417 /* JSVisualViewport.h in Headers */,
    2796527979                                2DDE1CE41F574AE900D1A365 /* JSVRDisplay.h in Headers */,
    2796627980                                2DDE1CF81F574C3900D1A365 /* JSVRDisplayCapabilities.h in Headers */,
  • trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h

    r224871 r225093  
    142142    macro(VRFrameData) \
    143143    macro(VRStageParameters) \
     144    macro(VisualViewport) \
    144145    macro(WebGL2RenderingContext) \
    145146    macro(WebGLVertexArrayObject) \
     
    280281    macro(underlyingSource) \
    281282    macro(view) \
     283    macro(visualViewport) \
    282284    macro(webRTCLegacyAPIEnabled) \
    283285    macro(webkit) \
  • trunk/Source/WebCore/dom/EventTargetFactory.in

    r224407 r225093  
    4444VRDisplay
    4545VideoTrackList conditional=VIDEO_TRACK
     46VisualViewport
    4647WebKitMediaKeySession conditional=LEGACY_ENCRYPTED_MEDIA
    4748WebSocket
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r224740 r225093  
    102102#include "URL.h"
    103103#include "UserGestureIndicator.h"
     104#include "VisualViewport.h"
    104105#include "WebKitPoint.h"
    105106#include "WindowFeatures.h"
     
    425426        ASSERT(!m_localStorage);
    426427        ASSERT(!m_applicationCache);
     428        ASSERT(!m_visualViewport);
    427429    }
    428430#endif
     
    587589    m_toolbar = nullptr;
    588590    m_performance = nullptr;
     591    m_visualViewport = nullptr;
    589592}
    590593
     
    798801        m_location = Location::create(m_frame);
    799802    return m_location.get();
     803}
     804
     805VisualViewport* DOMWindow::visualViewport() const
     806{
     807    if (!isCurrentlyDisplayedInFrame())
     808        return nullptr;
     809    if (!m_visualViewport)
     810        m_visualViewport = VisualViewport::create(m_frame);
     811    return m_visualViewport.get();
    800812}
    801813
  • trunk/Source/WebCore/page/DOMWindow.h

    r224740 r225093  
    7878class Storage;
    7979class StyleMedia;
     80class VisualViewport;
    8081class WebKitNamespace;
    8182class WebKitPoint;
     
    243244    void resizeBy(float x, float y) const;
    244245    void resizeTo(float width, float height) const;
     246
     247    VisualViewport* visualViewport() const;
    245248
    246249    // Timers
     
    385388    mutable RefPtr<BarProp> m_toolbar;
    386389    mutable RefPtr<Location> m_location;
     390    mutable RefPtr<VisualViewport> m_visualViewport;
    387391
    388392    String m_status;
  • trunk/Source/WebCore/page/DOMWindow.idl

    r222454 r225093  
    134134    void scrollBy(unrestricted double x, unrestricted double y);
    135135
     136    // Visual Viewport (https://wicg.github.io/ViewportAPI/spec.html)
     137    [EnabledBySetting=VisualViewportAPI, Replaceable] readonly attribute VisualViewport visualViewport; // FIXME: Should be [SameObject]. https://bugs.webkit.org/show_bug.cgi?id=163414
     138
    136139    // Client (CSSOM-View).
    137140    [Replaceable] readonly attribute long screenX;
  • trunk/Source/WebCore/page/Settings.yaml

    r224707 r225093  
    524524  onChange: setNeedsRecalcStyleInAllFrames
    525525
     526visualViewportAPIEnabled:
     527  initial: false
     528
    526529inputEventsEnabled:
    527530  initial: true
  • trunk/Source/WebKit/ChangeLog

    r225087 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Add a VisualViewportAPI experimental feature.
     9
     10        * Shared/WebPreferences.yaml:
     11
    1122017-11-21  Christopher Reid  <chris.reid@sony.com>
    213
  • trunk/Source/WebKit/Shared/WebPreferences.yaml

    r224871 r225093  
    11231123  category: experimental
    11241124
     1125VisualViewportAPIEnabled:
     1126  type: bool
     1127  defaultValue: false
     1128  humanReadableName: "VisualViewportAPI"
     1129  humanReadableDescription: "Enable Visual Viewport API"
     1130  category: experimental
     1131
    11251132WebAnimationsEnabled:
    11261133  type: bool
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r225087 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Add a VisualViewportAPI preference.
     9
     10        * WebView/WebPreferenceKeysPrivate.h:
     11        * WebView/WebPreferences.mm:
     12        (+[WebPreferences initialize]):
     13        (-[WebPreferences visualViewportAPIEnabled]):
     14        (-[WebPreferences setVisualViewportAPIEnabled:]):
     15        * WebView/WebPreferencesPrivate.h:
     16        * WebView/WebView.mm:
     17        (-[WebView _preferencesChanged:]):
     18
    1192017-11-21  Christopher Reid  <chris.reid@sony.com>
    220
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h

    r224871 r225093  
    181181#define WebKitCSSGridLayoutEnabledPreferenceKey @"WebKitCSSGridLayoutEnabled"
    182182#define WebKitVisualViewportEnabledPreferenceKey @"WebKitVisualViewportEnabled"
     183#define WebKitVisualViewportAPIEnabledPreferenceKey @"WebKitVisualViewportAPIEnabled"
    183184#define WebKitModernMediaControlsEnabledPreferenceKey @"WebKitModernMediaControlsEnabled"
    184185#define WebKitSubtleCryptoEnabledPreferenceKey @"WebKitSubtleCryptoEnabled"
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm

    r224871 r225093  
    651651        [NSNumber numberWithBool:YES], WebKitVisualViewportEnabledPreferenceKey,
    652652#endif
     653        [NSNumber numberWithBool:NO], WebKitVisualViewportAPIEnabledPreferenceKey,
    653654
    654655        [NSNumber numberWithBool:YES], WebKitNeedsStorageAccessFromFileURLsQuirkKey,
     
    30763077}
    30773078
     3079- (BOOL)visualViewportAPIEnabled
     3080{
     3081    return [self _boolValueForKey:WebKitVisualViewportAPIEnabledPreferenceKey];
     3082}
     3083
     3084- (void)setVisualViewportAPIEnabled:(BOOL)flag
     3085{
     3086    [self _setBoolValue:flag forKey:WebKitVisualViewportAPIEnabledPreferenceKey];
     3087}
    30783088- (BOOL)webAnimationsEnabled
    30793089{
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h

    r224871 r225093  
    575575
    576576@property (nonatomic) BOOL visualViewportEnabled;
     577@property (nonatomic) BOOL visualViewportAPIEnabled;
    577578@property (nonatomic) BOOL largeImageAsyncDecodingEnabled;
    578579@property (nonatomic) BOOL animatedImageAsyncDecodingEnabled;
  • trunk/Source/WebKitLegacy/mac/WebView/WebView.mm

    r224871 r225093  
    28612861
    28622862    settings.setVisualViewportEnabled([preferences visualViewportEnabled]);
     2863    settings.setVisualViewportAPIEnabled([preferences visualViewportAPIEnabled]);
    28632864    settings.setMediaContentTypesRequiringHardwareSupport([preferences mediaContentTypesRequiringHardwareSupport]);
    28642865
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r224823 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Add a VisualViewportAPI preference.
     9
     10        * Interfaces/IWebPreferencesPrivate.idl:
     11        * WebPreferenceKeysPrivate.h:
     12        * WebPreferences.cpp:
     13        (WebPreferences::initializeDefaultSettings):
     14        (WebPreferences::visualViewportAPIEnabled):
     15        (WebPreferences::setVisualViewportAPIEnabled):
     16        * WebPreferences.h:
     17        * WebView.cpp:
     18        (WebView::notifyPreferencesChanged):
     19
    1202017-11-14  Alex Christensen  <achristensen@webkit.org>
    221
  • trunk/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl

    r221746 r225093  
    218218    HRESULT inspectorAdditionsEnabled([out, retval] BOOL*);
    219219    HRESULT setInspectorAdditionsEnabled([in] BOOL enabled);
    220 }
     220    HRESULT visualViewportAPIEnabled([out, retval] BOOL*);
     221    HRESULT setVisualViewportAPIEnabled([in] BOOL enabled);
     222}
  • trunk/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h

    r221746 r225093  
    192192
    193193#define WebKitInspectorAdditionsEnabledPreferenceKey "WebKitInspectorAdditionsEnabled"
     194
     195#define WebKitVisualViewportAPIEnabledPreferenceKey "WebKitVisualViewportAPIEnabled"
  • trunk/Source/WebKitLegacy/win/WebPreferences.cpp

    r224371 r225093  
    323323    CFDictionaryAddValue(defaults, CFSTR(WebKitInspectorAdditionsEnabledPreferenceKey), kCFBooleanFalse);
    324324
     325    CFDictionaryAddValue(defaults, CFSTR(WebKitVisualViewportAPIEnabledPreferenceKey), kCFBooleanFalse);
     326
    325327    defaultSettings = defaults;
    326328}
     
    20942096}
    20952097
     2098HRESULT WebPreferences::visualViewportAPIEnabled(_Out_ BOOL* enabled)
     2099{
     2100    if (!enabled)
     2101        return E_POINTER;
     2102    *enabled = boolValueForKey(WebKitVisualViewportAPIEnabledPreferenceKey);
     2103    return S_OK;
     2104}
     2105
     2106HRESULT WebPreferences::setVisualViewportAPIEnabled(BOOL enabled)
     2107{
     2108    setBoolValue(WebKitVisualViewportAPIEnabledPreferenceKey, enabled);
     2109    return S_OK;
     2110}
     2111
    20962112HRESULT WebPreferences::setApplicationId(BSTR applicationId)
    20972113{
  • trunk/Source/WebKitLegacy/win/WebPreferences.h

    r221746 r225093  
    266266    virtual HRESULT STDMETHODCALLTYPE inspectorAdditionsEnabled(_Out_ BOOL*);
    267267    virtual HRESULT STDMETHODCALLTYPE setInspectorAdditionsEnabled(BOOL);
     268    virtual HRESULT STDMETHODCALLTYPE visualViewportAPIEnabled(_Out_ BOOL*);
     269    virtual HRESULT STDMETHODCALLTYPE setVisualViewportAPIEnabled(BOOL);
    268270
    269271    // WebPreferences
  • trunk/Source/WebKitLegacy/win/WebView.cpp

    r224740 r225093  
    52445244    RuntimeEnabledFeatures::sharedFeatures().setInspectorAdditionsEnabled(!!enabled);
    52455245
     5246    hr = prefsPrivate->visualViewportAPIEnabled(&enabled);
     5247    if (FAILED(hr))
     5248        return hr;
     5249    settings.setVisualViewportAPIEnabled(!!enabled);
     5250
    52465251    hr = preferences->privateBrowsingEnabled(&enabled);
    52475252    if (FAILED(hr))
  • trunk/Tools/ChangeLog

    r225080 r225093  
     12017-11-21  Ali Juma  <ajuma@chromium.org>
     2
     3        Implement VisualViewport API attributes
     4        https://bugs.webkit.org/show_bug.cgi?id=179385
     5
     6        Reviewed by Frédéric Wang.
     7
     8        Enable the VisualViewportAPI in layout tests.
     9
     10        * DumpRenderTree/mac/DumpRenderTree.mm:
     11        (enableExperimentalFeatures):
     12        * DumpRenderTree/win/DumpRenderTree.cpp:
     13        (enableExperimentalFeatures):
     14
    1152017-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm

    r224871 r225093  
    857857    preferences.encryptedMediaAPIEnabled = YES;
    858858    [preferences setAccessibilityObjectModelEnabled:YES];
     859    [preferences setVisualViewportAPIEnabled:YES];
    859860}
    860861
  • trunk/Tools/DumpRenderTree/win/DumpRenderTree.cpp

    r224371 r225093  
    773773static void enableExperimentalFeatures(IWebPreferences* preferences)
    774774{
    775     COMPtr<IWebPreferencesPrivate5> prefsPrivate { Query, preferences };
     775    COMPtr<IWebPreferencesPrivate6> prefsPrivate { Query, preferences };
    776776
    777777    // FIXME: CSSGridLayout
     
    783783    // FIXME: InputEvents
    784784    // FIXME: SubtleCrypto
     785    prefsPrivate->setVisualViewportAPIEnabled(TRUE);
    785786    prefsPrivate->setWebAnimationsEnabled(TRUE);
    786787    // FIXME: WebGL2
Note: See TracChangeset for help on using the changeset viewer.