1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/extensions_startup.h" 6 7 #include "base/string_util.h" 8 #include "base/stringprintf.h" 9 #include "base/utf_string_conversions.h" 10 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/common/chrome_switches.h" 13 14 #if defined(OS_WIN) 15 #include "ui/base/message_box_win.h" 16 #endif 17 18 ExtensionsStartupUtil::ExtensionsStartupUtil() : pack_job_succeeded_(false) {} 19 20 void ExtensionsStartupUtil::OnPackSuccess( 21 const FilePath& crx_path, 22 const FilePath& output_private_key_path) { 23 pack_job_succeeded_ = true; 24 ShowPackExtensionMessage( 25 L"Extension Packaging Success", 26 UTF16ToWideHack(PackExtensionJob::StandardSuccessMessage( 27 crx_path, output_private_key_path))); 28 } 29 30 void ExtensionsStartupUtil::OnPackFailure(const std::string& error_message) { 31 ShowPackExtensionMessage(L"Extension Packaging Error", 32 UTF8ToWide(error_message)); 33 } 34 35 void ExtensionsStartupUtil::ShowPackExtensionMessage( 36 const std::wstring& caption, 37 const std::wstring& message) { 38 #if defined(OS_WIN) 39 ui::MessageBox(NULL, message, caption, MB_OK | MB_SETFOREGROUND); 40 #else 41 // Just send caption & text to stdout on mac & linux. 42 std::string out_text = WideToASCII(caption); 43 out_text.append("\n\n"); 44 out_text.append(WideToASCII(message)); 45 out_text.append("\n"); 46 base::StringPrintf("%s", out_text.c_str()); 47 #endif 48 } 49 50 bool ExtensionsStartupUtil::PackExtension(const CommandLine& cmd_line) { 51 if (!cmd_line.HasSwitch(switches::kPackExtension)) 52 return false; 53 54 // Input Paths. 55 FilePath src_dir = cmd_line.GetSwitchValuePath(switches::kPackExtension); 56 FilePath private_key_path; 57 if (cmd_line.HasSwitch(switches::kPackExtensionKey)) { 58 private_key_path = cmd_line.GetSwitchValuePath(switches::kPackExtensionKey); 59 } 60 61 // Launch a job to perform the packing on the file thread. 62 pack_job_ = new PackExtensionJob(this, src_dir, private_key_path); 63 pack_job_->set_asynchronous(false); 64 pack_job_->Start(); 65 66 return pack_job_succeeded_; 67 } 68 69 bool ExtensionsStartupUtil::UninstallExtension(const CommandLine& cmd_line, 70 Profile* profile) { 71 DCHECK(profile); 72 73 if (!cmd_line.HasSwitch(switches::kUninstallExtension)) 74 return false; 75 76 ExtensionService* extension_service = profile->GetExtensionService(); 77 if (!extension_service) 78 return false; 79 80 std::string extension_id = cmd_line.GetSwitchValueASCII( 81 switches::kUninstallExtension); 82 if (ExtensionService::UninstallExtensionHelper(extension_service, 83 extension_id)) { 84 return true; 85 } 86 87 return false; 88 } 89 90 ExtensionsStartupUtil::~ExtensionsStartupUtil() { 91 if (pack_job_.get()) 92 pack_job_->ClearClient(); 93 } 94