diff options
author | bauerb <bauerb@chromium.org> | 2016-03-21 10:19:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-21 17:22:52 +0000 |
commit | ba741ceb7fbe5ed69f62ccc6bd6fa374a23725e7 (patch) | |
tree | a4b359b9f82630a3399e4c885b0c357688ff27d7 /ios | |
parent | 19f335aba751a0809efa94d641502e6f72249bad (diff) | |
download | chromium_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.cc | 25 |
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))); } |