Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: components/safe_json/safe_json_parser_android.cc

Issue 1203083002: Add a JSON sanitizer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: build files Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/safe_json/safe_json_parser_android.h ('k') | components/test/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/safe_json/safe_json_parser_android.cc
diff --git a/components/safe_json/safe_json_parser_android.cc b/components/safe_json/safe_json_parser_android.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9266ec702f6797fa60d57e7dbc68b547dcefec01
--- /dev/null
+++ b/components/safe_json/safe_json_parser_android.cc
@@ -0,0 +1,56 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/safe_json/safe_json_parser_android.h"
+
+#include "base/bind.h"
+#include "base/json/json_reader.h"
+#include "base/values.h"
+#include "components/safe_json/json_sanitizer.h"
+
+namespace safe_json {
+
+SafeJsonParserAndroid::SafeJsonParserAndroid(
+ const std::string& unsafe_json,
+ const SuccessCallback& success_callback,
+ const ErrorCallback& error_callback)
+ : unsafe_json_(unsafe_json),
+ success_callback_(success_callback),
+ error_callback_(error_callback) {}
+
+SafeJsonParserAndroid::~SafeJsonParserAndroid() {}
+
+void SafeJsonParserAndroid::Start() {
+ JsonSanitizer::Sanitize(
+ unsafe_json_,
+ base::Bind(&SafeJsonParserAndroid::OnSanitizationSuccess,
+ base::Unretained(this)),
+ base::Bind(&SafeJsonParserAndroid::OnSanitizationError,
+ base::Unretained(this)));
+}
+
+void SafeJsonParserAndroid::OnSanitizationSuccess(
+ const std::string& sanitized_json) {
+ // Self-destruct at the end of this method.
+ scoped_ptr<SafeJsonParserAndroid> deleter(this);
+
+ int error_code;
+ std::string error;
+ scoped_ptr<base::Value> value = base::JSONReader::ReadAndReturnError(
+ sanitized_json, base::JSON_PARSE_RFC, &error_code, &error);
+
+ if (!value) {
+ error_callback_.Run(error);
+ return;
+ }
+
+ success_callback_.Run(value.Pass());
+}
+
+void SafeJsonParserAndroid::OnSanitizationError(const std::string& error) {
+ error_callback_.Run(error);
+ delete this;
+}
+
+} // namespace safe_json
« no previous file with comments | « components/safe_json/safe_json_parser_android.h ('k') | components/test/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698