blob: 4a036b4acbbc9b28b60530828ded1690bf6208ef [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WebURLLoaderMock_h
#define WebURLLoaderMock_h
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "third_party/blink/public/platform/web_url_error.h"
#include "third_party/blink/public/platform/web_url_loader.h"
namespace blink {
class WebData;
class WebURLRequestExtraData;
class WebURLLoaderClient;
class WebURLLoaderMockFactoryImpl;
class WebURLLoaderTestDelegate;
class WebURLRequest;
class WebURLResponse;
const uint32_t kRedirectResponseOverheadBytes = 300;
// A simple class for mocking WebURLLoader.
// If the WebURLLoaderMockFactory it is associated with has been configured to
// mock the request it gets, it serves the mocked resource. Otherwise it just
// forwards it to the default loader.
class WebURLLoaderMock : public WebURLLoader {
public:
explicit WebURLLoaderMock(WebURLLoaderMockFactoryImpl* factory);
~WebURLLoaderMock() override;
// Simulates the asynchronous request being served.
void ServeAsynchronousRequest(WebURLLoaderTestDelegate* delegate,
const WebURLResponse& response,
const WebData& data,
const base::Optional<WebURLError>& error);
// Simulates the redirect being served.
WebURL ServeRedirect(const WebString& method,
const WebURLResponse& redirect_response);
// WebURLLoader methods:
void LoadSynchronously(
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<WebURLRequestExtraData> url_request_extra_data,
int requestor_id,
bool pass_response_pipe_to_client,
bool no_mime_sniffing,
base::TimeDelta timeout_interval,
WebURLLoaderClient* client,
WebURLResponse&,
base::Optional<WebURLError>&,
WebData&,
int64_t& encoded_data_length,
int64_t& encoded_body_length,
blink::WebBlobInfo& downloaded_blob,
std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
resource_load_info_notifier_wrapper) override;
void LoadAsynchronously(
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<WebURLRequestExtraData> url_request_extra_data,
int requestor_id,
bool no_mime_sniffing,
std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
resource_load_info_notifier_wrapper,
WebURLLoaderClient* client) override;
void SetDefersLoading(DeferType defer) override;
void DidChangePriority(WebURLRequest::Priority new_priority,
int intra_priority_value) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunnerForBodyLoader()
override;
bool is_deferred() { return is_deferred_; }
bool is_cancelled() { return !client_; }
base::WeakPtr<WebURLLoaderMock> GetWeakPtr();
private:
void Cancel();
WebURLLoaderMockFactoryImpl* factory_ = nullptr;
WebURLLoaderClient* client_ = nullptr;
bool is_deferred_ = false;
base::WeakPtrFactory<WebURLLoaderMock> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMock);
};
} // namespace blink
#endif // WebURLLoaderMock_h