1 // Copyright (c) 2012 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 #ifndef WEBKIT_SUPPORT_WEBURL_LOADER_MOCK_FACTORY_H_ 6 #define WEBKIT_SUPPORT_WEBURL_LOADER_MOCK_FACTORY_H_ 7 8 #include <map> 9 10 #include "base/files/file_path.h" 11 #include "third_party/WebKit/public/platform/WebURL.h" 12 #include "third_party/WebKit/public/platform/WebURLRequest.h" 13 #include "third_party/WebKit/public/platform/WebURLResponse.h" 14 15 namespace WebKit { 16 class WebData; 17 struct WebURLError; 18 class WebURLLoader; 19 } 20 21 class WebURLLoaderMock; 22 23 // A factory that creates WebURLLoaderMock to simulate resource loading in 24 // tests. 25 // You register files for specific URLs, the content of the file is then served 26 // when these URLs are loaded. 27 // In order to serve the asynchronous requests, you need to invoke 28 // ServeAsynchronousRequest. 29 class WebURLLoaderMockFactory { 30 public: 31 WebURLLoaderMockFactory(); 32 virtual ~WebURLLoaderMockFactory(); 33 34 // Called by TestWebKitPlatformSupport to create a WebURLLoader. 35 // Non-mocked request are forwarded to |default_loader| which should not be 36 // NULL. 37 virtual WebKit::WebURLLoader* CreateURLLoader( 38 WebKit::WebURLLoader* default_loader); 39 40 // Registers a response and the contents to be served when the specified URL 41 // is loaded. 42 void RegisterURL(const WebKit::WebURL& url, 43 const WebKit::WebURLResponse& response, 44 const WebKit::WebString& filePath); 45 46 // Registers an error to be served when the specified URL is requested. 47 void RegisterErrorURL(const WebKit::WebURL& url, 48 const WebKit::WebURLResponse& response, 49 const WebKit::WebURLError& error); 50 51 // Unregisters |url| so it will no longer be mocked. 52 void UnregisterURL(const WebKit::WebURL& url); 53 54 // Unregister all URLs so no URL will be mocked anymore. 55 void UnregisterAllURLs(); 56 57 // Serves all the pending asynchronous requests. 58 void ServeAsynchronousRequests(); 59 60 // Returns the last request handled by |ServeAsynchronousRequests()|. 61 WebKit::WebURLRequest GetLastHandledAsynchronousRequest(); 62 63 // Returns true if |url| was registered for being mocked. 64 bool IsMockedURL(const WebKit::WebURL& url); 65 66 // Called by the loader to load a resource. 67 void LoadSynchronously(const WebKit::WebURLRequest& request, 68 WebKit::WebURLResponse* response, 69 WebKit::WebURLError* error, 70 WebKit::WebData* data); 71 void LoadAsynchronouly(const WebKit::WebURLRequest& request, 72 WebURLLoaderMock* loader); 73 74 // Removes the loader from the list of pending loaders. 75 void CancelLoad(WebURLLoaderMock* loader); 76 77 private: 78 struct ResponseInfo; 79 80 // Loads the specified request and populates the response, error and data 81 // accordingly. 82 void LoadRequest(const WebKit::WebURLRequest& request, 83 WebKit::WebURLResponse* response, 84 WebKit::WebURLError* error, 85 WebKit::WebData* data); 86 87 // Checks if the loader is pending. Otherwise, it may have been deleted. 88 bool IsPending(WebURLLoaderMock* loader); 89 90 // Reads |m_filePath| and puts its content in |data|. 91 // Returns true if it successfully read the file. 92 static bool ReadFile(const base::FilePath& file_path, WebKit::WebData* data); 93 94 // The loaders that have not being served data yet. 95 typedef std::map<WebURLLoaderMock*, WebKit::WebURLRequest> LoaderToRequestMap; 96 LoaderToRequestMap pending_loaders_; 97 98 typedef std::map<GURL, WebKit::WebURLError> URLToErrorMap; 99 URLToErrorMap url_to_error_info_; 100 101 // Table of the registered URLs and the responses that they should receive. 102 typedef std::map<GURL, ResponseInfo> URLToResponseMap; 103 URLToResponseMap url_to_reponse_info_; 104 105 WebKit::WebURLRequest last_handled_asynchronous_request_; 106 107 DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMockFactory); 108 }; 109 110 #endif // WEBKIT_SUPPORT_WEBURL_LOADER_MOCK_FACTORY_H_ 111 112