Cancel pending style request when loading style JSON (#3709)
Co-authored-by: Tim Sylvester <tim@wetdogweather.com>
This commit is contained in:
32
test/src/mbgl/test/delayed_file_source.cpp
Normal file
32
test/src/mbgl/test/delayed_file_source.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <mbgl/test/delayed_file_source.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
DelayedFileSource::AsyncRequestImpl::AsyncRequestImpl(DelayedFileSource& fs, Callback callback_)
|
||||
: fileSource(fs),
|
||||
callback(std::move(callback_)) {}
|
||||
|
||||
void DelayedFileSource::AsyncRequestImpl::respond() {
|
||||
if (callback) {
|
||||
callback(*fileSource.response);
|
||||
}
|
||||
}
|
||||
|
||||
DelayedFileSource::DelayedFileSource()
|
||||
: StubFileSource(StubFileSource::ResponseType::Synchronous) {}
|
||||
|
||||
std::unique_ptr<AsyncRequest> DelayedFileSource::request(const Resource&, Callback callback) {
|
||||
auto req = std::make_unique<AsyncRequestImpl>(*this, std::move(callback));
|
||||
pendingRequest = req.get();
|
||||
return req;
|
||||
}
|
||||
|
||||
void DelayedFileSource::respondToRequest(const std::string& data) {
|
||||
response = Response();
|
||||
response->data = std::make_shared<std::string>(data);
|
||||
if (pendingRequest) {
|
||||
pendingRequest->respond();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
43
test/src/mbgl/test/delayed_file_source.hpp
Normal file
43
test/src/mbgl/test/delayed_file_source.hpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <mbgl/storage/file_source.hpp>
|
||||
#include <mbgl/util/async_request.hpp>
|
||||
#include <mbgl/test/stub_file_source.hpp>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
/*
|
||||
This is a file source that allows control of when a request is responded to.
|
||||
*/
|
||||
class DelayedFileSource : public StubFileSource {
|
||||
public:
|
||||
DelayedFileSource();
|
||||
~DelayedFileSource() override = default;
|
||||
|
||||
std::unique_ptr<AsyncRequest> request(const Resource&, Callback) override;
|
||||
|
||||
// Custom method to respond to pending request
|
||||
void respondToRequest(const std::string& data);
|
||||
|
||||
private:
|
||||
class AsyncRequestImpl : public AsyncRequest {
|
||||
public:
|
||||
using Callback = std::function<void(const Response&)>;
|
||||
|
||||
AsyncRequestImpl(DelayedFileSource& fs, Callback callback_);
|
||||
void respond();
|
||||
|
||||
private:
|
||||
DelayedFileSource& fileSource;
|
||||
Callback callback;
|
||||
};
|
||||
|
||||
friend class AsyncRequestImpl;
|
||||
std::optional<Response> response;
|
||||
AsyncRequestImpl* pendingRequest = nullptr;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
Reference in New Issue
Block a user