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_H_
6#define CONTENT_TEST_WEBURL_LOADER_MOCK_H_
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "third_party/WebKit/public/platform/WebURLLoader.h"
11
12namespace blink {
13class WebData;
14struct WebURLError;
15class WebURLLoaderClient;
16class WebURLRequest;
17class WebURLResponse;
18}
19
20class WebURLLoaderMockFactory;
21
22// A simple class for mocking WebURLLoader.
23// If the WebURLLoaderMockFactory it is associated with has been configured to
24// mock the request it gets, it serves the mocked resource.  Otherwise it just
25// forwards it to the default loader.
26class WebURLLoaderMock : public blink::WebURLLoader {
27 public:
28  // This object becomes the owner of |default_loader|.
29  WebURLLoaderMock(WebURLLoaderMockFactory* factory,
30                   blink::WebURLLoader* default_loader);
31  virtual ~WebURLLoaderMock();
32
33  // Simulates the asynchronous request being served.
34  void ServeAsynchronousRequest(const blink::WebURLResponse& response,
35                                const blink::WebData& data,
36                                const blink::WebURLError& error);
37
38  // Simulates the redirect being served.
39  blink::WebURLRequest ServeRedirect(
40      const blink::WebURLResponse& redirectResponse);
41
42  // WebURLLoader methods:
43  virtual void loadSynchronously(const blink::WebURLRequest& request,
44                                 blink::WebURLResponse& response,
45                                 blink::WebURLError& error,
46                                 blink::WebData& data);
47  virtual void loadAsynchronously(const blink::WebURLRequest& request,
48                                  blink::WebURLLoaderClient* client);
49  virtual void cancel();
50  virtual void setDefersLoading(bool defer);
51
52  bool isDeferred() { return is_deferred_; }
53
54 private:
55  WebURLLoaderMockFactory* factory_;
56  blink::WebURLLoaderClient* client_;
57  scoped_ptr<blink::WebURLLoader> default_loader_;
58  bool using_default_loader_;
59  bool is_deferred_;
60
61  DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMock);
62};
63
64#endif  // CONTENT_TEST_WEBURL_LOADER_MOCK_H_
65