Chromium Code Reviews| Index: ios/chrome/browser/web_resource/ios_web_resource_service.cc |
| diff --git a/ios/chrome/browser/web_resource/ios_web_resource_service.cc b/ios/chrome/browser/web_resource/ios_web_resource_service.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..14af00a67900c3d84846347bbd4f50fb38bcefd7 |
| --- /dev/null |
| +++ b/ios/chrome/browser/web_resource/ios_web_resource_service.cc |
| @@ -0,0 +1,82 @@ |
| +// 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 "ios/chrome/browser/web_resource/ios_web_resource_service.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/json/json_reader.h" |
| +#include "base/values.h" |
| +#include "ios/chrome/browser/application_context.h" |
| +#include "ios/web/public/web_thread.h" |
| + |
| +namespace { |
| + |
| +const char kInvalidDataTypeError[] = |
| + "Data from web resource server is missing or not valid JSON."; |
| + |
| +const char kUnexpectedJSONFormatError[] = |
| + "Data from web resource server does not have expected format."; |
| + |
| +// Helper method to run a closure. |
| +void RunClosure(const base::Closure& closure) { |
| + closure.Run(); |
| +} |
| + |
| +} // namespace |
| + |
| +IOSWebResourceService::IOSWebResourceService( |
| + PrefService* prefs, |
| + const GURL& web_resource_server, |
| + bool apply_locale_to_url, |
| + const char* last_update_time_pref_name, |
| + int start_fetch_delay_ms, |
| + int cache_update_delay_ms) |
| + : web_resource::WebResourceService( |
| + prefs, |
| + web_resource_server, |
| + apply_locale_to_url ? GetApplicationContext()->GetApplicationLocale() |
| + : std::string(), |
| + last_update_time_pref_name, |
| + start_fetch_delay_ms, |
| + cache_update_delay_ms, |
| + nullptr) { |
| +} |
| + |
| +IOSWebResourceService::~IOSWebResourceService() { |
| +} |
| + |
| +// static |
| +base::Closure IOSWebResourceService::ParseJSONOnBackgroundThread( |
| + scoped_ptr<std::string> data, |
| + const SuccessCallback& success_callback, |
| + const ErrorCallback& error_callback) { |
| + if (data->empty()) |
| + return base::Bind(error_callback, std::string(kInvalidDataTypeError)); |
| + |
| + scoped_ptr<base::Value> value(base::JSONReader::Read(*data)); |
| + if (!value.get()) { |
| + // Page information not properly read, or corrupted. |
| + return base::Bind(error_callback, std::string(kInvalidDataTypeError)); |
| + } |
| + |
| + if (!value->IsType(base::Value::TYPE_DICTIONARY)) |
| + return base::Bind(error_callback, std::string(kUnexpectedJSONFormatError)); |
| + |
| + return base::Bind(success_callback, base::Passed(&value)); |
| +} |
| + |
| +void IOSWebResourceService::ParseJSON(const std::string& data, |
| + const SuccessCallback& success_callback, |
| + const ErrorCallback& error_callback) { |
| + scoped_ptr<std::string> data_copy(new std::string(data)); |
| + base::PostTaskAndReplyWithResult( |
| + web::WebThread::GetBlockingPool(), FROM_HERE, |
| + base::Bind(&IOSWebResourceService::ParseJSONOnBackgroundThread, |
| + base::Passed(&data_copy), success_callback, error_callback), |
|
Bernhard Bauer
2015/01/26 12:05:43
Could you just pass the data directly?
droger
2015/01/26 12:14:23
I used base::Passed to avoid making a copy. I am n
Bernhard Bauer
2015/01/26 12:22:49
Yeah, pretty much. You do already make a copy righ
droger
2015/01/26 12:28:19
Done.
|
| + base::Bind(&RunClosure)); |
| +} |
| + |
| +net::URLRequestContextGetter* IOSWebResourceService::GetRequestContext() { |
| + return GetApplicationContext()->GetSystemURLRequestContext(); |
| +} |