Changeset 234998 in webkit


Ignore:
Timestamp:
Aug 17, 2018 4:24:37 PM (6 years ago)
Author:
achristensen@apple.com
Message:

Add some plumbing for safe browsing
https://bugs.webkit.org/show_bug.cgi?id=188709

Reviewed by Tim Horton.

Source/WebCore:

No change in behavior. Just passing around unused booleans.
We will need this for a way to load a page even though safe browsing says it's unsafe.

  • WebCore.xcodeproj/project.pbxproj:
  • loader/EmptyClients.cpp:

(WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • loader/EmptyFrameLoaderClient.h:
  • loader/FrameLoadRequest.h:

(WebCore::FrameLoadRequest::setShouldSkipSafeBrowsingCheck):
(WebCore::FrameLoadRequest::shouldSkipSafeBrowsingCheck):

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::loadArchive):
(WebCore::FrameLoader::loadURL):
(WebCore::FrameLoader::load):
(WebCore::FrameLoader::loadWithNavigationAction):
(WebCore::FrameLoader::loadWithDocumentLoader):
(WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
(WebCore::FrameLoader::reloadWithOverrideEncoding):
(WebCore::FrameLoader::reload):
(WebCore::FrameLoader::loadPostRequest):
(WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
(WebCore::FrameLoader::loadDifferentDocumentItem):

  • loader/FrameLoader.h:

(WebCore::FrameLoader::loadWithDocumentLoader):
(WebCore::FrameLoader::loadWithNavigationAction):

  • loader/FrameLoaderClient.h:
  • loader/PolicyChecker.cpp:

(WebCore::PolicyChecker::checkNavigationPolicy):

  • loader/PolicyChecker.h:
  • loader/ShouldSkipSafeBrowsingCheck.h: Added.

Source/WebKit:

Also adding a URL to SafeBrowsingResult because we'll need it.
Also adding a bool to LoadParameters because we will need to do special things
when loading the safe browsing warning, like adding a way to skip the safe browsing check.

  • Shared/LoadParameters.cpp:

(WebKit::LoadParameters::encode const):
(WebKit::LoadParameters::decode):

  • Shared/LoadParameters.h:
  • UIProcess/Cocoa/SafeBrowsingResultCocoa.mm:

(WebKit::SafeBrowsingResult::SafeBrowsingResult):

  • UIProcess/Cocoa/WebPageProxyCocoa.mm:

(WebKit::WebPageProxy::beginSafeBrowsingCheck):

  • UIProcess/SafeBrowsingResult.h:

(WebKit::SafeBrowsingResult::url const):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadAlternateHTML):
(WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::decidePolicyForNavigationActionSync):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

Source/WebKitLegacy/mac:

  • WebCoreSupport/WebFrameLoaderClient.h:
  • WebCoreSupport/WebFrameLoaderClient.mm:

(WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

Source/WebKitLegacy/win:

  • WebCoreSupport/WebFrameLoaderClient.cpp:

(WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • WebCoreSupport/WebFrameLoaderClient.h:
Location:
trunk/Source
Files:
1 added
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r234995 r234998  
     12018-08-17  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add some plumbing for safe browsing
     4        https://bugs.webkit.org/show_bug.cgi?id=188709
     5
     6        Reviewed by Tim Horton.
     7
     8        No change in behavior.  Just passing around unused booleans.
     9        We will need this for a way to load a page even though safe browsing says it's unsafe.
     10
     11        * WebCore.xcodeproj/project.pbxproj:
     12        * loader/EmptyClients.cpp:
     13        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     14        * loader/EmptyFrameLoaderClient.h:
     15        * loader/FrameLoadRequest.h:
     16        (WebCore::FrameLoadRequest::setShouldSkipSafeBrowsingCheck):
     17        (WebCore::FrameLoadRequest::shouldSkipSafeBrowsingCheck):
     18        * loader/FrameLoader.cpp:
     19        (WebCore::FrameLoader::loadArchive):
     20        (WebCore::FrameLoader::loadURL):
     21        (WebCore::FrameLoader::load):
     22        (WebCore::FrameLoader::loadWithNavigationAction):
     23        (WebCore::FrameLoader::loadWithDocumentLoader):
     24        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
     25        (WebCore::FrameLoader::reloadWithOverrideEncoding):
     26        (WebCore::FrameLoader::reload):
     27        (WebCore::FrameLoader::loadPostRequest):
     28        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
     29        (WebCore::FrameLoader::loadDifferentDocumentItem):
     30        * loader/FrameLoader.h:
     31        (WebCore::FrameLoader::loadWithDocumentLoader):
     32        (WebCore::FrameLoader::loadWithNavigationAction):
     33        * loader/FrameLoaderClient.h:
     34        * loader/PolicyChecker.cpp:
     35        (WebCore::PolicyChecker::checkNavigationPolicy):
     36        * loader/PolicyChecker.h:
     37        * loader/ShouldSkipSafeBrowsingCheck.h: Added.
     38
    1392018-08-16  Ryosuke Niwa  <rniwa@webkit.org>
    240
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r234898 r234998  
    18401840                5C6E65431D5CEFBF00F7862E /* URLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6E65401D5CEDC900F7862E /* URLParser.h */; settings = {ATTRIBUTES = (Private, ); }; };
    18411841                5C7C88D81D0F1F4A009D2F6D /* SocketProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1842                5C8C600921276B870082F88F /* ShouldSkipSafeBrowsingCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C8C600721276B0F0082F88F /* ShouldSkipSafeBrowsingCheck.h */; settings = {ATTRIBUTES = (Private, ); }; };
    18421843                5CA1DEC61F71F1C700E71BD3 /* HTTPHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA1DEC41F71E68700E71BD3 /* HTTPHeaderField.h */; settings = {ATTRIBUTES = (Private, ); }; };
    18431844                5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; };
     
    86748675                5C6E65401D5CEDC900F7862E /* URLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLParser.h; sourceTree = "<group>"; };
    86758676                5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketProvider.h; sourceTree = "<group>"; };
     8677                5C8C600721276B0F0082F88F /* ShouldSkipSafeBrowsingCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShouldSkipSafeBrowsingCheck.h; sourceTree = "<group>"; };
    86768678                5C97A3361F5F7A6500105207 /* RectEdges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RectEdges.h; sourceTree = "<group>"; };
    86778679                5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkLoadMetrics.mm; sourceTree = "<group>"; };
     
    2440324405                                286E4DCB2021048800315238 /* ServerTiming.cpp */,
    2440424406                                286E4DCC2021048800315238 /* ServerTiming.h */,
     24407                                5C8C600721276B0F0082F88F /* ShouldSkipSafeBrowsingCheck.h */,
    2440524408                                8362E8BF20CEF9CB00245886 /* ShouldTreatAsContinuingLoad.h */,
    2440624409                                51327D5F11A33A2B004F9D65 /* SinkDocument.cpp */,
     
    3029930302                                834DFAD01F7DAE5D00C2725B /* SharedStringHash.h in Headers */,
    3030030303                                93309EA3099EB78C0056E581 /* SharedTimer.h in Headers */,
     30304                                5C8C600921276B870082F88F /* ShouldSkipSafeBrowsingCheck.h in Headers */,
    3030130305                                8362E8C120CEF9CB00245886 /* ShouldTreatAsContinuingLoad.h in Headers */,
    3030230306                                E48944A3180B57D800F165D8 /* SimpleLineLayout.h in Headers */,
  • trunk/Source/WebCore/loader/EmptyClients.cpp

    r232815 r234998  
    447447}
    448448
    449 void EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse&, FormState*, PolicyDecisionMode, FramePolicyFunction&&)
     449void EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse&, FormState*, PolicyDecisionMode, ShouldSkipSafeBrowsingCheck, FramePolicyFunction&&)
    450450{
    451451}
  • trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h

    r232814 r234998  
    9696    void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction&&) final { }
    9797    void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String&, FramePolicyFunction&&) final;
    98     void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse& redirectResponse, FormState*, PolicyDecisionMode, FramePolicyFunction&&) final;
     98    void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse& redirectResponse, FormState*, PolicyDecisionMode, ShouldSkipSafeBrowsingCheck, FramePolicyFunction&&) final;
    9999    void cancelPolicyCheck() final { }
    100100
  • trunk/Source/WebCore/loader/FrameLoadRequest.h

    r232730 r234998  
    2828#include "FrameLoaderTypes.h"
    2929#include "ResourceRequest.h"
     30#include "ShouldSkipSafeBrowsingCheck.h"
    3031#include "SubstituteData.h"
    3132#include <wtf/Forward.h>
     
    6465    bool shouldTreatAsContinuingLoad() const { return m_shouldTreatAsContinuingLoad; }
    6566
     67    void setShouldSkipSafeBrowsingCheck(ShouldSkipSafeBrowsingCheck skip) { m_shouldSkipSafeBrowsingCheck = skip; }
     68    ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck() { return m_shouldSkipSafeBrowsingCheck; }
     69   
    6670    const SubstituteData& substituteData() const { return m_substituteData; }
    6771    void setSubstituteData(const SubstituteData& data) { m_substituteData = data; }
     
    111115    bool m_isCrossOriginWindowOpenNavigation { false };
    112116    SystemPreviewInfo m_systemPreviewInfo;
     117    ShouldSkipSafeBrowsingCheck m_shouldSkipSafeBrowsingCheck { ShouldSkipSafeBrowsingCheck::No };
    113118};
    114119
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r234995 r234998  
    10041004    auto documentLoader = m_client.createDocumentLoader(request, substituteData);
    10051005    documentLoader->setArchive(WTFMove(archive));
    1006     load(documentLoader.ptr());
     1006    load(documentLoader.get(), ShouldSkipSafeBrowsingCheck::No);
    10071007}
    10081008
     
    14081408        request.setSystemPreviewRect(frameLoadRequest.systemPreviewRect());
    14091409#endif
    1410     loadWithNavigationAction(request, action, lockHistory, newLoadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, sameURL, newLoadType, protectedFrame = makeRef(m_frame), completionHandler = completionHandlerCaller.release()] () mutable {
     1410    loadWithNavigationAction(request, action, lockHistory, newLoadType, WTFMove(formState), allowNavigationToInvalidURL, frameLoadRequest.shouldSkipSafeBrowsingCheck(), [this, isRedirect, sameURL, newLoadType, protectedFrame = makeRef(m_frame), completionHandler = completionHandlerCaller.release()] () mutable {
    14111411        if (isRedirect) {
    14121412            m_quickRedirectComing = false;
     
    14701470
    14711471    SetForScope<bool> currentLoadShouldBeTreatedAsContinuingLoadGuard(m_currentLoadShouldBeTreatedAsContinuingLoad, request.shouldTreatAsContinuingLoad());
    1472     load(loader.ptr());
    1473 }
    1474 
    1475 void FrameLoader::loadWithNavigationAction(const ResourceRequest& request, const NavigationAction& action, LockHistory lockHistory, FrameLoadType type, RefPtr<FormState>&& formState, AllowNavigationToInvalidURL allowNavigationToInvalidURL, CompletionHandler<void()>&& completionHandler)
     1472    load(loader.get(), request.shouldSkipSafeBrowsingCheck());
     1473}
     1474
     1475void FrameLoader::loadWithNavigationAction(const ResourceRequest& request, const NavigationAction& action, LockHistory lockHistory, FrameLoadType type, RefPtr<FormState>&& formState, AllowNavigationToInvalidURL allowNavigationToInvalidURL, ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, CompletionHandler<void()>&& completionHandler)
    14761476{
    14771477    Ref<DocumentLoader> loader = m_client.createDocumentLoader(request, defaultSubstituteDataForURL(request.url()));
     
    14851485        loader->setOverrideEncoding(m_documentLoader->overrideEncoding());
    14861486
    1487     loadWithDocumentLoader(loader.ptr(), type, WTFMove(formState), allowNavigationToInvalidURL, ShouldTreatAsContinuingLoad::No, WTFMove(completionHandler));
    1488 }
    1489 
    1490 void FrameLoader::load(DocumentLoader* newDocumentLoader)
    1491 {
    1492     ResourceRequest& r = newDocumentLoader->request();
     1487    loadWithDocumentLoader(loader.ptr(), type, WTFMove(formState), allowNavigationToInvalidURL, ShouldTreatAsContinuingLoad::No, shouldSkipSafeBrowsingCheck, WTFMove(completionHandler));
     1488}
     1489
     1490void FrameLoader::load(DocumentLoader& newDocumentLoader, ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck)
     1491{
     1492    ResourceRequest& r = newDocumentLoader.request();
    14931493    addExtraFieldsToMainResourceRequest(r);
    14941494    FrameLoadType type;
    14951495
    1496     if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->originalRequest().url())) {
     1496    if (shouldTreatURLAsSameAsCurrent(newDocumentLoader.originalRequest().url())) {
    14971497        r.setCachePolicy(ResourceRequestCachePolicy::ReloadIgnoringCacheData);
    14981498        type = FrameLoadType::Same;
    1499     } else if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->unreachableURL()) && isReload(m_loadType))
     1499    } else if (shouldTreatURLAsSameAsCurrent(newDocumentLoader.unreachableURL()) && isReload(m_loadType))
    15001500        type = m_loadType;
    1501     else if (m_loadType == FrameLoadType::RedirectWithLockedBackForwardList && !newDocumentLoader->unreachableURL().isEmpty() && newDocumentLoader->substituteData().isValid())
     1501    else if (m_loadType == FrameLoadType::RedirectWithLockedBackForwardList && !newDocumentLoader.unreachableURL().isEmpty() && newDocumentLoader.substituteData().isValid())
    15021502        type = FrameLoadType::RedirectWithLockedBackForwardList;
    15031503    else
     
    15051505
    15061506    if (m_documentLoader)
    1507         newDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEncoding());
     1507        newDocumentLoader.setOverrideEncoding(m_documentLoader->overrideEncoding());
    15081508   
    15091509    // When we loading alternate content for an unreachable URL that we're
     
    15151515    // "load without affecting history" ?
    15161516    if (shouldReloadToHandleUnreachableURL(newDocumentLoader)) {
    1517         // shouldReloadToHandleUnreachableURL() returns true only when the original load type is back-forward.
     1517        // shouldReloadToHandleUnreachableURL returns true only when the original load type is back-forward.
    15181518        // In this case we should save the document state now. Otherwise the state can be lost because load type is
    15191519        // changed and updateForBackForwardNavigation() will not be called when loading is committed.
     
    15241524    }
    15251525
    1526     loadWithDocumentLoader(newDocumentLoader, type, { }, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No, [] { });
    1527 }
    1528 
    1529 void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, RefPtr<FormState>&& formState, AllowNavigationToInvalidURL allowNavigationToInvalidURL, ShouldTreatAsContinuingLoad, CompletionHandler<void()>&& completionHandler)
     1526    loadWithDocumentLoader(&newDocumentLoader, type, nullptr, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No, shouldSkipSafeBrowsingCheck);
     1527}
     1528
     1529void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, RefPtr<FormState>&& formState, AllowNavigationToInvalidURL allowNavigationToInvalidURL, ShouldTreatAsContinuingLoad, ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, CompletionHandler<void()>&& completionHandler)
    15301530{
    15311531    // Retain because dispatchBeforeLoadEvent may release the last reference to it.
     
    16061606        continueLoadAfterNavigationPolicy(request, formState.get(), shouldContinue, allowNavigationToInvalidURL);
    16071607        completionHandler();
    1608     });
     1608    }, PolicyDecisionMode::Asynchronous, shouldSkipSafeBrowsingCheck);
    16091609}
    16101610
     
    16711671}
    16721672
    1673 bool FrameLoader::shouldReloadToHandleUnreachableURL(DocumentLoader* docLoader)
    1674 {
    1675     URL unreachableURL = docLoader->unreachableURL();
     1673bool FrameLoader::shouldReloadToHandleUnreachableURL(DocumentLoader& docLoader)
     1674{
     1675    URL unreachableURL = docLoader.unreachableURL();
    16761676
    16771677    if (unreachableURL.isEmpty())
     
    17131713    loader->setOverrideEncoding(encoding);
    17141714
    1715     loadWithDocumentLoader(loader.ptr(), FrameLoadType::Reload, { }, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No, [] { });
     1715    loadWithDocumentLoader(loader.ptr(), FrameLoadType::Reload, { }, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No);
    17161716}
    17171717
     
    17601760    };
    17611761   
    1762     loadWithDocumentLoader(loader.ptr(), frameLoadTypeForReloadOptions(options), { }, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No, [] { });
     1762    loadWithDocumentLoader(loader.ptr(), frameLoadTypeForReloadOptions(options), { }, AllowNavigationToInvalidURL::Yes, ShouldTreatAsContinuingLoad::No);
    17631763}
    17641764
     
    29192919        // The search for a target frame is done earlier in the case of form submission.
    29202920        if (auto* targetFrame = formState ? nullptr : findFrameForNavigation(frameName)) {
    2921             targetFrame->loader().loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, WTFMove(completionHandler));
     2921            targetFrame->loader().loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, ShouldSkipSafeBrowsingCheck::No, WTFMove(completionHandler));
    29222922            return;
    29232923        }
     
    29322932    // must grab this now, since this load may stop the previous load and clear this flag
    29332933    bool isRedirect = m_quickRedirectComing;
    2934     loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] () mutable {
     2934    loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, request.shouldSkipSafeBrowsingCheck(), [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] () mutable {
    29352935        if (isRedirect) {
    29362936            m_quickRedirectComing = false;
     
    33943394
    33953395    NavigationAction newAction { *frame->document(), request, InitiatedByMainFrame::Unknown, NavigationType::Other, action.shouldOpenExternalURLsPolicy() };
    3396     mainFrame->loader().loadWithNavigationAction(request, newAction, LockHistory::No, FrameLoadType::Standard, formState, allowNavigationToInvalidURL, [] { });
     3396    mainFrame->loader().loadWithNavigationAction(request, newAction, LockHistory::No, FrameLoadType::Standard, formState, allowNavigationToInvalidURL);
    33973397}
    33983398
     
    35903590
    35913591        documentLoader->setLastCheckedRequest(ResourceRequest());
    3592         loadWithDocumentLoader(documentLoader, loadType, { }, AllowNavigationToInvalidURL::Yes, shouldTreatAsContinuingLoad, [] { });
     3592        loadWithDocumentLoader(documentLoader, loadType, { }, AllowNavigationToInvalidURL::Yes, shouldTreatAsContinuingLoad);
    35933593        return;
    35943594    }
     
    36783678    action.setTargetBackForwardItem(item);
    36793679
    3680     loadWithNavigationAction(request, action, LockHistory::No, loadType, { }, AllowNavigationToInvalidURL::Yes, [] { });
     3680    loadWithNavigationAction(request, action, LockHistory::No, loadType, { }, AllowNavigationToInvalidURL::Yes);
    36813681}
    36823682
  • trunk/Source/WebCore/loader/FrameLoader.h

    r233374 r234998  
    4242#include "ResourceRequestBase.h"
    4343#include "SecurityContext.h"
     44#include "ShouldSkipSafeBrowsingCheck.h"
    4445#include "StoredCredentialsPolicy.h"
    4546#include "Timer.h"
     47#include <wtf/CompletionHandler.h>
    4648#include <wtf/Forward.h>
    4749#include <wtf/HashSet.h>
     
    362364    void willRestoreFromCachedPage();
    363365
    364     bool shouldReloadToHandleUnreachableURL(DocumentLoader*);
     366    bool shouldReloadToHandleUnreachableURL(DocumentLoader&);
    365367
    366368    void dispatchDidCommitLoad(std::optional<HasInsecureContent> initialHasInsecureContent);
     
    368370    void urlSelected(FrameLoadRequest&&, Event*);
    369371
    370     void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, RefPtr<FormState>&&, AllowNavigationToInvalidURL, ShouldTreatAsContinuingLoad, CompletionHandler<void()>&&); // Calls continueLoadAfterNavigationPolicy
    371     void load(DocumentLoader*); // Calls loadWithDocumentLoader
    372 
    373     void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, LockHistory, FrameLoadType, RefPtr<FormState>&&, AllowNavigationToInvalidURL, CompletionHandler<void()>&&); // Calls loadWithDocumentLoader
     372    void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, RefPtr<FormState>&&, AllowNavigationToInvalidURL, ShouldTreatAsContinuingLoad, ShouldSkipSafeBrowsingCheck = ShouldSkipSafeBrowsingCheck::No, CompletionHandler<void()>&& = [] { }); // Calls continueLoadAfterNavigationPolicy
     373    void load(DocumentLoader&, ShouldSkipSafeBrowsingCheck); // Calls loadWithDocumentLoader
     374
     375    void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, LockHistory, FrameLoadType, RefPtr<FormState>&&, AllowNavigationToInvalidURL, ShouldSkipSafeBrowsingCheck = ShouldSkipSafeBrowsingCheck::No, CompletionHandler<void()>&& = [] { }); // Calls loadWithDocumentLoader
    374376
    375377    void loadPostRequest(FrameLoadRequest&&, const String& referrer, FrameLoadType, Event*, RefPtr<FormState>&&, CompletionHandler<void()>&&);
  • trunk/Source/WebCore/loader/FrameLoaderClient.h

    r233782 r234998  
    105105
    106106enum class PolicyDecisionMode;
     107enum class ShouldSkipSafeBrowsingCheck;
     108
    107109struct StringWithDirection;
    108110
     
    192194    virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction&&) = 0;
    193195    virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String& frameName, FramePolicyFunction&&) = 0;
    194     virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse& redirectResponse, FormState*, PolicyDecisionMode, FramePolicyFunction&&) = 0;
     196    virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse& redirectResponse, FormState*, PolicyDecisionMode, ShouldSkipSafeBrowsingCheck, FramePolicyFunction&&) = 0;
    195197    virtual void cancelPolicyCheck() = 0;
    196198
  • trunk/Source/WebCore/loader/PolicyChecker.cpp

    r234995 r234998  
    9999}
    100100
    101 void PolicyChecker::checkNavigationPolicy(ResourceRequest&& request, const ResourceResponse& redirectResponse, DocumentLoader* loader, RefPtr<FormState>&& formState, NavigationPolicyDecisionFunction&& function, PolicyDecisionMode policyDecisionMode)
     101void PolicyChecker::checkNavigationPolicy(ResourceRequest&& request, const ResourceResponse& redirectResponse, DocumentLoader* loader, RefPtr<FormState>&& formState, NavigationPolicyDecisionFunction&& function, PolicyDecisionMode policyDecisionMode, ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck)
    102102{
    103103    NavigationAction action = loader->triggeringAction();
     
    169169    m_delegateIsDecidingNavigationPolicy = true;
    170170    String suggestedFilename = action.downloadAttribute().isEmpty() ? nullAtom() : action.downloadAttribute();
    171     m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, redirectResponse, formState.get(), policyDecisionMode, [this, function = WTFMove(function), request = ResourceRequest(request), formState = WTFMove(formState), suggestedFilename = WTFMove(suggestedFilename), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable {
     171    m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, redirectResponse, formState.get(), policyDecisionMode, shouldSkipSafeBrowsingCheck, [this, function = WTFMove(function), request = ResourceRequest(request), formState = WTFMove(formState), suggestedFilename = WTFMove(suggestedFilename), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable {
    172172        m_delegateIsDecidingNavigationPolicy = false;
    173173
  • trunk/Source/WebCore/loader/PolicyChecker.h

    r232814 r234998  
    3232#include "FrameLoaderTypes.h"
    3333#include "ResourceRequest.h"
     34#include "ShouldSkipSafeBrowsingCheck.h"
    3435#include <wtf/WeakPtr.h>
    3536#include <wtf/text/WTFString.h>
     
    7071    explicit PolicyChecker(Frame&);
    7172
    72     void checkNavigationPolicy(ResourceRequest&&, const ResourceResponse& redirectResponse, DocumentLoader*, RefPtr<FormState>&&, NavigationPolicyDecisionFunction&&, PolicyDecisionMode = PolicyDecisionMode::Asynchronous);
     73    void checkNavigationPolicy(ResourceRequest&&, const ResourceResponse& redirectResponse, DocumentLoader*, RefPtr<FormState>&&, NavigationPolicyDecisionFunction&&, PolicyDecisionMode = PolicyDecisionMode::Asynchronous, ShouldSkipSafeBrowsingCheck = ShouldSkipSafeBrowsingCheck::No);
    7374    void checkNavigationPolicy(ResourceRequest&&, const ResourceResponse& redirectResponse, NavigationPolicyDecisionFunction&&);
    7475    void checkNewWindowPolicy(NavigationAction&&, ResourceRequest&&, RefPtr<FormState>&&, const String& frameName, NewWindowPolicyDecisionFunction&&);
  • trunk/Source/WebKit/ChangeLog

    r234995 r234998  
     12018-08-17  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add some plumbing for safe browsing
     4        https://bugs.webkit.org/show_bug.cgi?id=188709
     5
     6        Reviewed by Tim Horton.
     7
     8        Also adding a URL to SafeBrowsingResult because we'll need it.
     9        Also adding a bool to LoadParameters because we will need to do special things
     10        when loading the safe browsing warning, like adding a way to skip the safe browsing check.
     11
     12        * Shared/LoadParameters.cpp:
     13        (WebKit::LoadParameters::encode const):
     14        (WebKit::LoadParameters::decode):
     15        * Shared/LoadParameters.h:
     16        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm:
     17        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
     18        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
     19        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
     20        * UIProcess/SafeBrowsingResult.h:
     21        (WebKit::SafeBrowsingResult::url const):
     22        * UIProcess/WebPageProxy.cpp:
     23        (WebKit::WebPageProxy::loadAlternateHTML):
     24        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
     25        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
     26        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
     27        * UIProcess/WebPageProxy.h:
     28        * UIProcess/WebPageProxy.messages.in:
     29        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     30        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     31        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
     32
    1332018-08-16  Ryosuke Niwa  <rniwa@webkit.org>
    234
  • trunk/Source/WebKit/Shared/LoadParameters.cpp

    r234985 r234998  
    5050    encoder << shouldTreatAsContinuingLoad;
    5151    encoder << userData;
     52    encoder << forSafeBrowsing;
    5253
    5354    platformEncode(encoder);
     
    106107        return false;
    107108
     109    if (!decoder.decode(data.forSafeBrowsing))
     110        return false;
     111   
    108112    if (!platformDecode(decoder, data))
    109113        return false;
  • trunk/Source/WebKit/Shared/LoadParameters.h

    r234985 r234998  
    6363    bool shouldTreatAsContinuingLoad { false };
    6464    UserData userData;
     65    bool forSafeBrowsing { false };
    6566
    6667#if PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/Cocoa/SafeBrowsingResultCocoa.mm

    r234640 r234998  
    3232
    3333#if HAVE(SAFE_BROWSING)
    34 SafeBrowsingResult::SafeBrowsingResult(SSBServiceLookupResult *result)
    35     : m_provider([result provider])
     34SafeBrowsingResult::SafeBrowsingResult(WebCore::URL&& url, SSBServiceLookupResult *result)
     35    : m_url(WTFMove(url))
     36    , m_provider([result provider])
    3637    , m_isPhishing([result isPhishing])
    3738    , m_isMalware([result isMalware])
  • trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm

    r234739 r234998  
    7878    if (!context)
    7979        return listener.didReceiveSafeBrowsingResults({ });
    80     [context lookUpURL:url completionHandler:BlockPtr<void(SSBLookupResult *, NSError *)>::fromCallable([listener = makeRef(listener)] (SSBLookupResult *result, NSError *error) mutable {
    81         RunLoop::main().dispatch([listener = WTFMove(listener), result = retainPtr(result), error = retainPtr(error)] {
     80    [context lookUpURL:url completionHandler:BlockPtr<void(SSBLookupResult *, NSError *)>::fromCallable([listener = makeRef(listener), url = url] (SSBLookupResult *result, NSError *error) mutable {
     81        RunLoop::main().dispatch([listener = WTFMove(listener), result = retainPtr(result), error = retainPtr(error), url = WTFMove(url)] {
    8282            if (error) {
    8383                listener->didReceiveSafeBrowsingResults({ });
     
    8989            resultsVector.reserveInitialCapacity([results count]);
    9090            for (SSBServiceLookupResult *result in results)
    91                 resultsVector.uncheckedAppend({ result });
     91                resultsVector.uncheckedAppend({ URL(url), result });
    9292            listener->didReceiveSafeBrowsingResults(WTFMove(resultsVector));
    9393        });
  • trunk/Source/WebKit/UIProcess/SafeBrowsingResult.h

    r234640 r234998  
    2626#pragma once
    2727
     28#include <WebCore/URL.h>
    2829#include <wtf/text/WTFString.h>
    2930
     
    3536public:
    3637#if HAVE(SAFE_BROWSING)
    37     SafeBrowsingResult(SSBServiceLookupResult *);
     38    SafeBrowsingResult(WebCore::URL&&, SSBServiceLookupResult *);
    3839#endif
    3940    SafeBrowsingResult() = default;
    4041
     42    const WebCore::URL& url() const { return m_url; }
    4143    const String& provider() const { return m_provider; }
    4244    bool isPhishing() const { return m_isPhishing; }
     
    4648
    4749private:
     50    WebCore::URL m_url;
    4851    String m_provider;
    4952    bool m_isPhishing { false };
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r234985 r234998  
    147147#include <WebCore/SerializedCryptoKeyWrap.h>
    148148#include <WebCore/SharedBuffer.h>
     149#include <WebCore/ShouldSkipSafeBrowsingCheck.h>
    149150#include <WebCore/ShouldTreatAsContinuingLoad.h>
    150151#include <WebCore/TextCheckerClient.h>
     
    10801081}
    10811082
    1082 void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const String& encoding, const WebCore::URL& baseURL, const WebCore::URL& unreachableURL, API::Object* userData)
     1083void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const String& encoding, const WebCore::URL& baseURL, const WebCore::URL& unreachableURL, API::Object* userData, bool forSafeBrowsing)
    10831084{
    10841085    // When the UIProcess is in the process of handling a failing provisional load, do not attempt to
     
    11111112    loadParameters.provisionalLoadErrorURLString = m_failingProvisionalLoadURL;
    11121113    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
     1114    loadParameters.forSafeBrowsing = forSafeBrowsing;
    11131115    addPlatformLoadParameters(loadParameters);
    11141116
     
    39693971#endif
    39703972
    3971 void WebPageProxy::decidePolicyForNavigationActionAsync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, uint64_t listenerID)
    3972 {
    3973     decidePolicyForNavigationAction(frameID, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(redirectResponse), userData, PolicyDecisionSender::create([this, protectedThis = makeRef(*this), frameID, listenerID] (auto... args) {
     3973void WebPageProxy::decidePolicyForNavigationActionAsync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, uint64_t listenerID)
     3974{
     3975    decidePolicyForNavigationAction(frameID, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, PolicyDecisionSender::create([this, protectedThis = makeRef(*this), frameID, listenerID] (auto... args) {
    39743976        m_process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...), m_pageID);
    39753977    }));
    39763978}
    39773979
    3978 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, Ref<PolicyDecisionSender>&& sender)
     3980void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Ref<PolicyDecisionSender>&& sender)
    39793981{
    39803982    LOG(Loading, "WebPageProxy::decidePolicyForNavigationAction - Original URL %s, current target URL %s", originalRequest.url().string().utf8().data(), request.url().string().utf8().data());
     
    40534055
    40544056        receivedPolicyDecision(policyAction, navigation.get(), WTFMove(data), WTFMove(sender));
    4055     }, ShouldExpectSafeBrowsingResult::Yes));
    4056     beginSafeBrowsingCheck(request.url(), listener);
     4057    }, shouldSkipSafeBrowsingCheck == ShouldSkipSafeBrowsingCheck::Yes ? ShouldExpectSafeBrowsingResult::No : ShouldExpectSafeBrowsingResult::Yes));
     4058    if (shouldSkipSafeBrowsingCheck == ShouldSkipSafeBrowsingCheck::No)
     4059        beginSafeBrowsingCheck(request.url(), listener);
    40574060
    40584061    API::Navigation* mainFrameNavigation = frame->isMainFrame() ? navigation.get() : nullptr;
     
    40824085}
    40834086
    4084 void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&& reply)
     4087void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&& reply)
    40854088{
    40864089    auto sender = PolicyDecisionSender::create(WTFMove(reply));
    40874090   
    4088     decidePolicyForNavigationAction(frameID, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(redirectResponse), userData, sender.copyRef());
     4091    decidePolicyForNavigationAction(frameID, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, sender.copyRef());
    40894092
    40904093    // If the client did not respond synchronously, proceed with the load.
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r234985 r234998  
    458458    RefPtr<API::Navigation> loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
    459459    RefPtr<API::Navigation> loadData(const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr);
    460     void loadAlternateHTML(const IPC::DataReference&, const String& encoding, const WebCore::URL& baseURL, const WebCore::URL& unreachableURL, API::Object* userData = nullptr);
     460    void loadAlternateHTML(const IPC::DataReference&, const String& encoding, const WebCore::URL& baseURL, const WebCore::URL& unreachableURL, API::Object* userData = nullptr, bool forSafeBrowsing = false);
    461461    void loadWebArchiveData(API::Data*, API::Object* userData = nullptr);
    462462    void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
     
    14261426    void didDestroyNavigation(uint64_t navigationID);
    14271427
    1428     void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, Ref<PolicyDecisionSender>&&);
    1429     void decidePolicyForNavigationActionAsync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, uint64_t listenerID);
    1430     void decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&&);
     1428    void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, WebCore::ShouldSkipSafeBrowsingCheck, Ref<PolicyDecisionSender>&&);
     1429    void decidePolicyForNavigationActionAsync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, WebCore::ShouldSkipSafeBrowsingCheck, uint64_t listenerID);
     1430    void decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, const UserData&, WebCore::ShouldSkipSafeBrowsingCheck, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&&);
    14311431    void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, NavigationActionData&&, WebCore::ResourceRequest&&, const String& frameName, uint64_t listenerID, const UserData&);
    14321432    void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in

    r234375 r234998  
    107107    # Policy messages
    108108    DecidePolicyForResponse(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData)
    109     DecidePolicyForNavigationActionAsync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData, uint64_t listenerID)
    110     DecidePolicyForNavigationActionSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData) -> (enum WebCore::PolicyAction policyAction, uint64_t newNavigationID, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies) Delayed
     109    DecidePolicyForNavigationActionAsync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData, enum WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, uint64_t listenerID)
     110    DecidePolicyForNavigationActionSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData, enum WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck) -> (enum WebCore::PolicyAction policyAction, uint64_t newNavigationID, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies) Delayed
    111111    DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
    112112    UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData)
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r234375 r234998  
    814814}
    815815
    816 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& navigationAction, const ResourceRequest& request, const ResourceResponse& redirectResponse, FormState* formState, PolicyDecisionMode policyDecisionMode, FramePolicyFunction&& function)
     816void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& navigationAction, const ResourceRequest& request, const ResourceResponse& redirectResponse, FormState* formState, PolicyDecisionMode policyDecisionMode, ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, FramePolicyFunction&& function)
    817817{
    818818    WebPage* webPage = m_frame ? m_frame->page() : nullptr;
     
    893893        std::optional<WebsitePoliciesData> websitePolicies;
    894894
    895         if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationActionSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationActionSync::Reply(policyAction, newNavigationID, downloadID, websitePolicies))) {
     895        if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationActionSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()), shouldSkipSafeBrowsingCheck), Messages::WebPageProxy::DecidePolicyForNavigationActionSync::Reply(policyAction, newNavigationID, downloadID, websitePolicies))) {
    896896            m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
    897897            return;
     
    903903
    904904    ASSERT(policyDecisionMode == PolicyDecisionMode::Asynchronous);
    905     if (!webPage->send(Messages::WebPageProxy::DecidePolicyForNavigationActionAsync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()), listenerID)))
     905    if (!webPage->send(Messages::WebPageProxy::DecidePolicyForNavigationActionAsync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()), shouldSkipSafeBrowsingCheck, listenerID)))
    906906        m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
    907907}
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h

    r233782 r234998  
    126126    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) final;
    127127    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const String& frameName, WebCore::FramePolicyFunction&&) final;
    128     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) final;
     128    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::ShouldSkipSafeBrowsingCheck, WebCore::FramePolicyFunction&&) final;
    129129    void cancelPolicyCheck() final;
    130130   
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r234995 r234998  
     12018-08-17  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add some plumbing for safe browsing
     4        https://bugs.webkit.org/show_bug.cgi?id=188709
     5
     6        Reviewed by Tim Horton.
     7
     8        * WebCoreSupport/WebFrameLoaderClient.h:
     9        * WebCoreSupport/WebFrameLoaderClient.mm:
     10        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     11
    1122018-08-16  Ryosuke Niwa  <rniwa@webkit.org>
    213
  • trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h

    r232814 r234998  
    129129    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) final;
    130130    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const WTF::String& frameName, WebCore::FramePolicyFunction&&) final;
    131     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) final;
     131    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::ShouldSkipSafeBrowsingCheck, WebCore::FramePolicyFunction&&) final;
    132132    void cancelPolicyCheck() final;
    133133
  • trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm

    r234808 r234998  
    902902}
    903903
    904 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, const ResourceResponse&, FormState* formState, PolicyDecisionMode, FramePolicyFunction&& function)
     904void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, const ResourceResponse&, FormState* formState, PolicyDecisionMode, WebCore::ShouldSkipSafeBrowsingCheck, FramePolicyFunction&& function)
    905905{
    906906    WebView *webView = getWebView(m_webFrame.get());
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r234501 r234998  
     12018-08-17  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add some plumbing for safe browsing
     4        https://bugs.webkit.org/show_bug.cgi?id=188709
     5
     6        Reviewed by Tim Horton.
     7
     8        * WebCoreSupport/WebFrameLoaderClient.cpp:
     9        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     10        * WebCoreSupport/WebFrameLoaderClient.h:
     11
    1122018-08-02  David Fenton  <david_fenton@apple.com>
    213
  • trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp

    r232814 r234998  
    566566}
    567567
    568 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, const ResourceResponse&, FormState* formState, WebCore::PolicyDecisionMode, FramePolicyFunction&& function)
     568void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, const ResourceResponse&, FormState* formState, WebCore::PolicyDecisionMode, WebCore::ShouldSkipSafeBrowsingCheck, FramePolicyFunction&& function)
    569569{
    570570    WebView* webView = m_webFrame->webView();
  • trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h

    r232814 r234998  
    103103    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) override;
    104104    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const WTF::String& frameName, WebCore::FramePolicyFunction&&) override;
    105     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) override;
     105    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::ShouldSkipSafeBrowsingCheck, WebCore::FramePolicyFunction&&) override;
    106106    void cancelPolicyCheck() override;
    107107
Note: See TracChangeset for help on using the changeset viewer.