summaryrefslogtreecommitdiffstats
path: root/ios
diff options
context:
space:
mode:
authorbauerb <bauerb@chromium.org>2016-03-21 10:19:26 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-21 17:22:52 +0000
commitba741ceb7fbe5ed69f62ccc6bd6fa374a23725e7 (patch)
treea4b359b9f82630a3399e4c885b0c357688ff27d7 /ios
parent19f335aba751a0809efa94d641502e6f72249bad (diff)
downloadchromium_src-ba741ceb7fbe5ed69f62ccc6bd6fa374a23725e7.zip
chromium_src-ba741ceb7fbe5ed69f62ccc6bd6fa374a23725e7.tar.gz
chromium_src-ba741ceb7fbe5ed69f62ccc6bd6fa374a23725e7.tar.bz2
[NTP snippets] Parse downloaded snippets from memory rather than from disk.
We store the canonical version of the snippets database in prefs, so there is no need to write the newly downloaded set of snippets to disk, just to read it back into memory. Also, use SafeJsonParser for parsing the downloaded JSON, as it's coming from an untrusted source. Review URL: https://codereview.chromium.org/1816533002 Cr-Commit-Position: refs/heads/master@{#382314}
Diffstat (limited to 'ios')
-rw-r--r--ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc25
1 files changed, 24 insertions, 1 deletions
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
index 89f858e..1533af6 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
@@ -4,7 +4,10 @@
#include "ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h"
+#include "base/json/json_reader.h"
#include "base/memory/singleton.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/values.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "components/ntp_snippets/ntp_snippets_fetcher.h"
#include "components/ntp_snippets/ntp_snippets_service.h"
@@ -22,6 +25,25 @@
using suggestions::SuggestionsService;
using suggestions::SuggestionsServiceFactory;
+namespace {
+
+void ParseJson(
+ const std::string& json,
+ const ntp_snippets::NTPSnippetsService::SuccessCallback& success_callback,
+ const ntp_snippets::NTPSnippetsService::ErrorCallback& error_callback) {
+ base::JSONReader json_reader;
+ scoped_ptr<base::Value> value = json_reader.ReadToValue(json);
+ if (value) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(success_callback, base::Passed(&value)));
+ } else {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(error_callback, json_reader.GetErrorMessage()));
+ }
+}
+
+} // namespace
+
// static
IOSChromeNTPSnippetsServiceFactory*
IOSChromeNTPSnippetsServiceFactory::GetInstance() {
@@ -75,5 +97,6 @@ IOSChromeNTPSnippetsServiceFactory::BuildServiceInstanceFor(
GetApplicationContext()->GetApplicationLocale(), scheduler,
make_scoped_ptr(new ntp_snippets::NTPSnippetsFetcher(
task_runner, (SigninManagerBase*)signin_manager, token_service,
- request_context, browser_state->GetStatePath()))));
+ request_context)),
+ base::Bind(&ParseJson)));
}