| Index: chrome/browser/ui/webui/extensions/install_extension_handler.cc
|
| diff --git a/chrome/browser/ui/webui/extensions/install_extension_handler.cc b/chrome/browser/ui/webui/extensions/install_extension_handler.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..042e31a326fecd3c9301071c2816f0946ee2675d
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/webui/extensions/install_extension_handler.cc
|
| @@ -0,0 +1,88 @@
|
| +// Copyright (c) 2012 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 "chrome/browser/ui/webui/extensions/install_extension_handler.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/extensions/crx_installer.h"
|
| +#include "chrome/browser/extensions/extension_install_ui.h"
|
| +#include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/extensions/extension_system.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/common/extensions/extension_switch_utils.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/browser/web_contents_view.h"
|
| +#include "content/public/browser/web_ui.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "webkit/glue/webdropdata.h"
|
| +
|
| +InstallExtensionHandler::InstallExtensionHandler() {
|
| +}
|
| +
|
| +InstallExtensionHandler::~InstallExtensionHandler() {
|
| +}
|
| +
|
| +void InstallExtensionHandler::GetLocalizedValues(
|
| + DictionaryValue* localized_strings) {
|
| + DCHECK(localized_strings);
|
| + localized_strings->SetString(
|
| + "extensionSettingsInstallDropTarget",
|
| + l10n_util::GetStringUTF16(IDS_EXTENSIONS_INSTALL_DROP_TARGET));
|
| + localized_strings->SetBoolean(
|
| + "offStoreInstallEnabled",
|
| + extensions::switch_utils::IsOffStoreInstallEnabled());
|
| +}
|
| +
|
| +void InstallExtensionHandler::RegisterMessages() {
|
| + web_ui()->RegisterMessageCallback(
|
| + "startDrag",
|
| + base::Bind(&InstallExtensionHandler::HandleStartDragMessage,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + "stopDrag",
|
| + base::Bind(&InstallExtensionHandler::HandleStopDragMessage,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + "installDroppedFile",
|
| + base::Bind(&InstallExtensionHandler::HandleInstallMessage,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| +void InstallExtensionHandler::HandleStartDragMessage(const ListValue* args) {
|
| + WebDropData* drop_data = web_ui()->GetWebContents()->GetView()->GetDropData();
|
| + if (!drop_data) {
|
| + DLOG(ERROR) << "No current drop data.";
|
| + return;
|
| + }
|
| +
|
| + if (drop_data->filenames.empty()) {
|
| + DLOG(ERROR) << "Current drop data contains no files.";
|
| + return;
|
| + }
|
| +
|
| + file_to_install_ = FilePath::FromWStringHack(
|
| + UTF16ToWide(drop_data->filenames.front()));
|
| +}
|
| +
|
| +void InstallExtensionHandler::HandleStopDragMessage(const ListValue* args) {
|
| + file_to_install_.clear();
|
| +}
|
| +
|
| +void InstallExtensionHandler::HandleInstallMessage(const ListValue* args) {
|
| + if (file_to_install_.empty()) {
|
| + LOG(ERROR) << "No file captured to install.";
|
| + return;
|
| + }
|
| +
|
| + Profile* profile = Profile::FromWebUI(web_ui());
|
| + scoped_refptr<CrxInstaller> crx_installer(
|
| + CrxInstaller::Create(
|
| + ExtensionSystem::Get(profile)->extension_service(),
|
| + new ExtensionInstallUI(profile)));
|
| + crx_installer->InstallCrx(file_to_install_);
|
| +
|
| + file_to_install_.clear();
|
| +}
|
|
|