Changeset 80219 in webkit


Ignore:
Timestamp:
Mar 3, 2011 2:28:47 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-03-03 Bill Budge <bbudge@chromium.org>

Reviewed by David Levin.

AssociatedURLLoader does not support Cross Origin Requests
https://bugs.webkit.org/show_bug.cgi?id=53925

No tests needed. Exposes no new functionality.

  • src/AssociatedURLLoader.cpp: (WebKit::AssociatedURLLoader::ClientAdapter::create): (WebKit::AssociatedURLLoader::ClientAdapter::ClientAdapter): (WebKit::AssociatedURLLoader::ClientAdapter::willSendRequest): (WebKit::AssociatedURLLoader::ClientAdapter::didSendData): (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveResponse): (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveData): (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveCachedMetadata): (WebKit::AssociatedURLLoader::ClientAdapter::didFinishLoading): (WebKit::AssociatedURLLoader::ClientAdapter::didFail): (WebKit::AssociatedURLLoader::AssociatedURLLoader): (WebKit::AssociatedURLLoader::~AssociatedURLLoader): (WebKit::AssociatedURLLoader::loadSynchronously): (WebKit::AssociatedURLLoader::loadAsynchronously): (WebKit::AssociatedURLLoader::cancel): (WebKit::AssociatedURLLoader::setDefersLoading):
  • src/AssociatedURLLoader.h: (WebKit::AssociatedURLLoaderOptions::AssociatedURLLoaderOptions):
