Chromium Code Reviews| 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..19cc59285391776a1decfdb1d7b3ebb0d91be8b7 100644 |
| --- a/chrome/browser/extensions/webstore_install_helper.cc |
| +++ b/chrome/browser/extensions/webstore_install_helper.cc |
| @@ -7,12 +7,14 @@ |
| #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" |
|
Robert Sesek
2015/05/14 20:12:33
Unused.
Eran Messeri
2015/05/15 12:52:40
Done.
|
| #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" |
|
Robert Sesek
2015/05/14 20:12:33
Unused.
Eran Messeri
2015/05/15 12:52:40
Done.
|
| #include "net/base/load_flags.h" |
| @@ -64,33 +66,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 +99,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 +133,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, |