1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_EXTENSIONS_STARTUP_HELPER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_STARTUP_HELPER_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "chrome/browser/extensions/pack_extension_job.h" 10 11 class CommandLine; 12 class Profile; 13 14 namespace extensions { 15 16 // Initialization helpers for various Extension startup actions. 17 class StartupHelper : public PackExtensionJob::Client { 18 public: 19 StartupHelper(); 20 virtual ~StartupHelper(); 21 22 virtual void OnPackSuccess( 23 const base::FilePath& crx_path, 24 const base::FilePath& output_private_key_path) OVERRIDE; 25 virtual void OnPackFailure(const std::string& error_message, 26 ExtensionCreator::ErrorType type) OVERRIDE; 27 28 // Handle --pack-extension flag from the |cmd_line| by packing the specified 29 // extension. Returns false if the pack job failed. 30 bool PackExtension(const CommandLine& cmd_line); 31 32 // Validates a crx at the path given by the --validate-extension flag - can 33 // it be installed? Returns true if the crx is valid, or false otherwise. 34 // If the return value is false, a description of the problem may be written 35 // into |error|. 36 bool ValidateCrx(const CommandLine& cmd_line, std::string* error); 37 38 // Handle --uninstall-extension flag from the |cmd_line| by uninstalling the 39 // specified extension from |profile|. Returns false if the uninstall job 40 // could not be started. 41 bool UninstallExtension(const CommandLine& cmd_line, Profile* profile); 42 43 // Handle --install-from-webstore flag from |cmd_line| by downloading 44 // metadata from the webstore for the given id, prompting the user to 45 // confirm, and then downloading the crx and installing it. 46 bool InstallFromWebstore(const CommandLine& cmd_line, Profile* profile); 47 48 // Handle --limited-install-from-webstore flag from |cmd_line| by downloading 49 // metadata from the webstore for the given id, prompting the user to 50 // confirm, and then downloading the crx and installing it. 51 // This whole process is only kicked off by this function and completed 52 // asynchronously unlike InstallFromWebstore which finishes everything before 53 // returning. 54 void LimitedInstallFromWebstore(const CommandLine& cmd_line, Profile* profile, 55 base::Callback<void()> done_callback); 56 57 // Maps the command line argument to the extension id. Returns an empty string 58 // in the case when there is no mapping. 59 std::string WebStoreIdFromLimitedInstallCmdLine(const CommandLine& cmd_line); 60 private: 61 scoped_refptr<PackExtensionJob> pack_job_; 62 bool pack_job_succeeded_; 63 64 DISALLOW_COPY_AND_ASSIGN(StartupHelper); 65 }; 66 67 } // namespace extensions 68 69 #endif // CHROME_BROWSER_EXTENSIONS_STARTUP_HELPER_H_ 70