| Index: chrome/browser/extensions/webstore_install_helper.cc
|
| diff --git a/chrome/browser/extensions/webstore_install_helper.cc b/chrome/browser/extensions/webstore_install_helper.cc
|
| index 948d9954134fe6b38718be0cd34471830942c63a..bc798718e8604d0f604df4bf5a6d2416af263dee 100644
|
| --- a/chrome/browser/extensions/webstore_install_helper.cc
|
| +++ b/chrome/browser/extensions/webstore_install_helper.cc
|
| @@ -7,20 +7,19 @@
|
| #include <string>
|
|
|
| #include "base/bind.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/thread_task_runner_handle.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/bitmap_fetcher/bitmap_fetcher.h"
|
| -#include "chrome/common/chrome_utility_messages.h"
|
| #include "chrome/common/extensions/chrome_utility_extensions_messages.h"
|
| #include "chrome/grit/generated_resources.h"
|
| +#include "components/safe_json_parser/safe_json_parser.h"
|
| #include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/utility_process_host.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/url_request/url_request.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| using content::BrowserThread;
|
| -using content::UtilityProcessHost;
|
|
|
| namespace {
|
|
|
| @@ -64,33 +63,14 @@ void WebstoreInstallHelper::Start() {
|
| net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES);
|
| }
|
|
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - base::Bind(&WebstoreInstallHelper::StartWorkOnIOThread, this));
|
| -}
|
| -
|
| -void WebstoreInstallHelper::StartWorkOnIOThread() {
|
| - CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - utility_host_ = UtilityProcessHost::Create(
|
| - this, base::ThreadTaskRunnerHandle::Get().get())->AsWeakPtr();
|
| - utility_host_->SetName(l10n_util::GetStringUTF16(
|
| - IDS_UTILITY_PROCESS_JSON_PARSER_NAME));
|
| - utility_host_->StartBatchMode();
|
| -
|
| - utility_host_->Send(new ChromeUtilityMsg_ParseJSON(manifest_));
|
| -}
|
| -
|
| -bool WebstoreInstallHelper::OnMessageReceived(const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(WebstoreInstallHelper, message)
|
| - IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Succeeded,
|
| - OnJSONParseSucceeded)
|
| - IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Failed,
|
| - OnJSONParseFailed)
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - return handled;
|
| + base::WeakPtrFactory<WebstoreInstallHelper> weak_factory(this);
|
| + scoped_refptr<safe_json_parser::SafeJsonParser> parser =
|
| + new safe_json_parser::SafeJsonParser(
|
| + manifest_, base::Bind(&WebstoreInstallHelper::OnJSONParseSucceeded,
|
| + weak_factory.GetWeakPtr()),
|
| + base::Bind(&WebstoreInstallHelper::OnJSONParseFailed,
|
| + weak_factory.GetWeakPtr()));
|
| + parser->Start();
|
| }
|
|
|
| void WebstoreInstallHelper::OnFetchComplete(const GURL& url,
|
| @@ -116,16 +96,21 @@ void WebstoreInstallHelper::OnFetchComplete(const GURL& url,
|
| }
|
|
|
| void WebstoreInstallHelper::OnJSONParseSucceeded(
|
| - const base::ListValue& wrapper) {
|
| + scoped_ptr<base::Value> wrapper) {
|
| CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| manifest_parse_complete_ = true;
|
| - const base::Value* value = NULL;
|
| - CHECK(wrapper.Get(0, &value));
|
| - if (value->IsType(base::Value::TYPE_DICTIONARY)) {
|
| - parsed_manifest_.reset(
|
| - static_cast<const base::DictionaryValue*>(value)->DeepCopy());
|
| - } else {
|
| + const base::ListValue* wrapper_list = NULL;
|
| + if (!wrapper->GetAsList(&wrapper_list)) {
|
| parse_error_ = Delegate::MANIFEST_ERROR;
|
| + } else {
|
| + const base::Value* value = NULL;
|
| + CHECK(wrapper_list->Get(0, &value));
|
| + if (value->IsType(base::Value::TYPE_DICTIONARY)) {
|
| + parsed_manifest_.reset(
|
| + static_cast<const base::DictionaryValue*>(value)->DeepCopy());
|
| + } else {
|
| + parse_error_ = Delegate::MANIFEST_ERROR;
|
| + }
|
| }
|
| ReportResultsIfComplete();
|
| }
|
| @@ -145,12 +130,6 @@ void WebstoreInstallHelper::ReportResultsIfComplete() {
|
| if (!icon_decode_complete_ || !manifest_parse_complete_)
|
| return;
|
|
|
| - // The utility_host_ will take care of deleting itself after this call.
|
| - if (utility_host_.get()) {
|
| - utility_host_->EndBatchMode();
|
| - utility_host_.reset();
|
| - }
|
| -
|
| BrowserThread::PostTask(
|
| BrowserThread::UI,
|
| FROM_HERE,
|
|
|