Changeset 95369 in webkit


Ignore:
Timestamp:
Sep 16, 2011 10:52:07 PM (13 years ago)
Author:
jochen@chromium.org
Message:

Source/WebCore: Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
https://bugs.webkit.org/show_bug.cgi?id=68071

This will allow embedders to block images based on where the image is loaded from, instead of just blocking all images in a given frame.

Reviewed by Adam Barth.

  • html/ImageDocument.cpp:

(WebCore::ImageDocumentParser::appendBytes):

  • loader/FrameLoaderClient.h:

(WebCore::FrameLoaderClient::allowImage):

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::requestImage):

Source/WebKit/chromium: Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
https://bugs.webkit.org/show_bug.cgi?id=68071

Reviewed by Adam Barth.

  • public/WebPermissionClient.h:

(WebKit::WebPermissionClient::allowImage):

  • src/FrameLoaderClientImpl.cpp:

(WebKit::FrameLoaderClientImpl::allowImage):

  • src/FrameLoaderClientImpl.h:

Tools: Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
https://bugs.webkit.org/show_bug.cgi?id=68071

Reviewed by Adam Barth.

  • DumpRenderTree/chromium/WebPermissions.cpp:

(WebPermissions::allowImage):

  • DumpRenderTree/chromium/WebPermissions.h:

LayoutTests: Add tests for FrameLoaderClient::allowImage.
https://bugs.webkit.org/show_bug.cgi?id=68071

Reviewed by Adam Barth.

  • http/tests/permissionclient/resources/bostin.gif:
  • http/tests/permissionclient/resources/redir.php:
  • platform/chromium/permissionclient/image-permissions-expected.txt:
  • platform/chromium/permissionclient/image-permissions.html:
  • platform/http/tests/permissionclient/image-permissions-expected.txt:
  • platform/http/tests/permissionclient/image-permissions.html:
