diff options
author | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-08 01:18:02 +0000 |
---|---|---|
committer | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-08 01:18:02 +0000 |
commit | 13555c122fbc9ec2a6c1a4cbace288ec7892be6e (patch) | |
tree | b78bb0337bf633e7ecff2adc004c4a93542bdba9 /chrome/browser/views/extensions | |
parent | 2c8311e9badbe99ba50d6429a2c13bb8be89ff80 (diff) | |
download | chromium_src-13555c122fbc9ec2a6c1a4cbace288ec7892be6e.zip chromium_src-13555c122fbc9ec2a6c1a4cbace288ec7892be6e.tar.gz chromium_src-13555c122fbc9ec2a6c1a4cbace288ec7892be6e.tar.bz2 |
Reland: HTML Pack Extension Dialog / Linux & Mac Packaging Support.
original issue: http://codereview.chromium.org/207062
The issue had to do with a symbol collison with the nss libraries (which are currently out-of-date) on the build bots.
HTML Pack Extension Dialog. This removes the views implementation of the ExtensionPackDialog, and implements the dialog in html in the extensions_ui DOMUI.
Additionally, support is added for packaging extensions via ---pack-extension on linux and mac
BUG=20668, 20669
TBR=aa,wtc
Review URL: http://codereview.chromium.org/265032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28365 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/extensions')
-rw-r--r-- | chrome/browser/views/extensions/extension_pack_dialog.cc | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/chrome/browser/views/extensions/extension_pack_dialog.cc b/chrome/browser/views/extensions/extension_pack_dialog.cc deleted file mode 100644 index 3b66cc7..0000000 --- a/chrome/browser/views/extensions/extension_pack_dialog.cc +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) 2009 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 "app/gfx/font.h" -#include "app/l10n_util.h" -#include "app/win_util.h" -#include "chrome/browser/browser_list.h" -#include "chrome/browser/browser_window.h" -#include "chrome/browser/chrome_thread.h" -#include "chrome/browser/extensions/extensions_ui.h" -#include "chrome/browser/extensions/pack_extension_job.h" -#include "chrome/browser/shell_dialogs.h" -#include "grit/generated_resources.h" -#include "views/controls/label.h" -#include "views/controls/button/native_button.h" -#include "views/controls/textfield/textfield.h" -#include "views/standard_layout.h" -#include "views/view.h" -#include "views/window/dialog_client_view.h" -#include "views/window/dialog_delegate.h" -#include "views/window/window.h" - -namespace { - -// Puts up the the pack dialog, which has this basic layout: -// -// Select the extension to pack. -// -// Extension root: [ ] [browse] -// Extension key file: [ ] [browse] -// -// [ok] [cancel] -class PackDialogContent - : public views::View, - public PackExtensionJob::Client, - public SelectFileDialog::Listener, - public views::ButtonListener, - public views::DialogDelegate { - public: - PackDialogContent() : ok_button_(NULL) { - using views::GridLayout; - - // Setup the layout. - views::GridLayout* layout = CreatePanelGridLayout(this); - SetLayoutManager(layout); - - views::ColumnSet* columns = layout->AddColumnSet(0); - columns->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, - GridLayout::USE_PREF, 0, 0); - columns->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - columns->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1, - GridLayout::USE_PREF, 0, 0); - columns->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - columns->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, - GridLayout::USE_PREF, 0, 0); - - layout->StartRow(0, 0); - views::Label* heading = new views::Label( - l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_HEADING)); - heading->SetMultiLine(true); - heading->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - layout->AddView(heading, 5, 1, GridLayout::FILL, GridLayout::LEADING); - - layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing); - - layout->StartRow(0, 0); - layout->AddView(new views::Label(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_ROOT_DIRECTORY_LABEL))); - extension_root_textbox_ = new views::Textfield(); - extension_root_textbox_->set_default_width_in_chars(32); - layout->AddView(extension_root_textbox_); - extension_root_button_ = new views::NativeButton(this, l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_BROWSE)); - layout->AddView(extension_root_button_); - - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); - - layout->StartRow(0, 0); - layout->AddView(new views::Label(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_PRIVATE_KEY_LABEL))); - private_key_textbox_ = new views::Textfield(); - private_key_textbox_->set_default_width_in_chars(32); - layout->AddView(private_key_textbox_); - private_key_button_ = new views::NativeButton(this, l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_BROWSE)); - layout->AddView(private_key_button_); - } - - // PackExtensionJob::Client - virtual void OnPackSuccess(const FilePath& crx_file, - const FilePath& pem_file) { - ok_button_->SetEnabled(true); - std::wstring message; - if (!pem_file.empty()) { - message = l10n_util::GetStringF( - IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW, - crx_file.ToWStringHack(), - pem_file.ToWStringHack()); - } else { - message = l10n_util::GetStringF( - IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE, - crx_file.ToWStringHack()); - } - win_util::MessageBox(GetWindow()->GetNativeWindow(), message, - l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_SUCCESS_TITLE), - MB_OK | MB_SETFOREGROUND); - GetWindow()->Close(); - } - - void OnPackFailure(const std::wstring& error) { - ok_button_->SetEnabled(true); - win_util::MessageBox(GetWindow()->GetNativeWindow(), error, - l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_FAILURE_TITLE), - MB_OK | MB_SETFOREGROUND); - } - - private: - // DialogDelegate - virtual bool Accept() { - FilePath root_directory = FilePath::FromWStringHack( - extension_root_textbox_->text()); - FilePath key_file = FilePath::FromWStringHack(private_key_textbox_->text()); - - if (root_directory.empty()) { - if (extension_root_textbox_->text().empty()) { - OnPackFailure(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED)); - } else { - OnPackFailure(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID)); - } - - return false; - } - - if (!private_key_textbox_->text().empty() && key_file.empty()) { - OnPackFailure(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID)); - return false; - } - - pack_job_ = new PackExtensionJob(this, root_directory, key_file, - ChromeThread::GetMessageLoop(ChromeThread::FILE)); - - // Prevent the dialog from closing because PackExtensionJob is asynchronous. - // We need to wait to find out if it succeeded before closing the window. - // - // Also disable the OK button while this is going so the user understands - // that something is happening. - views::DialogClientView* dialog = static_cast<views::DialogClientView*>( - GetWindow()->GetClientView()); - ok_button_ = dialog->ok_button(); - ok_button_->SetEnabled(false); - return false; - } - - virtual void OnClose() { - if (pack_job_) - pack_job_->ClearClient(); - } - - // WindowDelegate - virtual std::wstring GetWindowTitle() const { - return l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_TITLE); - } - virtual views::View* GetContentsView() { - return this; - } - - // ButtonListener - virtual void ButtonPressed(views::Button* sender, const views::Event& event) { - file_dialog_ = SelectFileDialog::Create(this); - - if (sender == extension_root_button_) { - file_dialog_->SelectFile(SelectFileDialog::SELECT_FOLDER, - l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_SELECT_ROOT), - FilePath::FromWStringHack(extension_root_textbox_->text()), - NULL, 0, FILE_PATH_LITERAL(""), - GetWindow()->GetNativeWindow(), - extension_root_textbox_); - } else { - static SelectFileDialog::FileTypeInfo info; - info.extensions.push_back(std::vector<FilePath::StringType>()); - info.extensions.front().push_back(FILE_PATH_LITERAL("pem")); - info.extension_description_overrides.push_back(l10n_util::GetString( - IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION)); - info.include_all_files = true; - - file_dialog_->SelectFile(SelectFileDialog::SELECT_OPEN_FILE, - l10n_util::GetString(IDS_EXTENSION_PACK_DIALOG_SELECT_KEY), - FilePath::FromWStringHack(private_key_textbox_->text()), - &info, 1, FILE_PATH_LITERAL(""), - GetWindow()->GetNativeWindow(), - private_key_textbox_); - } - } - - // SelectFileDialog::Listener - virtual void MultiFilesSelected( - const std::vector<FilePath>& files, void* params) {}; - virtual void FileSelectionCanceled(void* params) {}; - virtual void FileSelected(const FilePath& path, int index, void* params) { - static_cast<views::Textfield*>(params)->SetText(path.ToWStringHack()); - } - - views::Textfield* extension_root_textbox_; - views::Textfield* private_key_textbox_; - views::NativeButton* extension_root_button_; - views::NativeButton* private_key_button_; - views::NativeButton* ok_button_; - - scoped_refptr<SelectFileDialog> file_dialog_; - scoped_refptr<PackExtensionJob> pack_job_; - - DISALLOW_COPY_AND_ASSIGN(PackDialogContent); -}; - -} // namespace - -// static -void ExtensionsDOMHandler::ShowPackDialog() { - Browser* browser = BrowserList::GetLastActive(); - if (!browser) - return; - - BrowserWindow* window = browser->window(); - if (!window) - return; - - views::Window::CreateChromeWindow(window->GetNativeHandle(), - gfx::Rect(400, 0), new PackDialogContent())->Show(); -} |