Changeset 100895 in webkit


Ignore:
Timestamp:
Nov 21, 2011 2:29:55 AM (12 years ago)
Author:
jochen@chromium.org
Message:

Implement Meta referrer
https://bugs.webkit.org/show_bug.cgi?id=72674

Reviewed by Adam Barth.

Source/WebCore:

http://wiki.whatwg.org/wiki/Meta_referrer

Tests: http/tests/security/referrer-policy-always.html

http/tests/security/referrer-policy-default.html
http/tests/security/referrer-policy-https-always.html
http/tests/security/referrer-policy-https-default.html
http/tests/security/referrer-policy-https-never.html
http/tests/security/referrer-policy-https-origin.html
http/tests/security/referrer-policy-never.html
http/tests/security/referrer-policy-origin.html
http/tests/security/referrer-policy-redirect.html
http/tests/security/referrer-policy-rel-noreferrer.html

  • WebCore.exp.in: updated
  • dom/Document.cpp:

(WebCore::Document::Document):
(WebCore::Document::processReferrerPolicy):

  • dom/Document.h:

(WebCore::Document::referrerPolicy):

  • html/HTMLAnchorElement.cpp:

(WebCore::HTMLAnchorElement::handleClick):

  • html/HTMLMetaElement.cpp:

(WebCore::HTMLMetaElement::process):

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::loadFrameRequest):
(WebCore::FrameLoader::loadResourceSynchronously):

  • loader/PingLoader.cpp:

(WebCore::PingLoader::loadImage):
(WebCore::PingLoader::sendPing):
(WebCore::PingLoader::reportContentSecurityPolicyViolation):

  • loader/SubframeLoader.cpp:

(WebCore::SubframeLoader::loadSubframe):

  • loader/SubresourceLoader.cpp:

(WebCore::SubresourceLoader::create):

  • page/SecurityPolicy.cpp:

(WebCore::SecurityPolicy::generateReferrerHeader):

  • page/SecurityPolicy.h:

Source/WebKit/chromium:

  • WebKit.gyp:
  • public/WebFrame.h:
  • public/WebReferrerPolicy.h: Added.
  • public/WebSecurityPolicy.h:
  • src/AssertMatchingEnums.cpp:
  • src/WebFrameImpl.cpp:

(WebKit::WebFrameImpl::referrerPolicy):
(WebKit::WebFrameImpl::setReferrerForRequest):

  • src/WebFrameImpl.h:
  • src/WebSecurityPolicy.cpp:

(WebKit::WebSecurityPolicy::generateReferrerHeader):

Source/WebKit/mac:

  • Plugins/Hosted/HostedNetscapePluginStream.mm:

(WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):

  • Plugins/WebNetscapePluginStream.mm:

(WebNetscapePluginStream::WebNetscapePluginStream):

Source/WebKit2:

  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::loadURL):

LayoutTests:

  • http/tests/security/referrer-policy-always-expected.txt: Added.
  • http/tests/security/referrer-policy-always.html: Added.
  • http/tests/security/referrer-policy-default-expected.txt: Added.
  • http/tests/security/referrer-policy-default.html: Added.
  • http/tests/security/referrer-policy-https-always-expected.txt: Added.
  • http/tests/security/referrer-policy-https-always.html: Added.
  • http/tests/security/referrer-policy-https-default-expected.txt: Added.
  • http/tests/security/referrer-policy-https-default.html: Added.
  • http/tests/security/referrer-policy-https-never-expected.txt: Added.
  • http/tests/security/referrer-policy-https-never.html: Added.
  • http/tests/security/referrer-policy-https-origin-expected.txt: Added.
  • http/tests/security/referrer-policy-https-origin.html: Added.
  • http/tests/security/referrer-policy-never-expected.txt: Added.
  • http/tests/security/referrer-policy-never.html: Added.
  • http/tests/security/referrer-policy-origin-expected.txt: Added.
  • http/tests/security/referrer-policy-origin.html: Added.
  • http/tests/security/referrer-policy-redirect-expected.txt: Added.
  • http/tests/security/referrer-policy-redirect.html: Added.
  • http/tests/security/referrer-policy-rel-noreferrer-expected.txt: Added.
  • http/tests/security/referrer-policy-rel-noreferrer.html: Added.
  • http/tests/security/resources/referrer-policy-log.php: Added.
  • http/tests/security/resources/referrer-policy-redirect.html: Added.
  • http/tests/security/resources/referrer-policy-start.html: Added.
  • http/tests/security/resources/rel-noreferrer.html: Added.