Location:
trunk
Files:
7 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r95366 r95369  
     12011-09-16  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Add tests for FrameLoaderClient::allowImage.
     4        https://bugs.webkit.org/show_bug.cgi?id=68071
     5
     6        Reviewed by Adam Barth.
     7
     8        * http/tests/permissionclient/resources/bostin.gif:
     9        * http/tests/permissionclient/resources/redir.php:
     10        * platform/chromium/permissionclient/image-permissions-expected.txt:
     11        * platform/chromium/permissionclient/image-permissions.html:
     12        * platform/http/tests/permissionclient/image-permissions-expected.txt:
     13        * platform/http/tests/permissionclient/image-permissions.html:
     14
    1152011-09-16  Tom Sepez  <tsepez@chromium.org>
    216
  • trunk/LayoutTests/platform/chromium/permissionclient/image-permissions-expected.txt

    r87860 r95369  
     1PERMISSION CLIENT: allowImage((file test):platform/chromium/permissionclient/resources/boston.gif): true
     2PERMISSION CLIENT: allowImage((file test):platform/chromium/permissionclient/resources/boston.gif?nocache): false
     3PERMISSION CLIENT: allowImage((file test):platform/chromium/permissionclient/resources/boston.gif): false
     4PERMISSION CLIENT: allowImage((file test):platform/chromium/permissionclient/resources/boston.gif): false
    15
    26
  • trunk/LayoutTests/platform/chromium/permissionclient/image-permissions.html

    r87860 r95369  
    22<head>
    33<script>
    4 if (window.layoutTestController)
     4if (window.layoutTestController) {
    55    layoutTestController.dumpAsText();
     6    layoutTestController.dumpPermissionClientCallbacks();
     7}
    68
    79function log(a)
  • trunk/Source/WebCore/ChangeLog

    r95366 r95369  
     12011-09-16  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=68071
     5
     6        This will allow embedders to block images based on where the image is loaded from, instead of just blocking all images in a given frame.
     7
     8        Reviewed by Adam Barth.
     9
     10        * html/ImageDocument.cpp:
     11        (WebCore::ImageDocumentParser::appendBytes):
     12        * loader/FrameLoaderClient.h:
     13        (WebCore::FrameLoaderClient::allowImage):
     14        * loader/cache/CachedResourceLoader.cpp:
     15        (WebCore::CachedResourceLoader::requestImage):
     16
    1172011-09-16  Tom Sepez  <tsepez@chromium.org>
    218
  • trunk/Source/WebCore/html/ImageDocument.cpp

    r93279 r95369  
    129129    Frame* frame = document()->frame();
    130130    Settings* settings = frame->settings();
    131     if (!frame->loader()->client()->allowImages(!settings || settings->areImagesEnabled()))
     131    if (!frame->loader()->client()->allowImage(!settings || settings->areImagesEnabled(), document()->url()))
    132132        return;
    133133
  • trunk/Source/WebCore/loader/FrameLoaderClient.h

    r93066 r95369  
    303303        virtual bool allowJavaScript(bool enabledPerSettings) { return enabledPerSettings; }
    304304        virtual bool allowPlugins(bool enabledPerSettings) { return enabledPerSettings; }
    305         virtual bool allowImages(bool enabledPerSettings) { return enabledPerSettings; }
     305        virtual bool allowImage(bool enabledPerSettings, const KURL&) { return enabledPerSettings; }
    306306        virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; }
    307307        virtual bool allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; }
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r94003 r95369  
    127127{
    128128    if (Frame* f = frame()) {
    129         Settings* settings = f->settings();
    130         if (!f->loader()->client()->allowImages(!settings || settings->areImagesEnabled()))
    131             return 0;
    132 
    133129        if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoDismissal) {
    134130            KURL requestURL = request.url();
     
    296292        if (!m_document->contentSecurityPolicy()->allowImageFromSource(url))
    297293            return false;
     294
     295        if (frame()) {
     296            Settings* settings = frame()->settings();
     297            if (!frame()->loader()->client()->allowImage(!settings || settings->areImagesEnabled(), url))
     298                return false;
     299        }
    298300        break;
    299301    case CachedResource::FontResource: {
  • trunk/Source/WebKit/chromium/ChangeLog

    r95368 r95369  
     12011-09-16  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=68071
     5
     6        Reviewed by Adam Barth.
     7
     8        * public/WebPermissionClient.h:
     9        (WebKit::WebPermissionClient::allowImage):
     10        * src/FrameLoaderClientImpl.cpp:
     11        (WebKit::FrameLoaderClientImpl::allowImage):
     12        * src/FrameLoaderClientImpl.h:
     13
    1142011-09-16  Dmitry Lomov  <dslomov@google.com>
    215
  • trunk/Source/WebKit/chromium/public/WebPermissionClient.h

    r88377 r95369  
    4848
    4949    // Controls whether images are allowed for this frame.
     50    virtual bool allowImage(WebFrame* frame, bool enabledPerSettings, const WebURL& imageURL) { return allowImages(frame, enabledPerSettings); }
     51    // FIXME: remove once chromium side has landed.
    5052    virtual bool allowImages(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
    5153
  • trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp

    r95204 r95369  
    203203}
    204204
    205 bool FrameLoaderClientImpl::allowImages(bool enabledPerSettings)
     205bool FrameLoaderClientImpl::allowImage(bool enabledPerSettings, const KURL& imageURL)
    206206{
    207207    WebViewImpl* webview = m_webFrame->viewImpl();
    208208    if (webview && webview->permissionClient())
    209         return webview->permissionClient()->allowImages(m_webFrame, enabledPerSettings);
     209        return webview->permissionClient()->allowImage(m_webFrame, enabledPerSettings, imageURL);
    210210
    211211    return enabledPerSettings;
  • trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.h

    r93066 r95369  
    208208    virtual bool allowJavaScript(bool enabledPerSettings);
    209209    virtual bool allowPlugins(bool enabledPerSettings);
    210     virtual bool allowImages(bool enabledPerSettings);
     210    virtual bool allowImage(bool enabledPerSettings, const WebCore::KURL& imageURL);
    211211    virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, WebCore::SecurityOrigin*, const WebCore::KURL&);
    212212    virtual bool allowRunningInsecureContent(bool enabledPerSettings, WebCore::SecurityOrigin*, const WebCore::KURL&);
  • trunk/Tools/ChangeLog

    r95363 r95369  
     12011-09-16  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=68071
     5
     6        Reviewed by Adam Barth.
     7
     8        * DumpRenderTree/chromium/WebPermissions.cpp:
     9        (WebPermissions::allowImage):
     10        * DumpRenderTree/chromium/WebPermissions.h:
     11
    1122011-09-16  Tom Zakrajsek  <tomz@codeaurora.org>
    213
  • trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp

    r94862 r95369  
    112112    bindMethod("dumpStatusCallbacks", &LayoutTestController::dumpWindowStatusChanges);
    113113    bindMethod("dumpTitleChanges", &LayoutTestController::dumpTitleChanges);
     114    bindMethod("dumpPermissionClientCallbacks", &LayoutTestController::dumpPermissionClientCallbacks);
    114115    bindMethod("elementDoesAutoCompleteForElementWithId", &LayoutTestController::elementDoesAutoCompleteForElementWithId);
    115116    bindMethod("evaluateInWebInspector", &LayoutTestController::evaluateInWebInspector);
     
    378379}
    379380
     381void LayoutTestController::dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant* result)
     382{
     383    m_dumpPermissionClientCallbacks = true;
     384    result->setNull();
     385}
     386
    380387void LayoutTestController::setAcceptsEditing(const CppArgumentList& arguments, CppVariant* result)
    381388{
     
    600607    m_dumpSelectionRect = false;
    601608    m_dumpTitleChanges = false;
     609    m_dumpPermissionClientCallbacks = false;
    602610    m_generatePixelResults = true;
    603611    m_acceptsEditing = true;
  • trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h

    r94779 r95369  
    392392    void setStorageAllowed(const CppArgumentList&, CppVariant*);
    393393    void setPluginsAllowed(const CppArgumentList&, CppVariant*);
     394    void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*);
    394395
    395396    // Enable or disable plugins.
     
    431432    bool shouldDumpBackForwardList() { return m_dumpBackForwardList; }
    432433    bool shouldDumpTitleChanges() { return m_dumpTitleChanges; }
     434    bool shouldDumpPermissionClientCallbacks() { return m_dumpPermissionClientCallbacks; }
    433435    bool shouldDumpChildFrameScrollPositions() { return m_dumpChildFrameScrollPositions; }
    434436    bool shouldDumpChildFramesAsText() { return m_dumpChildFramesAsText; }
     
    588590    bool m_dumpTitleChanges;
    589591
     592    // If true, output a descriptive line each time a permission client
     593    // callback is invoked. Currently only implemented for allowImage.
     594    bool m_dumpPermissionClientCallbacks;
     595
    590596    // If true, the test_shell will generate pixel results in dumpAsText mode
    591597    bool m_generatePixelResults;
  • trunk/Tools/DumpRenderTree/chromium/TestShell.cpp

    r95180 r95369  
    122122    WebRuntimeFeatures::enableWebAudio(true);
    123123
    124     m_webPermissions = adoptPtr(new WebPermissions());
     124    m_webPermissions = adoptPtr(new WebPermissions(this));
    125125    m_accessibilityController = adoptPtr(new AccessibilityController(this));
    126126    m_layoutTestController = adoptPtr(new LayoutTestController(this));
  • trunk/Tools/DumpRenderTree/chromium/WebPermissions.cpp

    r92219 r95369  
    3232#include "WebPermissions.h"
    3333
    34 WebPermissions::WebPermissions()
     34#include "LayoutTestController.h"
     35#include "TestShell.h"
     36#include "WebCString.h"
     37#include "WebURL.h"
     38
     39WebPermissions::WebPermissions(TestShell* shell)
     40    : m_shell(shell)
    3541{
    3642    reset();
     
    4147}
    4248
    43 bool WebPermissions::allowImages(WebKit::WebFrame*, bool enabledPerSettings)
     49bool WebPermissions::allowImage(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& imageURL)
    4450{
    45     return enabledPerSettings && m_imagesAllowed;
     51    bool allowed = enabledPerSettings && m_imagesAllowed;
     52    if (layoutTestController()->shouldDumpPermissionClientCallbacks())
     53        fprintf(stdout, "PERMISSION CLIENT: allowImage(%s): %s\n", m_shell->normalizeLayoutTestURL(imageURL.spec()).c_str(), allowed ? "true" : "false");
     54    return allowed;
    4655}
    4756
     
    6170    return enabledPerSettings || m_displayingInsecureContentAllowed;
    6271}
    63  
     72
    6473bool WebPermissions::allowRunningInsecureContent(WebKit::WebFrame*, bool enabledPerSettings,
    6574                                                 const WebKit::WebSecurityOrigin&, const WebKit::WebURL&)
     
    101110    m_runningInsecureContentAllowed = false;
    102111}
     112
     113// Private functions ----------------------------------------------------------
     114
     115LayoutTestController* WebPermissions::layoutTestController() const
     116{
     117    return m_shell->layoutTestController();
     118}
  • trunk/Tools/DumpRenderTree/chromium/WebPermissions.h

    r92219 r95369  
    3434#include "WebPermissionClient.h"
    3535
     36class LayoutTestController;
     37class TestShell;
     38
    3639class WebPermissions : public WebKit::WebPermissionClient {
    3740public:
    38     WebPermissions();
     41    WebPermissions(TestShell*);
    3942    virtual ~WebPermissions();
    4043
    4144    // Override WebPermissionClient methods.
    42     virtual bool allowImages(WebKit::WebFrame*, bool enabledPerSettings);
     45    virtual bool allowImage(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& imageURL);
    4346    virtual bool allowStorage(WebKit::WebFrame*, bool local);
    4447    virtual bool allowPlugins(WebKit::WebFrame*, bool enabledPerSettings);
     
    5962
    6063private:
     64    LayoutTestController* layoutTestController() const;
     65
     66    // Non-owning pointer. The WebPermissions instance is owned by this TestShell instance.
     67    TestShell* m_shell;
     68
    6169    bool m_imagesAllowed;
    6270    bool m_storageAllowed;
Note: See TracChangeset for help on using the changeset viewer.