#ifndef CONTENT_BROWSER_BACKGROUND_FETCH_MOCK_BACKGROUND_FETCH_DELEGATE_H_
#define CONTENT_BROWSER_BACKGROUND_FETCH_MOCK_BACKGROUND_FETCH_DELEGATE_H_
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <vector>
#include "base/files/scoped_temp_dir.h"
#include "content/public/browser/background_fetch_delegate.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "url/gurl.h"
namespace net {
class HttpResponseHeaders;
}
namespace content {
class MockBackgroundFetchDelegate : public BackgroundFetchDelegate {
public:
struct TestResponse {
TestResponse();
TestResponse(const TestResponse&) = delete;
TestResponse& operator=(const TestResponse&) = delete;
~TestResponse();
bool succeeded = false;
bool pending = false;
scoped_refptr<net::HttpResponseHeaders> headers;
std::string data;
};
class TestResponseBuilder {
public:
explicit TestResponseBuilder(int response_code);
TestResponseBuilder(const TestResponseBuilder&) = delete;
TestResponseBuilder& operator=(const TestResponseBuilder&) = delete;
~TestResponseBuilder();
TestResponseBuilder& AddResponseHeader(const std::string& name,
const std::string& value);
TestResponseBuilder& SetResponseData(std::string data);
TestResponseBuilder& MakeIndefinitelyPending();
std::unique_ptr<TestResponse> Build();
private:
std::unique_ptr<TestResponse> response_;
};
MockBackgroundFetchDelegate();
MockBackgroundFetchDelegate(const MockBackgroundFetchDelegate&) = delete;
MockBackgroundFetchDelegate& operator=(const MockBackgroundFetchDelegate&) =
delete;
~MockBackgroundFetchDelegate() override;
void GetIconDisplaySize(
BackgroundFetchDelegate::GetIconDisplaySizeCallback callback) override;
void CreateDownloadJob(
base::WeakPtr<Client> client,
std::unique_ptr<BackgroundFetchDescription> fetch_description) override;
void DownloadUrl(const std::string& job_unique_id,
const std::string& guid,
const std::string& method,
const GURL& url,
::network::mojom::CredentialsMode credentials_mode,
const net::NetworkTrafficAnnotationTag& traffic_annotation,
const net::HttpRequestHeaders& headers,
bool has_request_body) override;
void Abort(const std::string& job_unique_id) override;
void MarkJobComplete(const std::string& job_unique_id) override;
void UpdateUI(const std::string& job_unique_id,
const std::optional<std::string>& title,
const std::optional<SkBitmap>& icon) override;
void RegisterResponse(const GURL& url,
std::unique_ptr<TestResponse> response);
const std::set<std::string>& completed_jobs() const {
return completed_jobs_;
}
private:
void PostAbortCheckingTask(const std::string& job_unique_id,
base::OnceCallback<void()> callback);
void RunAbortCheckingTask(const std::string& job_unique_id,
base::OnceCallback<void()> callback);
std::map<const GURL, std::unique_ptr<TestResponse>> url_responses_;
std::set<std::string> seen_guids_;
base::ScopedTempDir temp_directory_;
std::set<std::string> aborted_jobs_;
std::set<std::string> completed_jobs_;
std::map<std::string, std::string> download_guid_to_job_id_map_;
std::map<std::string, base::WeakPtr<Client>> job_id_to_client_map_;
};
}
#endif