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