[core] Rationalize error handling for resource loading

* Standardize on std::exception_ptr as the error representation
  (fixes #2854).
* Don't format textual strings at the error source; pass on the
  constituent data via observer method parameters instead.
* Use the null object pattern to simplify observer notification code.
* Further refactoring for ResourceLoading tests.
This commit is contained in:
John Firebaugh
2015-12-22 15:10:24 -08:00
parent 7bd4745cf1
commit 16de579d7c
28 changed files with 405 additions and 472 deletions

View File

@@ -6,8 +6,6 @@
#include <mbgl/util/worker.hpp>
#include <mbgl/util/work_request.hpp>
#include <sstream>
using namespace mbgl;
RasterTileData::RasterTileData(const TileID& id_,
@@ -41,9 +39,7 @@ void RasterTileData::request(float pixelRatio,
if (res.error->reason == Response::Error::Reason::NotFound) {
state = State::parsed;
} else {
std::stringstream message;
message << "Failed to load [" << url << "]: " << res.error->message;
error = message.str();
error = std::make_exception_ptr(std::runtime_error(res.error->message));
state = State::obsolete;
}
callback();
@@ -68,9 +64,7 @@ void RasterTileData::request(float pixelRatio,
state = State::parsed;
bucket = std::move(result.get<std::unique_ptr<Bucket>>());
} else {
std::stringstream message;
message << "Failed to parse [" << std::string(id) << "]: " << result.get<std::string>();
error = message.str();
error = result.get<std::exception_ptr>();
state = State::obsolete;
}