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, |