⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243705 in webkit


Ignore:
Timestamp:
Apr 1, 2019, 12:05:17 PM (7 years ago)
Author:
Chris Dumez
Message:

Support "noreferrer" for window.open()
https://bugs.webkit.org/show_bug.cgi?id=194533

Reviewed by Geoffrey Garen.

LayoutTests/imported/w3c:

Rebaseline WPT test now that all checks are passing.

  • web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer-expected.txt:

Source/WebCore:

Support "noreferrer" for window.open() as per:

Tests: imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer.html

http/wpt/html/browsers/the-window-object/window-open-noopener-webkit.html

  • page/DOMWindow.cpp:

(WebCore::DOMWindow::createWindow):

  • page/WindowFeatures.cpp:

(WebCore::setWindowFeature):

  • page/WindowFeatures.h:

LayoutTests:

Add equivalent test to imported/w3c/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html
but which relies on localStorage instead of BroadcastChannel so that it works with WebKit.

  • http/wpt/html/browsers/the-window-object/support/noreferrer-target-webkit.html: Added.
  • http/wpt/html/browsers/the-window-object/window-open-noopener-webkit-expected.txt: Added.
  • http/wpt/html/browsers/the-window-object/window-open-noopener-webkit.html: Added.
Location:
trunk
Files:
5 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r243703 r243705  
     12019-04-01  Chris Dumez  <cdumez@apple.com>
     2
     3        Support "noreferrer" for window.open()
     4        https://bugs.webkit.org/show_bug.cgi?id=194533
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Add equivalent test to imported/w3c/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html
     9        but which relies on localStorage instead of BroadcastChannel so that it works with WebKit.
     10
     11        * http/wpt/html/browsers/the-window-object/support/noreferrer-target-webkit.html: Added.
     12        * http/wpt/html/browsers/the-window-object/window-open-noopener-webkit-expected.txt: Added.
     13        * http/wpt/html/browsers/the-window-object/window-open-noopener-webkit.html: Added.
     14
    1152019-04-01  Said Abou-Hallawa  <sabouhallawa@apple.com>
    216
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r243691 r243705  
     12019-04-01  Chris Dumez  <cdumez@apple.com>
     2
     3        Support "noreferrer" for window.open()
     4        https://bugs.webkit.org/show_bug.cgi?id=194533
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Rebaseline WPT test now that all checks are passing.
     9
     10        * web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer-expected.txt:
     11
    1122019-04-01  Emilio Cobos Álvarez  <emilio@crisal.io>
    213
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer-expected.txt

    r243634 r243705  
    11
    2 FAIL Tokenization of "noreferrer" should skip window features separators before feature assert_equals: " noreferrer" should activate feature "noreferrer" expected null but got object "[object Window]"
    3 FAIL Feature "noreferrer" should be converted to ASCII lowercase assert_equals: "NOREFERRER" should activate feature "noreferrer" expected null but got object "[object Window]"
    4 FAIL After "noreferrer", tokenization should skip window features separators that are not "=" or "," assert_equals: "noreferrer" should activate feature "noreferrer" expected null but got object "[object Window]"
    5 FAIL Tokenizing "noreferrer" should ignore window feature separators except "," after initial "=" and before value assert_equals: "noreferrer=  yes" should activate feature "noreferrer" expected null but got object "[object Window]"
    6 FAIL Tokenizing "noreferrer" should read characters until first window feature separator as `value` assert_equals: "noreferrer=1" should set "noreferrer" expected null but got object "[object Window]"
    7 FAIL Integer values other than 0 should activate the feature assert_equals: "noreferrer=1" should activate feature "noreferrer" expected null but got object "[object Window]"
     2PASS Tokenization of "noreferrer" should skip window features separators before feature
     3PASS Feature "noreferrer" should be converted to ASCII lowercase
     4PASS After "noreferrer", tokenization should skip window features separators that are not "=" or ","
     5PASS Tokenizing "noreferrer" should ignore window feature separators except "," after initial "=" and before value
     6PASS Tokenizing "noreferrer" should read characters until first window feature separator as `value`
     7PASS Integer values other than 0 should activate the feature
    88PASS Integer value of 0 should not activate "noreferrer"
    99PASS Invalid feature names should not tokenize as "noreferrer"
  • trunk/Source/WebCore/ChangeLog

    r243703 r243705  
     12019-04-01  Chris Dumez  <cdumez@apple.com>
     2
     3        Support "noreferrer" for window.open()
     4        https://bugs.webkit.org/show_bug.cgi?id=194533
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Support "noreferrer" for window.open() as per:
     9        - https://github.com/whatwg/html/pull/4331
     10
     11        Tests: imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer.html
     12               http/wpt/html/browsers/the-window-object/window-open-noopener-webkit.html
     13
     14        * page/DOMWindow.cpp:
     15        (WebCore::DOMWindow::createWindow):
     16        * page/WindowFeatures.cpp:
     17        (WebCore::setWindowFeature):
     18        * page/WindowFeatures.h:
     19
    1202019-04-01  Said Abou-Hallawa  <sabouhallawa@apple.com>
    221
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r243669 r243705  
    22892289
    22902290    // For whatever reason, Firefox uses the first frame to determine the outgoingReferrer. We replicate that behavior here.
    2291     String referrer = SecurityPolicy::generateReferrerHeader(firstFrame.document()->referrerPolicy(), completedURL, firstFrame.loader().outgoingReferrer());
     2291    String referrer = windowFeatures.noreferrer ? String() : SecurityPolicy::generateReferrerHeader(firstFrame.document()->referrerPolicy(), completedURL, firstFrame.loader().outgoingReferrer());
    22922292    auto initiatedByMainFrame = activeFrame->isMainFrame() ? InitiatedByMainFrame::Yes : InitiatedByMainFrame::Unknown;
    22932293
     
    23032303        return RefPtr<Frame> { nullptr };
    23042304
    2305     if (!windowFeatures.noopener)
     2305    bool noopener = windowFeatures.noopener || windowFeatures.noreferrer;
     2306    if (!noopener)
    23062307        newFrame->loader().setOpener(&openerFrame);
    23072308
     
    23102311
    23112312    if (newFrame->document()->domWindow()->isInsecureScriptAccess(activeWindow, completedURL))
    2312         return windowFeatures.noopener ? RefPtr<Frame> { nullptr } : newFrame;
     2313        return noopener ? RefPtr<Frame> { nullptr } : newFrame;
    23132314
    23142315    if (prepareDialogFunction)
     
    23292330        return RefPtr<Frame> { nullptr };
    23302331
    2331     return windowFeatures.noopener ? RefPtr<Frame> { nullptr } : newFrame;
     2332    return noopener ? RefPtr<Frame> { nullptr } : newFrame;
    23322333}
    23332334
  • trunk/Source/WebCore/page/WindowFeatures.cpp

    r239461 r243705  
    160160    else if (equalLettersIgnoringASCIICase(key, "noopener"))
    161161        features.noopener = numericValue;
     162    else if (equalLettersIgnoringASCIICase(key, "noreferrer"))
     163        features.noreferrer = numericValue;
    162164    else if (numericValue == 1)
    163165        features.additionalFeatures.append(key.toString());
  • trunk/Source/WebCore/page/WindowFeatures.h

    r239427 r243705  
    5656    bool dialog { false };
    5757    bool noopener { false };
     58    bool noreferrer { false };
    5859
    5960    Vector<String> additionalFeatures;
Note: See TracChangeset for help on using the changeset viewer.