15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The intent of this file is to provide a type-neutral abstraction between
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chrome and WebKit for resource loading. This pure-virtual interface is
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implemented by the embedder.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// One of these objects will be created by WebKit for each request. WebKit
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// will own the pointer to the bridge, and will delete it when the request is
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no longer needed.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// In turn, the bridge's owner on the WebKit end will implement the Peer
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface, which we will use to communicate notifications back.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_descriptor_posix.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/platform_file.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/request_priority.h"
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/child/webkit_child_export.h"
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/common/resource_response_info.h"
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/common/resource_type.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webkit_glue {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceRequestBody;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceLoaderBridge {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Structure used when calling
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebKitPlatformSupportImpl::CreateResourceLoader().
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  struct WEBKIT_CHILD_EXPORT RequestInfo {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RequestInfo();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~RequestInfo();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // HTTP-style method name (e.g., "GET" or "POST").
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string method;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Absolute URL encoded in ASCII per the rules of RFC-2396.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // URL of the document in the top-level window, which may be checked by the
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // third-party cookie blocking policy.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL first_party_for_cookies;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Optional parameter, a URL with similar constraints in how it must be
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // encoded as the url member.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL referrer;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The referrer policy that applies to the referrer.
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebReferrerPolicy referrer_policy;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // For HTTP(S) requests, the headers parameter can be a \r\n-delimited and
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // \r\n-terminated list of MIME headers.  They should be ASCII-encoded using
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the standard MIME header encoding rules.  The headers parameter can also
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // be null if no extra request headers need to be set.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string headers;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Composed of the values defined in url_request_load_flags.h.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int load_flags;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Process id of the process making the request.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int requestor_pid;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Indicates if the current request is the main frame load, a sub-frame
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // load, or a sub objects load.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ResourceType::Type request_type;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Indicates the priority of this request, as determined by WebKit.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    net::RequestPriority priority;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Used for plugin to browser requests.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32 request_context;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Identifies what appcache host this request is associated with.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int appcache_host_id;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Used to associated the bridge with a frame's network context.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int routing_id;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If true, then the response body will be downloaded to a file and the
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // path to that file will be provided in ResponseInfo::download_file_path.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool download_to_file;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // True if the request was user initiated.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool has_user_gesture;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Extra data associated with this request.  We do not own this pointer.
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebURLRequest::ExtraData* extra_data;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(RequestInfo);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See the SyncLoad method declared below.  (The name of this struct is not
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // suffixed with "Info" because it also contains the response data.)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct SyncLoadResponse : ResourceResponseInfo {
109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    WEBKIT_CHILD_EXPORT SyncLoadResponse();
110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    WEBKIT_CHILD_EXPORT ~SyncLoadResponse();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The response error code.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int error_code;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The final URL of the response.  This may differ from the request URL in
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the case of a server redirect.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The response data.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string data;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generated by the bridge. This is implemented by our custom resource loader
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // within webkit. The Peer and it's bridge should have identical lifetimes
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // as they represent each end of a communication channel.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These callbacks mirror net::URLRequest::Delegate and the order and
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // conditions in which they will be called are identical. See url_request.h
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for more information.
130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  class WEBKIT_CHILD_EXPORT Peer {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called as upload progress is made.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // note: only for requests with LOAD_ENABLE_UPLOAD_PROGRESS set
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnUploadProgress(uint64 position, uint64 size) = 0;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when a redirect occurs.  The implementation may return false to
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // suppress the redirect.  The given ResponseInfo provides complete
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // information about the redirect, and new_url is the URL that will be
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // loaded if this method returns true.  If this method returns true, the
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // output parameter *has_new_first_party_for_cookies indicates whether the
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // output parameter *new_first_party_for_cookies contains the new URL that
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // should be consulted for the third-party cookie blocking policy.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool OnReceivedRedirect(const GURL& new_url,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const ResourceResponseInfo& info,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bool* has_new_first_party_for_cookies,
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    GURL* new_first_party_for_cookies) = 0;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when response headers are available (after all redirects have
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // been followed).
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnReceivedResponse(const ResourceResponseInfo& info) = 0;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when a chunk of response data is downloaded.  This method may be
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // called multiple times or not at all if an error occurs.  This method is
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // only called if RequestInfo::download_to_file was set to true, and in
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // that case, OnReceivedData will not be called.
15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // The encoded_data_length is the length of the encoded data transferred
15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // over the network, which could be different from data length (e.g. for
15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // gzipped content), or -1 if unknown. It is only valid while devtools are
15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // attached. Otherwise it becomes -1.
16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void OnDownloadedData(int len, int encoded_data_length) = 0;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when a chunk of response data is available. This method may
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // be called multiple times or not at all if an error occurs.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The encoded_data_length is the length of the encoded data transferred
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // over the network, which could be different from data length (e.g. for
16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // gzipped content), or -1 if unknown. It is only valid while devtools are
16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // attached. Otherwise it becomes -1.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnReceivedData(const char* data,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int data_length,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int encoded_data_length) = 0;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when metadata generated by the renderer is retrieved from the
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // cache. This method may be called zero or one times.
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnReceivedCachedMetadata(const char* data, int len) { }
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when the response is complete.  This method signals completion of
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the resource load.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnCompletedRequest(
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int error_code,
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool was_ignored_by_handler,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const std::string& security_info,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const base::TimeTicks& completion_time) = 0;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   protected:
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~Peer() {}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // use WebKitPlatformSupportImpl::CreateResourceLoader() for construction, but
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // anybody can delete at any time, INCLUDING during processing of callbacks.
190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WEBKIT_CHILD_EXPORT virtual ~ResourceLoaderBridge();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call this method before calling Start() to set the request body.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // May only be used with HTTP(S) POST requests.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetRequestBody(ResourceRequestBody* request_body) = 0;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call this method to initiate the request.  If this method succeeds, then
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the peer's methods will be called asynchronously to report various events.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Start(Peer* peer) = 0;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call this method to cancel a request that is in progress.  This method
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // causes the request to immediately transition into the 'done' state. The
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OnCompletedRequest method will be called asynchronously; this assumes
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the peer is still valid.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() = 0;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call this method to suspend or resume a load that is in progress.  This
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // method may only be called after a successful call to the Start method.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetDefersLoading(bool value) = 0;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Call this method when the priority of the requested resource changes after
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Start() has been called.  This method may only be called after a successful
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // call to the Start method.
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidChangePriority(net::RequestPriority new_priority) = 0;
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call this method to load the resource synchronously (i.e., in one shot).
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is an alternative to the Start method.  Be warned that this method
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will block the calling thread until the resource is fully downloaded or an
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // error occurs.  It could block the calling thread for a long time, so only
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // use this if you really need it!  There is also no way for the caller to
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // interrupt this method.  Errors are reported via the status field of the
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // response parameter.
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SyncLoad(SyncLoadResponse* response) = 0;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Construction must go through
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebKitPlatformSupportImpl::CreateResourceLoader()
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For HTTP(S) POST requests, the AppendDataToUpload and AppendFileToUpload
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // methods may be called to construct the body of the request.
229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WEBKIT_CHILD_EXPORT ResourceLoaderBridge();
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ResourceLoaderBridge);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace webkit_glue
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
237ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_
238