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/CmdHandler.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/CmdHandler.cpp')
-rw-r--r-- | tools/skiaserve/urlhandlers/CmdHandler.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/skiaserve/urlhandlers/CmdHandler.cpp b/tools/skiaserve/urlhandlers/CmdHandler.cpp new file mode 100644 index 0000000000..c741eb9a43 --- /dev/null +++ b/tools/skiaserve/urlhandlers/CmdHandler.cpp @@ -0,0 +1,61 @@ +/* + * 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 "../Request.h" +#include "../Response.h" + +using namespace Response; + +bool CmdHandler::canHandle(const char* method, const char* url) { + const char* kBasePath = "/cmd"; + return 0 == strncmp(url, kBasePath, strlen(kBasePath)); +} + +int CmdHandler::handle(Request* request, MHD_Connection* connection, + const char* url, const char* method, + const char* upload_data, size_t* upload_data_size) { + SkTArray<SkString> commands; + SkStrSplit(url, "/", &commands); + + if (!request->fPicture.get() || commands.count() > 3) { + return MHD_NO; + } + + // /cmd or /cmd/N + if (0 == strcmp(method, MHD_HTTP_METHOD_GET)) { + int n; + if (commands.count() == 1) { + n = request->fDebugCanvas->getSize() - 1; + } else { + sscanf(commands[1].c_str(), "%d", &n); + } + return SendJSON(connection, request, n); + } + + // /cmd/N, for now only delete supported + if (commands.count() == 2 && 0 == strcmp(method, MHD_HTTP_METHOD_DELETE)) { + int n; + sscanf(commands[1].c_str(), "%d", &n); + request->fDebugCanvas->deleteDrawCommandAt(n); + return SendOK(connection); + } + + // /cmd/N/[0|1] + if (commands.count() == 3 && 0 == strcmp(method, MHD_HTTP_METHOD_POST)) { + int n, toggle; + sscanf(commands[1].c_str(), "%d", &n); + sscanf(commands[2].c_str(), "%d", &toggle); + request->fDebugCanvas->toggleCommand(n, toggle); + return SendOK(connection); + } + + return MHD_NO; +} + |