1// Copyright 2013 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 CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_ 6#define CONTENT_TEST_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/WebURLError.h" 13#include "third_party/WebKit/public/platform/WebURLRequest.h" 14#include "third_party/WebKit/public/platform/WebURLResponse.h" 15 16namespace blink { 17class WebData; 18class WebURLLoader; 19} 20 21class 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. 29class 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 blink::WebURLLoader* CreateURLLoader( 38 blink::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 blink::WebURL& url, 43 const blink::WebURLResponse& response, 44 const blink::WebString& filePath); 45 46 // Registers an error to be served when the specified URL is requested. 47 void RegisterErrorURL(const blink::WebURL& url, 48 const blink::WebURLResponse& response, 49 const blink::WebURLError& error); 50 51 // Unregisters |url| so it will no longer be mocked. 52 void UnregisterURL(const blink::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 blink::WebURLRequest GetLastHandledAsynchronousRequest(); 62 63 // Returns true if |url| was registered for being mocked. 64 bool IsMockedURL(const blink::WebURL& url); 65 66 // Called by the loader to load a resource. 67 void LoadSynchronously(const blink::WebURLRequest& request, 68 blink::WebURLResponse* response, 69 blink::WebURLError* error, 70 blink::WebData* data); 71 void LoadAsynchronouly(const blink::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 blink::WebURLResponse response; 80 base::FilePath file_path; 81 }; 82 83 84 // Loads the specified request and populates the response, error and data 85 // accordingly. 86 void LoadRequest(const blink::WebURLRequest& request, 87 blink::WebURLResponse* response, 88 blink::WebURLError* error, 89 blink::WebData* data); 90 91 // Checks if the loader is pending. Otherwise, it may have been deleted. 92 bool IsPending(WebURLLoaderMock* loader); 93 94 // Reads |m_filePath| and puts its content in |data|. 95 // Returns true if it successfully read the file. 96 static bool ReadFile(const base::FilePath& file_path, blink::WebData* data); 97 98 // The loaders that have not being served data yet. 99 typedef std::map<WebURLLoaderMock*, blink::WebURLRequest> LoaderToRequestMap; 100 LoaderToRequestMap pending_loaders_; 101 102 typedef std::map<GURL, blink::WebURLError> URLToErrorMap; 103 URLToErrorMap url_to_error_info_; 104 105 // Table of the registered URLs and the responses that they should receive. 106 typedef std::map<GURL, ResponseInfo> URLToResponseMap; 107 URLToResponseMap url_to_reponse_info_; 108 109 blink::WebURLRequest last_handled_asynchronous_request_; 110 111 DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMockFactory); 112}; 113 114#endif // CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_ 115 116