Location:
trunk/Source/WebKit/chromium
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r80215 r80219  
     12011-03-03  Bill Budge  <bbudge@chromium.org>
     2
     3        Reviewed by David Levin.
     4
     5        AssociatedURLLoader does not support Cross Origin Requests
     6        https://bugs.webkit.org/show_bug.cgi?id=53925
     7
     8        No tests needed. Exposes no new functionality.
     9
     10        * src/AssociatedURLLoader.cpp:
     11        (WebKit::AssociatedURLLoader::ClientAdapter::create):
     12        (WebKit::AssociatedURLLoader::ClientAdapter::ClientAdapter):
     13        (WebKit::AssociatedURLLoader::ClientAdapter::willSendRequest):
     14        (WebKit::AssociatedURLLoader::ClientAdapter::didSendData):
     15        (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveResponse):
     16        (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveData):
     17        (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveCachedMetadata):
     18        (WebKit::AssociatedURLLoader::ClientAdapter::didFinishLoading):
     19        (WebKit::AssociatedURLLoader::ClientAdapter::didFail):
     20        (WebKit::AssociatedURLLoader::AssociatedURLLoader):
     21        (WebKit::AssociatedURLLoader::~AssociatedURLLoader):
     22        (WebKit::AssociatedURLLoader::loadSynchronously):
     23        (WebKit::AssociatedURLLoader::loadAsynchronously):
     24        (WebKit::AssociatedURLLoader::cancel):
     25        (WebKit::AssociatedURLLoader::setDefersLoading):
     26        * src/AssociatedURLLoader.h:
     27        (WebKit::AssociatedURLLoaderOptions::AssociatedURLLoaderOptions):
     28
    1292011-03-03  Steve Lacey  <sjl@chromium.org>
    230
  • trunk/Source/WebKit/chromium/src/AssociatedURLLoader.cpp

    r74161 r80219  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2010, 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3232#include "AssociatedURLLoader.h"
    3333
     34#include "DocumentThreadableLoader.h"
     35#include "SubresourceLoader.h"
     36#include "ThreadableLoaderClient.h"
    3437#include "WebApplicationCacheHost.h"
    3538#include "WebDataSource.h"
     
    3740#include "WebKit.h"
    3841#include "WebKitClient.h"
     42#include "WebURLError.h"
     43#include "WebURLLoaderClient.h"
    3944#include "WebURLRequest.h"
     45#include "WrappedResourceRequest.h"
     46#include "WrappedResourceResponse.h"
     47
     48using namespace WebCore;
     49using namespace WebKit;
     50using namespace WTF;
    4051
    4152namespace WebKit {
    4253
     54// This class bridges the interface differences between WebCore and WebKit loader clients.
     55// It forwards its ThreadableLoaderClient notifications to a WebURLLoaderClient.
     56class AssociatedURLLoader::ClientAdapter : public ThreadableLoaderClient {
     57public:
     58    static PassOwnPtr<ClientAdapter> create(WebURLLoader*, WebURLLoaderClient*, bool /*downloadToFile*/);
     59
     60    virtual void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/);
     61    virtual void willSendRequest(ResourceRequest& /*newRequest*/, const ResourceResponse& /*redirectResponse*/);
     62
     63    virtual void didReceiveResponse(const ResourceResponse&);
     64    virtual void didReceiveData(const char*, int /*dataLength*/);
     65    virtual void didReceiveCachedMetadata(const char*, int /*dataLength*/);
     66    virtual void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/);
     67    virtual void didFail(const ResourceError&);
     68
     69private:
     70    ClientAdapter(WebURLLoader*, WebURLLoaderClient*, bool /*downloadingToFile*/);
     71
     72    WebURLLoader* m_loader;
     73    WebURLLoaderClient* m_client;
     74    unsigned long m_downloadLength;
     75    bool m_downloadingToFile;
     76};
     77
     78PassOwnPtr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientAdapter::create(WebURLLoader* loader, WebURLLoaderClient* client, bool downloadToFile)
     79{
     80    return adoptPtr(new ClientAdapter(loader, client, downloadToFile));
     81}
     82
     83AssociatedURLLoader::ClientAdapter::ClientAdapter(WebURLLoader* loader, WebURLLoaderClient* client, bool downloadingToFile)
     84    : m_loader(loader)
     85    , m_client(client)
     86    , m_downloadLength(0)
     87    , m_downloadingToFile(downloadingToFile)
     88{
     89    ASSERT(m_loader);
     90    ASSERT(m_client);
     91}
     92
     93void AssociatedURLLoader::ClientAdapter::willSendRequest(ResourceRequest& newRequest, const ResourceResponse& redirectResponse)
     94{
     95    WrappedResourceRequest wrappedNewRequest(newRequest);
     96    WrappedResourceResponse wrappedRedirectResponse(redirectResponse);
     97    m_client->willSendRequest(m_loader, wrappedNewRequest, wrappedRedirectResponse);
     98}
     99
     100void AssociatedURLLoader::ClientAdapter::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
     101{
     102    m_client->didSendData(m_loader, bytesSent, totalBytesToBeSent);
     103}
     104
     105void AssociatedURLLoader::ClientAdapter::didReceiveResponse(const ResourceResponse& response)
     106{
     107    WrappedResourceResponse wrappedResponse(response);
     108    m_client->didReceiveResponse(m_loader, wrappedResponse);
     109}
     110
     111void AssociatedURLLoader::ClientAdapter::didReceiveData(const char* data, int lengthReceived)
     112{
     113    m_client->didReceiveData(m_loader, data, lengthReceived);
     114    m_downloadLength += lengthReceived;
     115}
     116
     117void AssociatedURLLoader::ClientAdapter::didReceiveCachedMetadata(const char* data, int lengthReceived)
     118{
     119    m_client->didReceiveCachedMetadata(m_loader, data, lengthReceived);
     120}
     121
     122void AssociatedURLLoader::ClientAdapter::didFinishLoading(unsigned long identifier, double finishTime)
     123{
     124    m_client->didFinishLoading(m_loader, finishTime);
     125
     126    if (m_downloadingToFile) {
     127        int downloadLength = m_downloadLength <= INT_MAX ? m_downloadLength : INT_MAX;
     128        m_client->didDownloadData(m_loader, downloadLength);
     129    }
     130}
     131
     132void AssociatedURLLoader::ClientAdapter::didFail(const ResourceError& error)
     133{
     134    WebURLError webError(error);
     135    m_client->didFail(m_loader, webError);
     136}
     137
    43138AssociatedURLLoader::AssociatedURLLoader(PassRefPtr<WebFrameImpl> frameImpl)
    44     : m_frameImpl(frameImpl),
    45       m_realLoader(webKitClient()->createURLLoader()),
    46       m_realClient(0)
    47 {
     139    : m_frameImpl(frameImpl)
     140    , m_client(0)
     141{
     142    ASSERT(m_frameImpl);
     143}
     144
     145AssociatedURLLoader::AssociatedURLLoader(PassRefPtr<WebFrameImpl> frameImpl, const AssociatedURLLoaderOptions& options)
     146    : m_frameImpl(frameImpl)
     147    , m_options(options)
     148    , m_client(0)
     149{
     150    ASSERT(m_frameImpl);
    48151}
    49152
     
    52155}
    53156
     157#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, webcore_name) \
     158    COMPILE_ASSERT(static_cast<int>(WebKit::webkit_name) == static_cast<int>(WebCore::webcore_name), mismatching_enums)
     159
     160COMPILE_ASSERT_MATCHING_ENUM(DenyCrossOriginRequests, DenyCrossOriginRequests);
     161COMPILE_ASSERT_MATCHING_ENUM(UseAccessControl, UseAccessControl);
     162COMPILE_ASSERT_MATCHING_ENUM(AllowCrossOriginRequests, AllowCrossOriginRequests);
     163
    54164void AssociatedURLLoader::loadSynchronously(const WebURLRequest& request, WebURLResponse& response, WebURLError& error, WebData& data)
    55165{
    56     ASSERT(!m_realClient);
     166    ASSERT(0); // Synchronous loading is not supported.
     167}
     168
     169void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client)
     170{
     171    ASSERT(!m_client);
     172
     173    m_client = client;
     174    ASSERT(m_client);
     175
     176    ThreadableLoaderOptions options;
     177    options.sendLoadCallbacks = m_options.sendLoadCallbacks;
     178    options.sniffContent = m_options.sniffContent;
     179    options.allowCredentials = m_options.allowCredentials;
     180    options.forcePreflight = m_options.forcePreflight;
     181    options.crossOriginRequestPolicy = static_cast<WebCore::CrossOriginRequestPolicy>(options.crossOriginRequestPolicy);
    57182
    58183    WebURLRequest requestCopy(request);
    59     prepareRequest(requestCopy);
    60 
    61     m_realLoader->loadSynchronously(requestCopy, response, error, data);
    62 }
    63 
    64 void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client)
    65 {
    66     ASSERT(!m_realClient);
    67 
    68     WebURLRequest requestCopy(request);
    69     prepareRequest(requestCopy);
    70 
    71     m_realClient = client;
    72     m_realLoader->loadAsynchronously(requestCopy, this);
     184    const ResourceRequest& webcoreRequest = request.toResourceRequest();
     185    Document* webcoreDocument = m_frameImpl->frame()->document();
     186    m_clientAdapter = ClientAdapter::create(this, m_client, request.downloadToFile());
     187
     188    m_loader = DocumentThreadableLoader::create(webcoreDocument, m_clientAdapter.get(), webcoreRequest, options);
    73189}
    74190
    75191void AssociatedURLLoader::cancel()
    76192{
    77     m_realLoader->cancel();
     193    if (m_loader)
     194        m_loader->cancel();
    78195}
    79196
    80197void AssociatedURLLoader::setDefersLoading(bool defersLoading)
    81198{
    82     m_realLoader->setDefersLoading(defersLoading);
    83 }
    84 
    85 void AssociatedURLLoader::prepareRequest(WebURLRequest& request)
    86 {
    87     WebApplicationCacheHost* applicationCacheHost = m_frameImpl->dataSource()->applicationCacheHost();
    88     if (applicationCacheHost)
    89         applicationCacheHost->willStartSubResourceRequest(request);
    90     m_frameImpl->dispatchWillSendRequest(request);
    91 }
    92 
    93 void AssociatedURLLoader::willSendRequest(WebURLLoader*, WebURLRequest& newRequest, const WebURLResponse& redirectResponse)
    94 {
    95     m_realClient->willSendRequest(this, newRequest, redirectResponse);
    96 }
    97 
    98 void AssociatedURLLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
    99 {
    100     m_realClient->didSendData(this, bytesSent, totalBytesToBeSent);
    101 }
    102 
    103 void AssociatedURLLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& response)
    104 {
    105     m_realClient->didReceiveResponse(this, response);
    106 }
    107 
    108 void AssociatedURLLoader::didDownloadData(WebURLLoader*, int dataLength)
    109 {
    110     m_realClient->didDownloadData(this, dataLength);
    111 }
    112 
    113 void AssociatedURLLoader::didReceiveData(WebURLLoader*, const char* data, int dataLength)
    114 {
    115     m_realClient->didReceiveData(this, data, dataLength);
    116 }
    117 
    118 void AssociatedURLLoader::didReceiveCachedMetadata(WebURLLoader*, const char* data, int dataLength)
    119 {
    120     m_realClient->didReceiveCachedMetadata(this, data, dataLength);
    121 }
    122 
    123 void AssociatedURLLoader::didFinishLoading(WebURLLoader*, double finishTime)
    124 {
    125     m_realClient->didFinishLoading(this, finishTime);
    126 }
    127 
    128 void AssociatedURLLoader::didFail(WebURLLoader*, const WebURLError& error)
    129 {
    130     m_realClient->didFail(this, error);
     199    if (m_loader)
     200        m_loader->setDefersLoading(defersLoading);
    131201}
    132202
  • trunk/Source/WebKit/chromium/src/AssociatedURLLoader.h

    r74161 r80219  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2010, 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3333
    3434#include "WebURLLoader.h"
    35 #include "WebURLLoaderClient.h"
     35#include <wtf/Noncopyable.h>
    3636#include <wtf/OwnPtr.h>
    3737#include <wtf/RefPtr.h>
     38
     39namespace WebCore { class DocumentThreadableLoader; }
    3840
    3941namespace WebKit {
     
    4143class WebFrameImpl;
    4244
     45enum CrossOriginRequestPolicy {
     46    DenyCrossOriginRequests,
     47    UseAccessControl,
     48    AllowCrossOriginRequests
     49};
     50
     51struct AssociatedURLLoaderOptions {
     52    AssociatedURLLoaderOptions() : sendLoadCallbacks(false), sniffContent(false), allowCredentials(false), forcePreflight(false), crossOriginRequestPolicy(DenyCrossOriginRequests) { }
     53    bool sendLoadCallbacks;
     54    bool sniffContent;
     55    bool allowCredentials; // Whether to send HTTP credentials and cookies with the request.
     56    bool forcePreflight; // If AccessControl is used, whether to force a preflight.
     57    CrossOriginRequestPolicy crossOriginRequestPolicy;
     58};
     59
    4360// This class is used to implement WebFrame::createAssociatedURLLoader.
    44 // FIXME: Implement in terms of WebCore::SubresourceLoader.
    45 class AssociatedURLLoader : public WebURLLoader,
    46                             public WebURLLoaderClient {
     61class AssociatedURLLoader : public WebURLLoader {
     62    WTF_MAKE_NONCOPYABLE(AssociatedURLLoader);
    4763public:
    4864    AssociatedURLLoader(PassRefPtr<WebFrameImpl>);
     65    AssociatedURLLoader(PassRefPtr<WebFrameImpl>, const AssociatedURLLoaderOptions&);
    4966    ~AssociatedURLLoader();
    5067
     
    5572    virtual void setDefersLoading(bool);
    5673
    57     // WebURLLoaderClient methods:
    58     virtual void willSendRequest(WebURLLoader*, WebURLRequest& newRequest, const WebURLResponse& redirectResponse);
    59     virtual void didSendData(WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
    60     virtual void didReceiveResponse(WebURLLoader*, const WebURLResponse&);
    61     virtual void didDownloadData(WebURLLoader*, int dataLength);
    62     virtual void didReceiveData(WebURLLoader*, const char* data, int dataLength);
    63     virtual void didReceiveCachedMetadata(WebURLLoader*, const char* data, int dataLength);
    64     virtual void didFinishLoading(WebURLLoader*, double finishTime);
    65     virtual void didFail(WebURLLoader*, const WebURLError&);
    66 
    6774private:
    68     void prepareRequest(WebURLRequest&);
     75    class ClientAdapter;
    6976
    7077    RefPtr<WebFrameImpl> m_frameImpl;
    71     OwnPtr<WebURLLoader> m_realLoader;
    72     WebURLLoaderClient* m_realClient;
     78    AssociatedURLLoaderOptions m_options;
     79    WebURLLoaderClient* m_client;
     80    OwnPtr<ClientAdapter> m_clientAdapter;
     81    RefPtr<WebCore::DocumentThreadableLoader> m_loader;
    7382};
    7483
Note: See TracChangeset for help on using the changeset viewer.