Introduce a loading policy to the renderer scheduler
[chromium-blink-merge.git] / content / test / weburl_loader_mock_factory.h
blob5fe7b3ce35ece99f0bab0b89a68b0a762da04cd4
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.
5 #ifndef CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_
6 #define CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_
8 #include <map>
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"
16 namespace blink {
17 class WebData;
18 class WebURLLoader;
21 class WebURLLoaderMock;
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();
34 // Called by TestBlinkWebUnitTestSupport 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);
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);
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);
51 // Unregisters |url| so it will no longer be mocked.
52 void UnregisterURL(const blink::WebURL& url);
54 // Unregister all URLs so no URL will be mocked anymore.
55 void UnregisterAllURLs();
57 // Serves all the pending asynchronous requests.
58 void ServeAsynchronousRequests();
60 // Returns the last request handled by |ServeAsynchronousRequests()|.
61 blink::WebURLRequest GetLastHandledAsynchronousRequest();
63 // Returns true if |url| was registered for being mocked.
64 bool IsMockedURL(const blink::WebURL& url);
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);
74 // Removes the loader from the list of pending loaders.
75 void CancelLoad(WebURLLoaderMock* loader);
77 private:
78 struct ResponseInfo {
79 blink::WebURLResponse response;
80 base::FilePath file_path;
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);
91 // Checks if the loader is pending. Otherwise, it may have been deleted.
92 bool IsPending(WebURLLoaderMock* loader);
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);
98 // The loaders that have not being served data yet.
99 typedef std::map<WebURLLoaderMock*, blink::WebURLRequest> LoaderToRequestMap;
100 LoaderToRequestMap pending_loaders_;
102 typedef std::map<GURL, blink::WebURLError> URLToErrorMap;
103 URLToErrorMap url_to_error_info_;
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_;
109 DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMockFactory);
112 #endif // CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_