diff options
author | 2016-02-25 11:28:18 -0800 | |
---|---|---|
committer | 2016-02-25 11:28:18 -0800 | |
commit | 3854f11ce35857ccb6dbf8bb09bef9252543090f (patch) | |
tree | 1adacad85f2835c68ea50136bbad3084a3da40ea /tools/skiaserve/urlhandlers/DownloadHandler.cpp | |
parent | f57b3a6e4a002caf01378832cbd756c6c163a783 (diff) |
Move urlhandlers out of skiaserve.cpp
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737643003
Review URL: https://codereview.chromium.org/1737643003
Diffstat (limited to 'tools/skiaserve/urlhandlers/DownloadHandler.cpp')
-rw-r--r-- | tools/skiaserve/urlhandlers/DownloadHandler.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/skiaserve/urlhandlers/DownloadHandler.cpp b/tools/skiaserve/urlhandlers/DownloadHandler.cpp new file mode 100644 index 0000000000..719a382494 --- /dev/null +++ b/tools/skiaserve/urlhandlers/DownloadHandler.cpp @@ -0,0 +1,51 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "UrlHandler.h" + +#include "microhttpd.h" +#include "SkPictureRecorder.h" +#include "SkPixelSerializer.h" +#include "../Request.h" +#include "../Response.h" + +using namespace Response; + +bool DownloadHandler::canHandle(const char* method, const char* url) { + return 0 == strcmp(method, MHD_HTTP_METHOD_GET) && + 0 == strcmp(url, "/download"); +} + +int DownloadHandler::handle(Request* request, MHD_Connection* connection, + const char* url, const char* method, + const char* upload_data, size_t* upload_data_size) { + if (!request->fPicture.get()) { + return MHD_NO; + } + + // TODO move to a function + // Playback into picture recorder + SkPictureRecorder recorder; + SkCanvas* canvas = recorder.beginRecording(Request::kImageWidth, + Request::kImageHeight); + + request->fDebugCanvas->draw(canvas); + + SkAutoTUnref<SkPicture> picture(recorder.endRecording()); + + SkDynamicMemoryWStream outStream; + + SkAutoTUnref<SkPixelSerializer> serializer(SkImageEncoder::CreatePixelSerializer()); + picture->serialize(&outStream, serializer); + + SkAutoTUnref<SkData> data(outStream.copyToData()); + + // TODO fancier name handling + return SendData(connection, data, "application/octet-stream", true, + "attachment; filename=something.skp;"); +} + |