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_
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"
21 class WebURLLoaderMock
;
23 // A factory that creates WebURLLoaderMock to simulate resource loading in
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
{
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
37 virtual blink::WebURLLoader
* CreateURLLoader(
38 blink::WebURLLoader
* default_loader
);
40 // Registers a response and the contents to be served when the specified URL
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
);
79 blink::WebURLResponse response
;
80 base::FilePath file_path
;
84 // Loads the specified request and populates the response, error and data
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_