1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4// 5// The intent of this file is to provide a type-neutral abstraction between 6// Chrome and WebKit for resource loading. This pure-virtual interface is 7// implemented by the embedder. 8// 9// One of these objects will be created by WebKit for each request. WebKit 10// will own the pointer to the bridge, and will delete it when the request is 11// no longer needed. 12// 13// In turn, the bridge's owner on the WebKit end will implement the 14// RequestPeer interface, which we will use to communicate notifications 15// back. 16 17#ifndef CONTENT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 18#define CONTENT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 19 20#include "base/macros.h" 21#include "content/common/content_export.h" 22#include "net/base/request_priority.h" 23 24namespace blink { 25class WebThreadedDataReceiver; 26} 27 28namespace content { 29 30class RequestPeer; 31class ResourceRequestBody; 32struct SyncLoadResponse; 33 34// TODO(tfarina): Refactor code that uses this class. This shouldn't be needed 35// now that it lives in content/. 36class CONTENT_EXPORT ResourceLoaderBridge { 37 public: 38 // use WebKitPlatformSupportImpl::CreateResourceLoader() for construction, but 39 // anybody can delete at any time, INCLUDING during processing of callbacks. 40 virtual ~ResourceLoaderBridge(); 41 42 // Call this method before calling Start() to set the request body. 43 // May only be used with HTTP(S) POST requests. 44 virtual void SetRequestBody(ResourceRequestBody* request_body) = 0; 45 46 // Call this method to initiate the request. If this method succeeds, then 47 // the peer's methods will be called asynchronously to report various events. 48 virtual bool Start(RequestPeer* peer) = 0; 49 50 // Call this method to cancel a request that is in progress. This method 51 // causes the request to immediately transition into the 'done' state. The 52 // OnCompletedRequest method will be called asynchronously; this assumes 53 // the peer is still valid. 54 virtual void Cancel() = 0; 55 56 // Call this method to suspend or resume a load that is in progress. This 57 // method may only be called after a successful call to the Start method. 58 virtual void SetDefersLoading(bool value) = 0; 59 60 // Call this method when the priority of the requested resource changes after 61 // Start() has been called. This method may only be called after a successful 62 // call to the Start method. 63 virtual void DidChangePriority(net::RequestPriority new_priority, 64 int intra_priority_value) = 0; 65 66 // Call this method to attach a data receiver which will receive resource data 67 // on its own thread. 68 virtual bool AttachThreadedDataReceiver( 69 blink::WebThreadedDataReceiver* threaded_data_receiver) = 0; 70 71 // Call this method to load the resource synchronously (i.e., in one shot). 72 // This is an alternative to the Start method. Be warned that this method 73 // will block the calling thread until the resource is fully downloaded or an 74 // error occurs. It could block the calling thread for a long time, so only 75 // use this if you really need it! There is also no way for the caller to 76 // interrupt this method. Errors are reported via the status field of the 77 // response parameter. 78 virtual void SyncLoad(SyncLoadResponse* response) = 0; 79 80 protected: 81 // Construction must go through 82 // WebKitPlatformSupportImpl::CreateResourceLoader() 83 // For HTTP(S) POST requests, the AppendDataToUpload and AppendFileToUpload 84 // methods may be called to construct the body of the request. 85 ResourceLoaderBridge(); 86 87 private: 88 DISALLOW_COPY_AND_ASSIGN(ResourceLoaderBridge); 89}; 90 91} // namespace content 92 93#endif // CONTENT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 94