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 WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 18 #define WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 19 20 #include "base/macros.h" 21 #include "net/base/request_priority.h" 22 #include "webkit/child/webkit_child_export.h" 23 24 namespace blink { 25 class WebThreadedDataReceiver; 26 } 27 28 // TODO(pilgrim) remove this once resource loader is moved to content 29 // http://crbug.com/338338 30 namespace content { 31 class RequestPeer; 32 class ResourceRequestBody; 33 struct SyncLoadResponse; 34 } 35 36 namespace webkit_glue { 37 38 class ResourceLoaderBridge { 39 public: 40 // use WebKitPlatformSupportImpl::CreateResourceLoader() for construction, but 41 // anybody can delete at any time, INCLUDING during processing of callbacks. 42 WEBKIT_CHILD_EXPORT virtual ~ResourceLoaderBridge(); 43 44 // Call this method before calling Start() to set the request body. 45 // May only be used with HTTP(S) POST requests. 46 virtual void SetRequestBody(content::ResourceRequestBody* request_body) = 0; 47 48 // Call this method to initiate the request. If this method succeeds, then 49 // the peer's methods will be called asynchronously to report various events. 50 virtual bool Start(content::RequestPeer* peer) = 0; 51 52 // Call this method to cancel a request that is in progress. This method 53 // causes the request to immediately transition into the 'done' state. The 54 // OnCompletedRequest method will be called asynchronously; this assumes 55 // the peer is still valid. 56 virtual void Cancel() = 0; 57 58 // Call this method to suspend or resume a load that is in progress. This 59 // method may only be called after a successful call to the Start method. 60 virtual void SetDefersLoading(bool value) = 0; 61 62 // Call this method when the priority of the requested resource changes after 63 // Start() has been called. This method may only be called after a successful 64 // call to the Start method. 65 virtual void DidChangePriority(net::RequestPriority new_priority, 66 int intra_priority_value) = 0; 67 68 // Call this method to attach a data receiver which will receive resource data 69 // on its own thread. 70 virtual bool AttachThreadedDataReceiver( 71 blink::WebThreadedDataReceiver* threaded_data_receiver) = 0; 72 73 // Call this method to load the resource synchronously (i.e., in one shot). 74 // This is an alternative to the Start method. Be warned that this method 75 // will block the calling thread until the resource is fully downloaded or an 76 // error occurs. It could block the calling thread for a long time, so only 77 // use this if you really need it! There is also no way for the caller to 78 // interrupt this method. Errors are reported via the status field of the 79 // response parameter. 80 virtual void SyncLoad(content::SyncLoadResponse* response) = 0; 81 82 protected: 83 // Construction must go through 84 // WebKitPlatformSupportImpl::CreateResourceLoader() 85 // For HTTP(S) POST requests, the AppendDataToUpload and AppendFileToUpload 86 // methods may be called to construct the body of the request. 87 WEBKIT_CHILD_EXPORT ResourceLoaderBridge(); 88 89 private: 90 DISALLOW_COPY_AND_ASSIGN(ResourceLoaderBridge); 91 }; 92 93 } // namespace webkit_glue 94 95 #endif // WEBKIT_CHILD_RESOURCE_LOADER_BRIDGE_H_ 96