Location:
trunk
Files:
25 added
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r100892 r100895  
     12011-11-21  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Implement Meta referrer
     4        https://bugs.webkit.org/show_bug.cgi?id=72674
     5
     6        Reviewed by Adam Barth.
     7
     8        * http/tests/security/referrer-policy-always-expected.txt: Added.
     9        * http/tests/security/referrer-policy-always.html: Added.
     10        * http/tests/security/referrer-policy-default-expected.txt: Added.
     11        * http/tests/security/referrer-policy-default.html: Added.
     12        * http/tests/security/referrer-policy-https-always-expected.txt: Added.
     13        * http/tests/security/referrer-policy-https-always.html: Added.
     14        * http/tests/security/referrer-policy-https-default-expected.txt: Added.
     15        * http/tests/security/referrer-policy-https-default.html: Added.
     16        * http/tests/security/referrer-policy-https-never-expected.txt: Added.
     17        * http/tests/security/referrer-policy-https-never.html: Added.
     18        * http/tests/security/referrer-policy-https-origin-expected.txt: Added.
     19        * http/tests/security/referrer-policy-https-origin.html: Added.
     20        * http/tests/security/referrer-policy-never-expected.txt: Added.
     21        * http/tests/security/referrer-policy-never.html: Added.
     22        * http/tests/security/referrer-policy-origin-expected.txt: Added.
     23        * http/tests/security/referrer-policy-origin.html: Added.
     24        * http/tests/security/referrer-policy-redirect-expected.txt: Added.
     25        * http/tests/security/referrer-policy-redirect.html: Added.
     26        * http/tests/security/referrer-policy-rel-noreferrer-expected.txt: Added.
     27        * http/tests/security/referrer-policy-rel-noreferrer.html: Added.
     28        * http/tests/security/resources/referrer-policy-log.php: Added.
     29        * http/tests/security/resources/referrer-policy-redirect.html: Added.
     30        * http/tests/security/resources/referrer-policy-start.html: Added.
     31        * http/tests/security/resources/rel-noreferrer.html: Added.
     32
    1332011-11-21  Dominic Mazzoni  <dmazzoni@google.com>
    234
  • trunk/Source/WebCore/ChangeLog

    r100894 r100895  
     12011-11-21  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Implement Meta referrer
     4        https://bugs.webkit.org/show_bug.cgi?id=72674
     5
     6        Reviewed by Adam Barth.
     7
     8        http://wiki.whatwg.org/wiki/Meta_referrer
     9
     10        Tests: http/tests/security/referrer-policy-always.html
     11               http/tests/security/referrer-policy-default.html
     12               http/tests/security/referrer-policy-https-always.html
     13               http/tests/security/referrer-policy-https-default.html
     14               http/tests/security/referrer-policy-https-never.html
     15               http/tests/security/referrer-policy-https-origin.html
     16               http/tests/security/referrer-policy-never.html
     17               http/tests/security/referrer-policy-origin.html
     18               http/tests/security/referrer-policy-redirect.html
     19               http/tests/security/referrer-policy-rel-noreferrer.html
     20
     21        * WebCore.exp.in: updated
     22        * dom/Document.cpp:
     23        (WebCore::Document::Document):
     24        (WebCore::Document::processReferrerPolicy):
     25        * dom/Document.h:
     26        (WebCore::Document::referrerPolicy):
     27        * html/HTMLAnchorElement.cpp:
     28        (WebCore::HTMLAnchorElement::handleClick):
     29        * html/HTMLMetaElement.cpp:
     30        (WebCore::HTMLMetaElement::process):
     31        * loader/FrameLoader.cpp:
     32        (WebCore::FrameLoader::loadFrameRequest):
     33        (WebCore::FrameLoader::loadResourceSynchronously):
     34        * loader/PingLoader.cpp:
     35        (WebCore::PingLoader::loadImage):
     36        (WebCore::PingLoader::sendPing):
     37        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
     38        * loader/SubframeLoader.cpp:
     39        (WebCore::SubframeLoader::loadSubframe):
     40        * loader/SubresourceLoader.cpp:
     41        (WebCore::SubresourceLoader::create):
     42        * page/SecurityPolicy.cpp:
     43        (WebCore::SecurityPolicy::generateReferrerHeader):
     44        * page/SecurityPolicy.h:
     45
    1462011-11-21  Vsevolod Vlasov  <vsevik@chromium.org>
    247
  • trunk/Source/WebCore/WebCore.exp.in

    r100716 r100895  
    392392__ZN7WebCore14SecurityPolicy18setLocalLoadPolicyENS0_15LocalLoadPolicyE
    393393__ZN7WebCore14SecurityPolicy18shouldHideReferrerERKNS_4KURLERKN3WTF6StringE
     394__ZN7WebCore14SecurityPolicy22generateReferrerHeaderENS0_14ReferrerPolicyERKNS_4KURLERKN3WTF6StringE
    394395__ZN7WebCore14SecurityPolicy27resetOriginAccessWhitelistsEv
    395396__ZN7WebCore14SecurityPolicy29addOriginAccessWhitelistEntryERKNS_14SecurityOriginERKN3WTF6StringES7_b
  • trunk/Source/WebCore/dom/Document.cpp

    r100716 r100895  
    424424    , m_loadEventDelayCount(0)
    425425    , m_loadEventDelayTimer(this, &Document::loadEventDelayTimerFired)
     426    , m_referrerPolicy(SecurityPolicy::ReferrerPolicyDefault)
    426427    , m_directionSetOnDocumentElement(false)
    427428    , m_writingModeSetOnDocumentElement(false)
     
    27412742
    27422743    frame->page()->updateViewportArguments();
     2744}
     2745
     2746void Document::processReferrerPolicy(const String& policy)
     2747{
     2748    ASSERT(!policy.isNull());
     2749
     2750    m_referrerPolicy = SecurityPolicy::ReferrerPolicyDefault;
     2751
     2752    if (equalIgnoringCase(policy, "never"))
     2753        m_referrerPolicy = SecurityPolicy::ReferrerPolicyNever;
     2754    else if (equalIgnoringCase(policy, "always"))
     2755        m_referrerPolicy = SecurityPolicy::ReferrerPolicyAlways;
     2756    else if (equalIgnoringCase(policy, "origin"))
     2757        m_referrerPolicy = SecurityPolicy::ReferrerPolicyOrigin;
    27432758}
    27442759
  • trunk/Source/WebCore/dom/Document.h

    r100696 r100895  
    4343#include "QualifiedName.h"
    4444#include "ScriptExecutionContext.h"
     45#include "SecurityPolicy.h"
    4546#include "StringWithDirection.h"
    4647#include "Timer.h"
     
    324325    ViewportArguments viewportArguments() const { return m_viewportArguments; }
    325326
     327    SecurityPolicy::ReferrerPolicy referrerPolicy() const { return m_referrerPolicy; }
     328
    326329    DocumentType* doctype() const { return m_docType.get(); }
    327330
     
    806809    void processHttpEquiv(const String& equiv, const String& content);
    807810    void processViewport(const String& features);
     811    void processReferrerPolicy(const String& policy);
    808812
    809813    // Returns the owning element in the parent document.
     
    14151419    ViewportArguments m_viewportArguments;
    14161420
     1421    SecurityPolicy::ReferrerPolicy m_referrerPolicy;
     1422
    14171423    bool m_directionSetOnDocumentElement;
    14181424    bool m_writingModeSetOnDocumentElement;
  • trunk/Source/WebCore/html/HTMLAnchorElement.cpp

    r100805 r100895  
    505505
    506506        if (!hasRel(RelationNoReferrer)) {
    507             String referrer = frame->loader()->outgoingReferrer();
    508             if (!referrer.isEmpty() && !SecurityPolicy::shouldHideReferrer(kurl, referrer))
     507            String referrer = SecurityPolicy::generateReferrerHeader(document()->referrerPolicy(), kurl, frame->loader()->outgoingReferrer());
     508            if (!referrer.isEmpty())
    509509                request.setHTTPReferrer(referrer);
    510510            frame->loader()->addExtraFieldsToMainResourceRequest(request);
  • trunk/Source/WebCore/html/HTMLMetaElement.cpp

    r98300 r100895  
    7373        document()->processViewport(contentValue);
    7474
     75    if (equalIgnoringCase(name(), "referrer"))
     76        document()->processReferrerPolicy(contentValue);
     77
    7578    // Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while
    7679    // it's not in the tree shouldn't have any effect on the document)
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r100852 r100895  
    11391139    }
    11401140
    1141     String referrer;
    11421141    String argsReferrer = request.resourceRequest().httpReferrer();
    1143     if (!argsReferrer.isEmpty())
    1144         referrer = argsReferrer;
    1145     else
    1146         referrer = m_outgoingReferrer;
    1147 
    1148     if (SecurityPolicy::shouldHideReferrer(url, referrer) || shouldSendReferrer == NeverSendReferrer)
     1142    if (argsReferrer.isEmpty())
     1143        argsReferrer = m_outgoingReferrer;
     1144
     1145    String referrer = SecurityPolicy::generateReferrerHeader(m_frame->document()->referrerPolicy(), url, argsReferrer);
     1146    if (shouldSendReferrer == NeverSendReferrer)
    11491147        referrer = String();
    11501148   
     
    25952593unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials storedCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data)
    25962594{
    2597     String referrer = m_outgoingReferrer;
    2598     if (SecurityPolicy::shouldHideReferrer(request.url(), referrer))
    2599         referrer = String();
     2595    ASSERT(m_frame->document());
     2596    String referrer = SecurityPolicy::generateReferrerHeader(m_frame->document()->referrerPolicy(), request.url(), m_outgoingReferrer);
    26002597   
    26012598    ResourceRequest initialRequest = request;
  • trunk/Source/WebCore/loader/PingLoader.cpp

    r99659 r100895  
    6161#endif
    6262    request.setHTTPHeaderField("Cache-Control", "max-age=0");
    63     if (!SecurityPolicy::shouldHideReferrer(request.url(), frame->loader()->outgoingReferrer()))
    64         request.setHTTPReferrer(frame->loader()->outgoingReferrer());
     63    String referrer = SecurityPolicy::generateReferrerHeader(frame->document()->referrerPolicy(), request.url(), frame->loader()->outgoingReferrer());
     64    if (!referrer.isEmpty())
     65        request.setHTTPReferrer(referrer);
    6566    frame->loader()->addExtraFieldsToSubresourceRequest(request);
    6667    OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request));
     
    9091    if (!SecurityPolicy::shouldHideReferrer(pingURL, frame->loader()->outgoingReferrer())) {
    9192      request.setHTTPHeaderField("Ping-From", frame->document()->url());
    92       if (!sourceOrigin->isSameSchemeHostPort(pingOrigin.get()))
    93         request.setHTTPReferrer(frame->loader()->outgoingReferrer());
     93      if (!sourceOrigin->isSameSchemeHostPort(pingOrigin.get())) {
     94          String referrer = SecurityPolicy::generateReferrerHeader(frame->document()->referrerPolicy(), pingURL, frame->loader()->outgoingReferrer());
     95          if (!referrer.isEmpty())
     96              request.setHTTPReferrer(referrer);
     97      }
    9498    }
    9599    OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request));
     
    111115    frame->loader()->addExtraFieldsToSubresourceRequest(request);
    112116
    113     if (!SecurityPolicy::shouldHideReferrer(reportURL, frame->loader()->outgoingReferrer()))
    114         request.setHTTPReferrer(frame->loader()->outgoingReferrer());
     117    String referrer = SecurityPolicy::generateReferrerHeader(frame->document()->referrerPolicy(), reportURL, frame->loader()->outgoingReferrer());
     118    if (!referrer.isEmpty())
     119        request.setHTTPReferrer(referrer);
    115120    OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request));
    116121
  • trunk/Source/WebCore/loader/SubframeLoader.cpp

    r99659 r100895  
    263263        return 0;
    264264
    265     bool hideReferrer = SecurityPolicy::shouldHideReferrer(url, referrer);
    266     RefPtr<Frame> frame = m_frame->loader()->client()->createFrame(url, name, ownerElement, hideReferrer ? String() : referrer, allowsScrolling, marginWidth, marginHeight);
     265    String referrerToUse = SecurityPolicy::generateReferrerHeader(ownerElement->document()->referrerPolicy(), url, referrer);
     266    RefPtr<Frame> frame = m_frame->loader()->client()->createFrame(url, name, ownerElement, referrerToUse, allowsScrolling, marginWidth, marginHeight);
    267267
    268268    if (!frame)  {
  • trunk/Source/WebCore/loader/SubresourceLoader.cpp

    r100503 r100895  
    9191    }
    9292
    93     if (SecurityPolicy::shouldHideReferrer(request.url(), outgoingReferrer))
     93    outgoingReferrer = SecurityPolicy::generateReferrerHeader(frame->document()->referrerPolicy(), request.url(), outgoingReferrer);
     94    if (outgoingReferrer.isEmpty())
    9495        newRequest.clearHTTPReferrer();
    9596    else if (!request.httpReferrer())
  • trunk/Source/WebCore/page/SecurityPolicy.cpp

    r100101 r100895  
    6363
    6464    return !URLIsSecureURL;
     65}
     66
     67String SecurityPolicy::generateReferrerHeader(ReferrerPolicy referrerPolicy, const KURL& url, const String& referrer)
     68{
     69    if (referrer.isEmpty())
     70        return String();
     71
     72    switch (referrerPolicy) {
     73    case ReferrerPolicyNever:
     74        return String();
     75    case ReferrerPolicyAlways:
     76        return referrer;
     77    case ReferrerPolicyOrigin: {
     78        String origin = SecurityOrigin::createFromString(referrer)->toString();
     79        if (origin == "null")
     80            return String();
     81        // A security origin is not a canonical URL as it lacks a path. Add /
     82        // to turn it into a canonical URL we can use as referrer.
     83        return origin + "/";
     84    }
     85    case ReferrerPolicyDefault:
     86        break;
     87    }
     88
     89    return shouldHideReferrer(url, referrer) ? String() : referrer;
    6590}
    6691
  • trunk/Source/WebCore/page/SecurityPolicy.h

    r99659 r100895  
    3939class SecurityPolicy {
    4040public:
     41    enum ReferrerPolicy {
     42        ReferrerPolicyAlways,
     43        ReferrerPolicyDefault,
     44        ReferrerPolicyNever,
     45        // Same as ReferrerPolicyAlways, except that only the origin of the
     46        // referring URL is send.
     47        ReferrerPolicyOrigin,
     48    };
     49
     50    // True if the referrer should be omitted according to the
     51    // ReferrerPolicyDefault. If you intend to send a referrer header, you
     52    // should use generateReferrerHeader instead.
    4153    static bool shouldHideReferrer(const KURL&, const String& referrer);
     54
     55    // Returns the referrer modified according to the referrer policy for a
     56    // navigation to a given URL. If the referrer returned is empty, the
     57    // referrer header should be omitted.
     58    static String generateReferrerHeader(ReferrerPolicy, const KURL&, const String& referrer);
    4259
    4360    enum LocalLoadPolicy {
  • trunk/Source/WebKit/chromium/ChangeLog

    r100892 r100895  
     12011-11-21  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Implement Meta referrer
     4        https://bugs.webkit.org/show_bug.cgi?id=72674
     5
     6        Reviewed by Adam Barth.
     7
     8        * WebKit.gyp:
     9        * public/WebFrame.h:
     10        * public/WebReferrerPolicy.h: Added.
     11        * public/WebSecurityPolicy.h:
     12        * src/AssertMatchingEnums.cpp:
     13        * src/WebFrameImpl.cpp:
     14        (WebKit::WebFrameImpl::referrerPolicy):
     15        (WebKit::WebFrameImpl::setReferrerForRequest):
     16        * src/WebFrameImpl.h:
     17        * src/WebSecurityPolicy.cpp:
     18        (WebKit::WebSecurityPolicy::generateReferrerHeader):
     19
    1202011-11-21  Dominic Mazzoni  <dmazzoni@google.com>
    221
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r100869 r100895  
    277277                'public/WebRange.h',
    278278                'public/WebRect.h',
     279                'public/WebReferrerPolicy.h',
    279280                'public/WebRegularExpression.h',
    280281                'public/WebRuntimeFeatures.h',
  • trunk/Source/WebKit/chromium/public/WebFrame.h

    r100040 r100895  
    3636#include "WebIconURL.h"
    3737#include "WebNode.h"
     38#include "WebReferrerPolicy.h"
    3839#include "WebURL.h"
    3940#include "WebURLLoaderOptions.h"
     
    141142    virtual WebVector<WebIconURL> iconURLs(int iconTypes) const = 0;
    142143
     144    // The referrer policy of the document associated with this frame.
     145    virtual WebReferrerPolicy referrerPolicy() const = 0;
     146
    143147
    144148    // Geometry -----------------------------------------------------------
  • trunk/Source/WebKit/chromium/public/WebSecurityPolicy.h

    r95901 r100895  
    3333
    3434#include "WebCommon.h"
     35#include "WebReferrerPolicy.h"
    3536
    3637namespace WebKit {
     
    7273    // Returns whether the url should be allowed to see the referrer
    7374    // based on their respective protocols.
    74     WEBKIT_EXPORT static bool shouldHideReferrer(const WebURL& url, const WebString& referrer);
     75    // FIXME: remove this function once the chromium side has landed.
     76    WEBKIT_EXPORT static bool shouldHideReferrer(const WebURL&, const WebString& referrer);
     77
     78    // Returns the referrer modified according to the referrer policy for a
     79    // navigation to a given URL. If the referrer returned is empty, the
     80    // referrer header should be omitted.
     81    WEBKIT_EXPORT static WebString generateReferrerHeader(WebReferrerPolicy, const WebURL&, const WebString& referrer);
    7582
    7683    // Registers an URL scheme to not allow manipulation of the loaded page
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r99609 r100895  
    5656#include "PasteboardPrivate.h"
    5757#include "PlatformCursor.h"
     58#include "SecurityPolicy.h"
    5859#include "Settings.h"
    5960#include "StorageInfo.h"
     
    8384#include "WebNotificationPresenter.h"
    8485#include "WebPageVisibilityState.h"
     86#include "WebReferrerPolicy.h"
    8587#include "WebScrollbar.h"
    8688#include "WebSettings.h"
     
    468470COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::TypeVideo, MediaStreamSource::TypeVideo);
    469471#endif
     472
     473COMPILE_ASSERT_MATCHING_ENUM(WebReferrerPolicyAlways, SecurityPolicy::ReferrerPolicyAlways);
     474COMPILE_ASSERT_MATCHING_ENUM(WebReferrerPolicyDefault, SecurityPolicy::ReferrerPolicyDefault);
     475COMPILE_ASSERT_MATCHING_ENUM(WebReferrerPolicyNever, SecurityPolicy::ReferrerPolicyNever);
     476COMPILE_ASSERT_MATCHING_ENUM(WebReferrerPolicyOrigin, SecurityPolicy::ReferrerPolicyOrigin);
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp

    r100040 r100895  
    592592}
    593593
     594WebReferrerPolicy WebFrameImpl::referrerPolicy() const
     595{
     596    return static_cast<WebReferrerPolicy>(m_frame->document()->referrerPolicy());
     597}
     598
    594599WebSize WebFrameImpl::scrollOffset() const
    595600{
     
    10741079    else
    10751080        referrer = referrerURL.spec().utf16();
    1076     if (SecurityPolicy::shouldHideReferrer(request.url(), referrer))
     1081    referrer = SecurityPolicy::generateReferrerHeader(m_frame->document()->referrerPolicy(), request.url(), referrer);
     1082    if (referrer.isEmpty())
    10771083        return;
    10781084    request.setHTTPHeaderField(WebString::fromUTF8("Referer"), referrer);
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.h

    r100040 r100895  
    7171    virtual long long identifier() const;
    7272    virtual WebVector<WebIconURL> iconURLs(int iconTypes) const;
     73    virtual WebReferrerPolicy referrerPolicy() const;
    7374    virtual WebSize scrollOffset() const;
    7475    virtual void setScrollOffset(const WebSize&);
  • trunk/Source/WebKit/chromium/src/WebSecurityPolicy.cpp

    r99659 r100895  
    9696}
    9797
     98WebString WebSecurityPolicy::generateReferrerHeader(WebReferrerPolicy referrerPolicy, const WebURL& url, const WebString& referrer)
     99{
     100    return SecurityPolicy::generateReferrerHeader(static_cast<SecurityPolicy::ReferrerPolicy>(referrerPolicy), url, referrer);
     101}
     102
    98103void WebSecurityPolicy::registerURLSchemeAsNotAllowingJavascriptURLs(const WebString& scheme)
    99104{
  • trunk/Source/WebKit/mac/ChangeLog

    r100874 r100895  
     12011-11-21  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Implement Meta referrer
     4        https://bugs.webkit.org/show_bug.cgi?id=72674
     5
     6        Reviewed by Adam Barth.
     7
     8        * Plugins/Hosted/HostedNetscapePluginStream.mm:
     9        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
     10        * Plugins/WebNetscapePluginStream.mm:
     11        (WebNetscapePluginStream::WebNetscapePluginStream):
     12
    1132011-10-17  Antonio Gomes  <agomes@rim.com>
    214
  • trunk/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm

    r99659 r100895  
    6060    , m_frameLoader(0)
    6161{
    62     if (SecurityPolicy::shouldHideReferrer([request URL], core([instance->pluginView() webFrame])->loader()->outgoingReferrer()))
     62    String referrer = SecurityPolicy::generateReferrerHeader(core([instance->pluginView() webFrame])->document()->referrerPolicy(), [request URL], core([instance->pluginView() webFrame])->loader()->outgoingReferrer());
     63    if (referrer.isEmpty())
    6364        [m_request.get() _web_setHTTPReferrer:nil];
     65    else
     66        [m_request.get() _web_setHTTPReferrer:referrer];
    6467
    6568#ifndef NDEBUG
  • trunk/Source/WebKit/mac/Plugins/WebNetscapePluginStream.mm

    r99659 r100895  
    173173    streams().add(&m_stream, plugin);
    174174   
    175     if (SecurityPolicy::shouldHideReferrer([request URL], core([view webFrame])->loader()->outgoingReferrer()))
     175    String referrer = SecurityPolicy::generateReferrerHeader(core([view webFrame])->document()->referrerPolicy(), [request URL], core([view webFrame])->loader()->outgoingReferrer());
     176    if (referrer.isEmpty())
    176177        [m_request.get() _web_setHTTPReferrer:nil];
     178    else
     179        [m_request.get() _web_setHTTPReferrer:referrer];
    177180}
    178181
  • trunk/Source/WebKit2/ChangeLog

    r100893 r100895  
     12011-11-21  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Implement Meta referrer
     4        https://bugs.webkit.org/show_bug.cgi?id=72674
     5
     6        Reviewed by Adam Barth.
     7
     8        * WebProcess/Plugins/PluginView.cpp:
     9        (WebKit::PluginView::loadURL):
     10
    1112011-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>
    212
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp

    r99659 r100895  
    986986    frameLoadRequest.setFrameName(target);
    987987
    988     if (!SecurityPolicy::shouldHideReferrer(frameLoadRequest.resourceRequest().url(), frame()->loader()->outgoingReferrer()))
    989         frameLoadRequest.resourceRequest().setHTTPReferrer(frame()->loader()->outgoingReferrer());
     988    String referrer = SecurityPolicy::generateReferrerHeader(frame()->document()->referrerPolicy(), frameLoadRequest.resourceRequest().url(), frame()->loader()->outgoingReferrer());
     989    if (!referrer.isEmpty())
     990        frameLoadRequest.resourceRequest().setHTTPReferrer(referrer);
    990991
    991992    m_pendingURLRequests.append(URLRequest::create(requestID, frameLoadRequest, allowPopups));
Note: See TracChangeset for help on using the changeset viewer.